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
Linuxのブロックデバイス
Search
Satoru Takeuchi
PRO
March 19, 2023
Technology
8
3.6k
Linuxのブロックデバイス
Linuxのいろいろなブロックデバイスを紹介した資料です
Satoru Takeuchi
PRO
March 19, 2023
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
37
ファイルシステムのデータを ブロックデバイスへの操作で変更
sat
PRO
1
31
デバイスドライバ
sat
PRO
0
49
マルチスレッドの実現方法 ~カーネルスレッドとユーザスレッド~
sat
PRO
2
120
共有メモリ
sat
PRO
3
70
マルチスレッドプログラム
sat
PRO
3
58
Linuxのブートプロセス initramfs編
sat
PRO
2
87
Other Decks in Technology
See All in Technology
2025-06-26_Lightning_Talk_for_Lightning_Talks
_hashimo2
2
120
React開発にStorybookとCopilotを導入して、爆速でUIを編集・確認する方法
yu_kod
1
230
AI導入の理想と現実~コストと浸透〜
oprstchn
0
190
ネットワーク保護はどう変わるのか?re:Inforce 2025最新アップデート解説
tokushun
0
190
OSSのSNSツール「Misskey」をさわってみよう(右下ワイプで私のOSCの20年を振り返ります) / 20250705-osc2025-do
akkiesoft
0
140
United Airlines Customer Service– Call 1-833-341-3142 Now!
airhelp
0
160
Tech-Verse 2025 Global CTO Session
lycorptech_jp
PRO
0
1.7k
Tech-Verse 2025 Keynote
lycorptech_jp
PRO
0
1.8k
Core Audio tapを使ったリアルタイム音声処理のお話
yuta0306
0
180
論文紹介:LLMDet (CVPR2025 Highlight)
tattaka
0
310
Tokyo_reInforce_2025_recap_iam_access_analyzer
hiashisan
0
180
AWS Organizations 新機能!マルチパーティ承認の紹介
yhana
1
270
Featured
See All Featured
Making the Leap to Tech Lead
cromwellryan
134
9.4k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
The World Runs on Bad Software
bkeepers
PRO
69
11k
Docker and Python
trallard
44
3.5k
How GitHub (no longer) Works
holman
314
140k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
2.9k
RailsConf 2023
tenderlove
30
1.1k
Transcript
Linuxのブロックデバイス kanazawa.rb #127 LT Satoru Takeuchi twitter: satoru_takeuchi
Linuxのブロックデバイス • 以下の特徴を持つデバイスのこと ◦ ブロック単位でデータを読み書きする (最小単位は通常512バイト) ◦ 「デバイス内のオフセット XX番からYYバイト読み出す」のようにランダムアクセス可能 •
一般的にはHDDやSSDのようなディスクデバイスだと思えばいい • 2つのコンポーネントが処理する ◦ ブロック層: 全ブロックデバイスに共通の処理 ◦ デバイスドライバ: 個々のデバイスに固有の処理
ユーザから見える部分との関係 ユーザ空間 カーネル空間 /dev/sda デバイスファイル ファイルシステム /dev/sdb プロセス 読み書き 読み書き
ファイル ファイルシステム ブロック層 デバイスドライバ 物理世界 デバイスA デバイスB 対応 対応
ブロック層がやること • ユーザ or ファイルシステムから依頼されたI/Oを効率的にデバイスに発行 ◦ ハードウェアの特性を考慮して I/O発行前にI/Oの並び替えやマージを行う • 先読み(readahead)
◦ ある領域へのreadが発生したら、それに続く領域も先読みする ◦ ある領域へのアクセス発生直後に近い領域へアクセスされる傾向にあるという経験則を利用
ブロックデバイスの種類(1/4) • 物理ディスク ◦ HDDやSSDのようなディスク ◦ /dev/sdX(SCSIデバイス)、/dev/hdX(IDEデバイス), /dev/nvmeX(NVMe SSD)という名前 ▪
iSCSIターゲットも/dev/sdXとして見える • 仮想ディスク ◦ VM上に存在する特殊なディスク ◦ /dev/vdXという名前 ◦ 実体はホストOS上のファイルイメージやディスク ◦ 高速化のためにVMとホストOSとの間で特殊な通信をしている
ブロックデバイスの種類(2/4) • ループデバイス ◦ /dev/loopXという名前 ◦ ファイルをデバイスとして扱うために使う ◦ “mount test.iso
/mnt”などによるisoイメージのマウントでは裏で loopデバイスを使う • brd ◦ マシンのメモリの一部をデバイスとして見せる ◦ /dev/ramXという名前 /dev/loop0 ファイルシステム ファイル 対応 ユーザ空間 カーネル空間 物理世界 RAM(の一部) /dev/ram0 対応
ブロックデバイスの種類(3/4) • 分散ストレージCephのブロックデバイス ◦ /dev/rbdXという名前 • ネットワークブロックデバイス ◦ /dev/ndbXという名前 ◦
ネットワーク上の任意のデータをブロックデバイスとして見せられる ユーザ空間 カーネル空間 物理世界 ネットワーク層 NIC /dev/rbd0 Cephクラスタ ディスクイメージ 対応
ブロックデバイスの種類(4/4) • multiple device ◦ 複数のブロックデバイスから 1つのブロックデバイスを構成 ◦ /dev/mdXという名前 ◦
RAID(mdraid)やmultipath deviceを実現 • device mapper ◦ 任意のものをブロックデバイスとして見せるしくみ ◦ /dev/dmXという名前 ◦ 詳細は後述 ユーザ空間 カーネル空間 /dev/sda /dev/sdb multiple device(md)層 /dev/md0 (1)束ねる /dev/sdaと/dev/sdbから 構成されるRAID1デバイス (2) 作る
device mapperの諸機能: dm-raid • 複数のデバイスを指定すると、それらを使ってRAID構成のブロックデバイスを生成 • mdraidと似通っているが別物 ユーザ空間 カーネル空間 /dev/sda
/dev/sdb device mapper(dm)層 /dev/dm0 (1)束ねる (2) 作る /dev/sdaと/dev/sdbから 構成されるRAID1デバイス
device mapperの諸機能: dm-linear • 複数のデバイスを指定すると、それらを順番につなぎ合わせたブロックデバイスを 生成 • JBODのようなものと考えらればよい ユーザ空間 カーネル空間
/dev/sda (100GiB) /dev/sdb (100GiB) device mapper(dm)層 /dev/dm0 (1)束ねる (2) 作る /dev/sdaと/dev/sdbから構成される 200GiBのブロックデバイス オフセット100GiBより前へのアクセス: sdaへアクセス オフセット100GiB以降へのアクセス: sdbへアクセス
device mapperの諸機能: dm-flakey • 指定したデバイスにリニアマップされたブロックデバイスを生成 • 所定の条件でEIOを返すようにできる(疑似的にエラーを起こせる) ユーザ空間 カーネル空間 /dev/sda
device mapper(dm)層 /dev/dm0 (2) 作る アクセスすると基本的には sdaにそのままアクセス 所定の条件を満たすと EIOを返す (1) 指定
device mapperの諸機能: LVM • LVM(Logical Volume Manager, 論理ボリュームマネージャ) • ボリューム管理ツール
• 3つの概念が存在する ◦ PV(Physical Volume): 後述のVGを構成する1つ以上のブロックデバイス ◦ VG(Volume Group): PVを束ねて作るボリュームグループ。ストレージプールを構成 ◦ LV(Logical Volume): VGから好きなサイズを切り出せる ▪ それぞれmdXと名前が付いたブロックデバイス • 特徴 ◦ 無停止のVG/LV拡張/縮小 ◦ RAID組める ◦ snapshot /dev/sda /dev/sdb /dev/sdc VG PV LV LV
device mapperの諸機能: dm-thin • 特徴 a. ボリュームはシンプロビジョニング (実際にアクセスするまでディスク容量を消費しない )なのでディス ク利用効率が高い
b. snapshotがLVMより優れている(LVMのsnapshotは採取後のI/O性能が極めて悪い傾向にある ) • LVMの上に構築する • しくみ 1. VGの上にthin poolと呼ばれる特別なLVを作る 2. thin pool内にthin volume(mdデバイス)を作る 3. thin volumeにアクセスされたらthin pool上のデータへのアクセスに変換 VG LV(thinpool) LV(thin volume) LV(thin volume) 1. 切り出し 2. 切り出し