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
91
1
Share
ファイルシステムのデータを ブロックデバイスへの操作で変更
以下動画のテキストです
https://youtu.be/9DqN2dnkm3A
Satoru Takeuchi
PRO
May 06, 2025
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
小学校5,6年生向けキャリア教育 大人になるまでの道
sat
PRO
8
3.4k
ファイルシステムの不整合
sat
PRO
2
130
書籍執筆での生成AIの活用
sat
PRO
2
440
ChatGPTに従って体調管理2026
sat
PRO
0
170
eBPF
sat
PRO
1
140
waruiBPF
sat
PRO
0
120
eBPFとwaruiBPF
sat
PRO
5
4.4k
Pythonのコードの気になる行でスタックトレースを出す
sat
PRO
1
110
ソースコードを読むときの思考プロセスの例 ~markdownのレンダリング方法を知りたかった2 markdownパッケージ~
sat
PRO
0
220
Other Decks in Technology
See All in Technology
CREがSLOを握ると 何が変わるのか
nekomaho
0
330
GitHub Actions侵害 — 相次ぐ事例を振り返り、次なる脅威に備える
flatt_security
12
7k
Tour of Agent Protocols: MCP, A2A, AG-UI, A2UI with ADK
meteatamel
0
170
Kiro Meetup #7 Kiro アップデート (2025/12/15〜2026/3/20)
katzueno
2
270
Kubernetesの「隠れメモリ消費」によるNode共倒れと、Request適正化という処方箋
g0xu
0
170
「できない」のアウトプット 同人誌『精神を壊してからの』シリーズ出版を 通して得られたこと
comi190327
3
480
Blue/Green Deployment を用いた PostgreSQL のメジャーバージョンアップ
kkato1
0
170
Sansanの認証基盤を支えるアーキテクチャとその振り返り
sansantech
PRO
1
120
AWS Systems Managerのハイブリッドアクティベーションを使用したガバメントクラウド環境の統合管理
toru_kubota
1
190
非同期・イベント駆動処理の分散トレーシングの繋げ方
ichikawaken
1
250
GitHub Advanced Security × Defender for Cloudで開発とSecOpsのサイロを超える: コードとクラウドをつなぐ、開発プラットフォームのセキュリティ
yuriemori
1
120
脳が溶けた話 / Melted Brain
keisuke69
1
1.1k
Featured
See All Featured
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
110
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
260
RailsConf 2023
tenderlove
30
1.4k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
160
What's in a price? How to price your products and services
michaelherold
247
13k
Art, The Web, and Tiny UX
lynnandtonic
304
21k
The Limits of Empathy - UXLibs8
cassininazir
1
280
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
370
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
140
Ruling the World: When Life Gets Gamed
codingconduct
0
190
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