Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ファイルシステムのデータを ブロックデバイスへの操作で変更
Search
Satoru Takeuchi
PRO
May 06, 2025
Technology
1
32
ファイルシステムのデータを ブロックデバイスへの操作で変更
以下動画のテキストです
https://youtu.be/9DqN2dnkm3A
Satoru Takeuchi
PRO
May 06, 2025
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
Rook: Intro and Deep Dive With Ceph
sat
PRO
1
110
会社員しながら本を書いてきた知見の共有
sat
PRO
3
790
デバイスにアクセスするデバイスファイル
sat
PRO
1
38
デバイスドライバ
sat
PRO
0
49
マルチスレッドの実現方法 ~カーネルスレッドとユーザスレッド~
sat
PRO
2
120
共有メモリ
sat
PRO
3
70
マルチスレッドプログラム
sat
PRO
3
59
Linuxのブートプロセス initramfs編
sat
PRO
2
88
Linuxのブートプロセス
sat
PRO
6
190
Other Decks in Technology
See All in Technology
ビズリーチが挑む メトリクスを活用した技術的負債の解消 / dev-productivity-con2025
visional_engineering_and_design
3
7.5k
Lazy application authentication with Tailscale
bluehatbrit
0
210
さくらのIaaS基盤のモニタリングとOpenTelemetry/OSC Hokkaido 2025
fujiwara3
3
440
生成AI時代の開発組織・技術・プロセス 〜 ログラスの挑戦と考察 〜
itohiro73
1
460
Glacierだからってコストあきらめてない? / JAWS Meet Glacier Cost
taishin
1
160
How Do I Contact HP Printer Support? [Full 2025 Guide for U.S. Businesses]
harrry1211
0
120
高速なプロダクト開発を実現、創業期から掲げるエンタープライズアーキテクチャ
kawauso
2
9.2k
Getting to Know Your Legacy (System) with AI-Driven Software Archeology (WeAreDevelopers World Congress 2025)
feststelltaste
1
130
American airlines ®️ USA Contact Numbers: Complete 2025 Support Guide
airhelpsupport
0
380
第4回Snowflake 金融ユーザー会 Snowflake summit recap
tamaoki
1
280
関数型プログラミングで 「脳がバグる」を乗り越える
manabeai
1
190
What’s new in Android development tools
yanzm
0
310
Featured
See All Featured
The Language of Interfaces
destraynor
158
25k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.4k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
357
30k
Documentation Writing (for coders)
carmenintech
72
4.9k
Side Projects
sachag
455
42k
Writing Fast Ruby
sferik
628
62k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
970
Art, The Web, and Tiny UX
lynnandtonic
299
21k
Making Projects Easy
brettharned
116
6.3k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.8k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
126
53k
Become a Pro
speakerdeck
PRO
29
5.4k
Transcript
ファイルシステムのデータを ブロックデバイスへの操作で変更 May. 6th, 2025 Satoru Takeuchi X: satoru_takeuchi 1
はじめに • 前置き ◦ ファイルはディスク上に所定のフォーマットで置かれたデータのかたまり ◦ ファイルにアクセスすると最終的にディスク上のデータにアクセスする ◦ ブロックデバイスファイルはファイルシステムを介さずディスクに直接アクセスする •
やること ◦ ブロックデバイスファイルを使ってファイルシステムのデータを書き換える 2
ファイルシステムとブロックデバイスの関係(簡易版) 3 プロセス プロセス プロセス ユーザ空間 カーネル空間 現実世界 ディスク ブロックデバイスファイル
(例: /dev/sda) 通常ファイル (例: /home/sat/foo) デバイスドライバ 色々なレイヤ(今は気にしなくてよい )
手順 1. ファイルシステムを作成 2. ファイルシステム上のファイルにデータを書き込む 3. 書き込んだデータのブロックデバイス上のオフセットを得る 4. 上述のオフセットにブロックデバイスファイル経由でデータを書き込む 5.
ファイルからデータを読み出す 4
1. ファイルシステムを作成 • loop device上にext2ファイルシステムを作成 ◦ 📝 過去動画: その30 loop
device ◦ 📝 ext4やXFS、Btrfsだとデータの整合性を保つためのジャーナリングやコピーオンライト (後日別 動画で説明予定)といった仕組みのために実験結果がわかりにくくなるので避けた。 5 $ sudo dd if=/dev/zero of=test.img bs=1G count=0 seek=1 # サイズ1GiBのファイルを作成 … $ sudo mkfs.ext2 test.img # test.imgの中身をext2でフォーマット mke2fs 1.47.0 (5-Feb-2023) … $ sudo losetup -f test.img # test.imgをloop deviceにマップ $ losetup -l NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO LOG-SEC /dev/loop0 0 0 0 0 /home/sat/test.img 0 512 $ sudo mount test.img /mnt/ # loop deviceをmount $ sudo ls /mnt/ lost+found
2. ファイルシステム上のファイルにデータを書き込む • “hello block device”という文字列を先ほど作成したファイルシステム上のtestファイ ルに書き込む 6 $ echo
"hello block device" >test $ sudo dd if=test of=/mnt/test … $ cat /mnt/test hello block device $ sudo sync /mnt # 書き込んだ内容を確実にディスクに反映させる
3. 書き込んだデータのブロックデバイス上のオフセットを得る • ファイル内に存在する文字列を一覧する”strings”コマンドを使う ◦ -tdオプションを使用すると各文字列のファイル内オフセットが得られる 7 $ sudo strings
-td /dev/loop0 1128 $PcA 1160 /mnt 2371616 lost+found 2371636 test 4194304 hello block device 134217832 $PcA 402653288 $PcA 671088744 $PcA 939524200 $PcA
4. 上述のオフセットにブロックデバイスファイル経由でデータを書き込む • /mnt/testの内容が保存されているオフセットに別のデータを書き込む 8 $ umount /mnt # ページキャッシュの影響を排除
$ echo "HELLO BLOCK DEVICE" >test2 $ sudo dd if=test2 of=/dev/loop0 bs=1 seek=4194304 … $ sudo mount test.img /mnt/
5. ファイルからデータを読み出す • 9 $ sudo cat /mnt/test HELLO BLOCK
DEVICE
まとめ • ファイルのデータをファイルシステムが存在するディスクに対応するブロックデバイ スファイル経由で書き換えられた • ブロックデバイスファイル経由でディスクにアクセスできることがわかった 10