以下動画のテキストです。 https://youtu.be/bEogvqKvoIQ
Linuxの色々なブロックデバイスApr. 27th, 2023Satoru Takeuchitwitter: satoru_takeuchi
View Slide
はじめに● ブロックデバイスとは○ ブロック単位でデータを読み書きする (最小単位は通常512バイト)○ 「デバイス内のオフセット XX番からYYバイト読み出す」のようにランダムアクセス可能● 一般的にはHDDやSSDのようなディスクデバイスだと思えばいい○ /dev/sdaとか/dev/nvme0n1とか● それ以外にもいろいろな種類のブロックデバイスがある● よく使われるものからマイナーなものまでいろいろ紹介
物理ディスク● HDD, SSD, NVMe SSD…/dev/sdXユーザ空間カーネル空間物理世界/dev/nvmeXnYSCSIディスク/dev/hdXIDEディスクNVMe SSD
仮想ディスク● VM上に存在する特殊なディスク● /dev/vdXという名前● 高速化のためにVMとホストOSとの間で特殊な通信をしているユーザ空間(VM)カーネル空間(VM)カーネル空間(ホスト)/dev/vdXむずかしいしくみ
ループデバイス● /dev/loopXという名前● ファイルをデバイスとして扱うために使う● “mount test.iso /mnt”などによるisoイメージのマウントでは裏でloopデバイスを使う/dev/loopXファイルシステムファイルユーザ空間カーネル空間物理世界
brd● RAMの一部をブロックデバイスとして扱う● /dev/ramXという名前/dev/ramXRAMユーザ空間カーネル空間物理世界
nbd● ネットワークブロックデバイス● /dev/ndbXという名前● ネットワーク上の任意のデータをブロックデバイスとして見せられるユーザ空間カーネル空間物理世界ネットワーク層NIC/dev/nbdXなんらかのもの
rbd● 分散ストレージCephのブロックデバイス● /dev/rbdXという名前ユーザ空間カーネル空間物理世界ネットワーク層NIC/dev/rbdXCephクラスタディスクイメージCephのRBDドライバ
multiple devices● 複数のブロックデバイスから1つのブロックデバイスを構成● /dev/mdXという名前● RAID(mdraid)やmultipath deviceを実現ユーザ空間カーネル空間/dev/sdX /dev/sdYmultiple device(md)層/dev/mdX/dev/sdaと/dev/sdbから構成されるRAID1デバイス(2) 作る物理世界ディスク ディスク(1) 束ねる
device mapper● 任意のものをブロックデバイスとして見せるしくみ● /dev/dmXという名前● 以後のページではdevice mapperを利用したさまざまなデバイスを紹介ユーザ空間カーネル空間/dev/dm-Xdevice mapper(dm)層この先はなんでもいい
device mapper: dm-raid● 複数のデバイスから成るRAID構成のブロックデバイスを生成● mdraidと混同しがちだが別物ユーザ空間カーネル空間/dev/sdX /dev/sdYdevice mapper(dm)層/dev/dm-X/dev/sdXと/dev/sdYから構成されるRAID1デバイス(2) 作る物理世界ディスク ディスク(1) 束ねる
device mapper: dm-linear● 様々なブロックデバイスの様々な範囲をリニアマップできる● たとえばJBODのようなことをできる● 200GiBのブロックデバイス● オフセット < 100GiB: sdXへアクセス● オフセット >= 100GiB: sdYへアクセスユーザ空間カーネル空間/dev/sdX /dev/sdYmultiple device(md)層/dev/mdX(2) 作る物理世界ディスク ディスク(1) 束ねる
device mapper: dm-flakey● 指定したデバイスにリニアマップされたブロックデバイスを生成● 所定の条件でEIOを返すようにできる(疑似的にエラーを起こせる)● 基本的にはsdXにそのままアクセス● 所定の条件を満たすと EIOを返すユーザ空間カーネル空間/dev/sdXmultiple device(md)層/dev/mdX(2) 作る物理世界ディスク(1) 組み込む
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/sdZVGPVLV LV
lvmthin● シンプロビジョニングされたLVM logical volumea. ディスク利用効率が高い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上のデータへのアクセスに変換VGLV(thinpool) LV(thin volume) LV(thin volume)1. 切り出し2. 切り出し