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
2.9k
Linuxのブロックデバイス
Linuxのいろいろなブロックデバイスを紹介した資料です
Satoru Takeuchi
PRO
March 19, 2023
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
AWKへの愛を語る
sat
PRO
3
470
syncコマンドのデータ同期 完了待ちやエラー検出
sat
PRO
0
27
動作中のLinux環境の全メモリを見る
sat
PRO
1
51
Linuxの時間を10秒止める
sat
PRO
2
180
プロセスへのメモリ割り当て4 - 実際に使うときにメモリを獲得するデマンドページング(実践編)
sat
PRO
1
75
プロセスへのメモリ割り当て(3) 実際に使うときにメモリを獲得するデマンドページング
sat
PRO
1
47
プロセスへのメモリ割り当て(1) mmap
sat
PRO
2
95
プロセスへのメモリ割り当て2-Pythonのようなナウい言語ではどうやってメモリ獲得するのか
sat
PRO
1
86
サイボウズのOSPO
sat
PRO
3
280
Other Decks in Technology
See All in Technology
20240911_New_Relicダッシュボード活用例
speakerdeckfk
0
100
AI活用したくてもできなかった不動産SaaSの今とこれから
nealle
0
330
効果的なオンコール対応と障害対応
ryuichi1208
5
2.9k
Google CloudのLLM活用の選択肢を広げるVertex AIのパートナーモデル
nayuts
0
130
DevRelの始め方
moongift
PRO
1
380
実務における脅威モデリングを考えよう
nikinusu
0
430
ロリポップ! for Gamersを支えるインフラ/lolipop for gamers infrastructure
takumakume
0
130
Developer Experienceを向上させる基盤づくりの取り組み事例集
coconala_engineer
0
140
LINEヤフーのフロントエンド組織・体制の紹介
lycorp_recruit_jp
1
1.2k
とあるOSSを継続可能にするための取り組みについて / OSS Refactoring Process
bun913
1
180
Analytics-Backed App Widget Development - Served with Jetpack Glance
miyabigouji
0
550
フルカイテン株式会社 採用資料
fullkaiten
0
32k
Featured
See All Featured
Done Done
chrislema
180
16k
Design by the Numbers
sachag
277
19k
For a Future-Friendly Web
brad_frost
174
9.3k
How to Think Like a Performance Engineer
csswizardry
16
960
What the flash - Photography Introduction
edds
67
11k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
157
15k
Docker and Python
trallard
39
3k
It's Worth the Effort
3n
182
27k
Building a Scalable Design System with Sketch
lauravandoore
458
32k
Agile that works and the tools we love
rasmusluckow
327
20k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.3k
Unsuck your backbone
ammeep
667
57k
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. 切り出し