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
22
ファイルシステムのデータを ブロックデバイスへの操作で変更
以下動画のテキストです
https://youtu.be/9DqN2dnkm3A
Satoru Takeuchi
PRO
May 06, 2025
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
デバイスにアクセスするデバイスファイル
sat
PRO
1
28
デバイスドライバ
sat
PRO
0
31
マルチスレッドの実現方法 ~カーネルスレッドとユーザスレッド~
sat
PRO
2
72
共有メモリ
sat
PRO
3
57
マルチスレッドプログラム
sat
PRO
3
47
Linuxのブートプロセス initramfs編
sat
PRO
2
59
Linuxのブートプロセス
sat
PRO
6
170
シェルのジョブ
sat
PRO
1
38
常駐サービスを実現するデーモンプロセス
sat
PRO
0
43
Other Decks in Technology
See All in Technology
LLMベースAIの基本 / basics of LLM based AI
kishida
10
2.6k
撤退危機からのピボット : 4年目エンジニアがリードする TypeScript で挑む事業復活 / crisis-to-pivot-4th-year-engineer-ts-relaunch
carta_engineering
2
630
シンプルな設定ファイルで実現する AWS IAM Identity Center のユーザー管理と開発チームへの委譲 / Delegating AWS IAM Identity Center User Management with a Simple DSL
yamaguchitk333
2
310
Contract One Dev Group 紹介資料
sansan33
PRO
0
5.7k
[JAWS-UG 栃木 #2]AWS FISはドSなのか?システムに試練を与えて強くする!
sh_fk2
1
250
GrafanaをClaude DesktopからMCPで触ってみた
hamadakoji
0
1.6k
HA K8s Clusterのスタンダードが覆る!? Cilium 1.18の🔥激アツ🔥新機能
logica0419
0
100
PandaCSSでつくる 型で守られたスタイリング基盤
dendaiman
1
330
MCP で繋ぐ Figma とデザインシステム〜LLM を使った UI 実装のリアル〜
kimuson
1
710
Cline&CursorによるAIコーディング徹底活用―Live Vibe Coding付き
pharma_x_tech
3
1.3k
熱々🔥のUDN🍜を喰らえ❗マルチテナントもVM統合も思いのまま❗新機能で切り拓くk8sネットワークの未来
tsukaman
0
180
Microsoft Season of Agent AI エージェントの使用開始
takas0522
0
100
Featured
See All Featured
Embracing the Ebb and Flow
colly
85
4.7k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
4 Signs Your Business is Dying
shpigford
183
22k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
21k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
180
53k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
24
2.8k
Art, The Web, and Tiny UX
lynnandtonic
298
21k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.5k
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