Linuxのいろいろなブロックデバイスを紹介した資料です
Linuxのブロックデバイスkanazawa.rb #127 LTSatoru Takeuchitwitter: satoru_takeuchi
View Slide
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/rbd0Cephクラスタディスクイメージ対応
ブロックデバイスの種類(4/4)● multiple device○ 複数のブロックデバイスから 1つのブロックデバイスを構成○ /dev/mdXという名前○ RAID(mdraid)やmultipath deviceを実現● device mapper○ 任意のものをブロックデバイスとして見せるしくみ○ /dev/dmXという名前○ 詳細は後述ユーザ空間カーネル空間/dev/sda /dev/sdbmultiple device(md)層/dev/md0(1)束ねる/dev/sdaと/dev/sdbから構成されるRAID1デバイス(2) 作る
device mapperの諸機能: dm-raid● 複数のデバイスを指定すると、それらを使ってRAID構成のブロックデバイスを生成● mdraidと似通っているが別物ユーザ空間カーネル空間/dev/sda /dev/sdbdevice 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/sdadevice 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/sdcVGPVLV 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上のデータへのアクセスに変換VGLV(thinpool) LV(thin volume) LV(thin volume)1. 切り出し2. 切り出し