Slide 1

Slide 1 text

Linuxの色々なブロックデバイス Apr. 27th, 2023 Satoru Takeuchi twitter: satoru_takeuchi

Slide 2

Slide 2 text

はじめに ● ブロックデバイスとは ○ ブロック単位でデータを読み書きする (最小単位は通常512バイト) ○ 「デバイス内のオフセット XX番からYYバイト読み出す」のようにランダムアクセス可能 ● 一般的にはHDDやSSDのようなディスクデバイスだと思えばいい ○ /dev/sdaとか/dev/nvme0n1とか ● それ以外にもいろいろな種類のブロックデバイスがある ● よく使われるものからマイナーなものまでいろいろ紹介

Slide 3

Slide 3 text

物理ディスク ● HDD, SSD, NVMe SSD… /dev/sdX ユーザ空間 カーネル空間 物理世界 /dev/nvmeXnY SCSIディスク /dev/hdX IDEディスク NVMe SSD

Slide 4

Slide 4 text

仮想ディスク ● VM上に存在する特殊なディスク ● /dev/vdXという名前 ● 高速化のためにVMとホストOSとの間で特殊な通信をしている ユーザ空間 (VM) カーネル空間 (VM) カーネル空間 (ホスト) /dev/vdX むずかしい しくみ

Slide 5

Slide 5 text

ループデバイス ● /dev/loopXという名前 ● ファイルをデバイスとして扱うために使う ● “mount test.iso /mnt”などによるisoイメージのマウントでは裏でloopデバイスを使 う /dev/loopX ファイルシステム ファイル ユーザ空間 カーネル空間 物理世界

Slide 6

Slide 6 text

brd ● RAMの一部をブロックデバイスとして扱う ● /dev/ramXという名前 /dev/ramX RAM ユーザ空間 カーネル空間 物理世界

Slide 7

Slide 7 text

nbd ● ネットワークブロックデバイス ● /dev/ndbXという名前 ● ネットワーク上の任意のデータをブロックデバイスとして見せられる ユーザ空間 カーネル空間 物理世界 ネットワーク層 NIC /dev/nbdX なんらかのもの

Slide 8

Slide 8 text

rbd ● 分散ストレージCephのブロックデバイス ● /dev/rbdXという名前 ユーザ空間 カーネル空間 物理世界 ネットワーク層 NIC /dev/rbdX Cephクラスタ ディスクイメージ CephのRBDドライバ

Slide 9

Slide 9 text

multiple devices ● 複数のブロックデバイスから1つのブロックデバイスを構成 ● /dev/mdXという名前 ● RAID(mdraid)やmultipath deviceを実現 ユーザ空間 カーネル空間 /dev/sdX /dev/sdY multiple device(md)層 /dev/mdX /dev/sdaと/dev/sdbから 構成されるRAID1デバイス (2) 作る 物理世界 ディスク ディスク (1) 束ねる

Slide 10

Slide 10 text

device mapper ● 任意のものをブロックデバイスとして見せるしくみ ● /dev/dmXという名前 ● 以後のページではdevice mapperを利用したさまざまなデバイスを紹介 ユーザ空間 カーネル空間 /dev/dm-X device mapper(dm)層 この先はなんでもいい

Slide 11

Slide 11 text

device mapper: dm-raid ● 複数のデバイスから成るRAID構成のブロックデバイスを生成 ● mdraidと混同しがちだが別物 ユーザ空間 カーネル空間 /dev/sdX /dev/sdY device mapper(dm)層 /dev/dm-X /dev/sdXと/dev/sdYから 構成されるRAID1デバイス (2) 作る 物理世界 ディスク ディスク (1) 束ねる

Slide 12

Slide 12 text

device mapper: dm-linear ● 様々なブロックデバイスの様々な範囲をリニアマップできる ● たとえばJBODのようなことをできる ● 200GiBのブロックデバイス ● オフセット < 100GiB: sdXへアクセス ● オフセット >= 100GiB: sdYへアクセス ユーザ空間 カーネル空間 /dev/sdX /dev/sdY multiple device(md)層 /dev/mdX (2) 作る 物理世界 ディスク ディスク (1) 束ねる

Slide 13

Slide 13 text

device mapper: dm-flakey ● 指定したデバイスにリニアマップされたブロックデバイスを生成 ● 所定の条件でEIOを返すようにできる(疑似的にエラーを起こせる) ● 基本的にはsdXにそのままアクセス ● 所定の条件を満たすと EIOを返す ユーザ空間 カーネル空間 /dev/sdX multiple device(md)層 /dev/mdX (2) 作る 物理世界 ディスク (1) 組み込む

Slide 14

Slide 14 text

LVM(Logical Volume Manager) ● ボリューム管理ツール ● device mapperの仕組みを利用 ● 3つの概念が存在 ○ PV(Physical Volume): 後述のVGを構成する1つ以上のブロックデバイス ○ VG(Volume Group): PVを束ねて作るボリュームグループ。ストレージプールを構成 ○ LV(Logical Volume): VGから好きなサイズを切り出せる ■ それぞれ/dev//という名前がつく ● 特徴 ○ 無停止のVG/LV拡張/縮小 ○ RAID組める ○ snapshot /dev/sdX /dev/sdY /dev/sdZ VG PV LV LV

Slide 15

Slide 15 text

lvmthin ● シンプロビジョニングされたLVM logical volume a. ディスク利用効率が高い b. snapshotがLVMより優れている(通常のLVのsnapshotは採取後のI/O性能が大きく劣化) ● LVMとdm-thinというdevice mapperの合わせ技 ● しくみ 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. 切り出し