Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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. 切り出し