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
27
ファイルシステムのデータを ブロックデバイスへの操作で変更
以下動画のテキストです
https://youtu.be/9DqN2dnkm3A
Satoru Takeuchi
PRO
May 06, 2025
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
会社員しながら本を書いてきた知見の共有
sat
PRO
3
750
デバイスにアクセスするデバイスファイル
sat
PRO
1
31
デバイスドライバ
sat
PRO
0
43
マルチスレッドの実現方法 ~カーネルスレッドとユーザスレッド~
sat
PRO
2
95
共有メモリ
sat
PRO
3
65
マルチスレッドプログラム
sat
PRO
3
55
Linuxのブートプロセス initramfs編
sat
PRO
2
73
Linuxのブートプロセス
sat
PRO
6
180
シェルのジョブ
sat
PRO
1
45
Other Decks in Technology
See All in Technology
kotlin-lsp を Emacs で使えるようにしてみた / use kotlin-lsp in Emacs
nabeo
0
150
成立するElixirの再束縛(再代入)可という選択
kubell_hr
0
290
VCpp Link and Library - C++ breaktime 2025 Summer
harukasao
0
190
"SaaS is Dead" は本当か!? 生成AI時代の医療 Vertical SaaS のリアル
kakehashi
PRO
3
220
(新URLに移行しました)FASTと向き合うことで見えた、大規模アジャイルの難しさと楽しさ
wooootack
0
720
Rubyで作る論理回路シミュレータの設計の話 - Kashiwa.rb #12
kozy4324
1
310
今からでも間に合う! 生成AI「RAG」再入門 / Re-introduction to RAG in Generative AI
hideakiaoyagi
1
180
RubyOnRailsOnDevin+α / DevinMeetupJapan#2
ginkouno
0
440
本部長の代わりに提案書レビュー! KDDI営業が毎日使うAIエージェント「A-BOSS」開発秘話
minorun365
PRO
14
1.8k
OCI Oracle Database Services新機能アップデート(2025/03-2025/05)
oracle4engineer
PRO
1
150
Workflows から Agents へ ~ 生成 AI アプリの成長過程とアプローチ~
belongadmin
3
160
「どこにある?」の解決。生成AI(RAG)で効率化するガバメントクラウド運用
toru_kubota
2
430
Featured
See All Featured
Into the Great Unknown - MozCon
thekraken
39
1.8k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
4
160
Become a Pro
speakerdeck
PRO
28
5.4k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.8k
Visualization
eitanlees
146
16k
The Language of Interfaces
destraynor
158
25k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.7k
Side Projects
sachag
455
42k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
A better future with KSS
kneath
239
17k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.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