$30 off During Our Annual Pro Sale. View Details »

Linuxのブロックデバイス

 Linuxのブロックデバイス

Linuxのいろいろなブロックデバイスを紹介した資料です

Satoru Takeuchi
PRO

March 19, 2023
Tweet

More Decks by Satoru Takeuchi

Other Decks in Technology

Transcript

  1. Linuxのブロックデバイス
    kanazawa.rb #127 LT
    Satoru Takeuchi
    twitter: satoru_takeuchi

    View Slide

  2. Linuxのブロックデバイス
    ● 以下の特徴を持つデバイスのこと
    ○ ブロック単位でデータを読み書きする (最小単位は通常512バイト)
    ○ 「デバイス内のオフセット XX番からYYバイト読み出す」のようにランダムアクセス可能
    ● 一般的にはHDDやSSDのようなディスクデバイスだと思えばいい
    ● 2つのコンポーネントが処理する
    ○ ブロック層: 全ブロックデバイスに共通の処理
    ○ デバイスドライバ: 個々のデバイスに固有の処理

    View Slide

  3. ユーザから見える部分との関係
    ユーザ空間
    カーネル空間
    /dev/sda
    デバイスファイル
    ファイルシステム
    /dev/sdb
    プロセス
    読み書き
    読み書き
    ファイル
    ファイルシステム
    ブロック層
    デバイスドライバ
    物理世界 デバイスA デバイスB
    対応
    対応

    View Slide

  4. ブロック層がやること
    ● ユーザ or ファイルシステムから依頼されたI/Oを効率的にデバイスに発行
    ○ ハードウェアの特性を考慮して I/O発行前にI/Oの並び替えやマージを行う
    ● 先読み(readahead)
    ○ ある領域へのreadが発生したら、それに続く領域も先読みする
    ○ ある領域へのアクセス発生直後に近い領域へアクセスされる傾向にあるという経験則を利用

    View Slide

  5. ブロックデバイスの種類(1/4)
    ● 物理ディスク
    ○ HDDやSSDのようなディスク
    ○ /dev/sdX(SCSIデバイス)、/dev/hdX(IDEデバイス), /dev/nvmeX(NVMe SSD)という名前
    ■ iSCSIターゲットも/dev/sdXとして見える
    ● 仮想ディスク
    ○ VM上に存在する特殊なディスク
    ○ /dev/vdXという名前
    ○ 実体はホストOS上のファイルイメージやディスク
    ○ 高速化のためにVMとホストOSとの間で特殊な通信をしている

    View Slide

  6. ブロックデバイスの種類(2/4)
    ● ループデバイス
    ○ /dev/loopXという名前
    ○ ファイルをデバイスとして扱うために使う
    ○ “mount test.iso /mnt”などによるisoイメージのマウントでは裏で loopデバイスを使う
    ● brd
    ○ マシンのメモリの一部をデバイスとして見せる
    ○ /dev/ramXという名前
    /dev/loop0
    ファイルシステム
    ファイル
    対応
    ユーザ空間
    カーネル空間
    物理世界 RAM(の一部)
    /dev/ram0
    対応

    View Slide

  7. ブロックデバイスの種類(3/4)
    ● 分散ストレージCephのブロックデバイス
    ○ /dev/rbdXという名前
    ● ネットワークブロックデバイス
    ○ /dev/ndbXという名前
    ○ ネットワーク上の任意のデータをブロックデバイスとして見せられる
    ユーザ空間
    カーネル空間
    物理世界
    ネットワーク層
    NIC
    /dev/rbd0
    Cephクラスタ
    ディスクイメージ
    対応

    View Slide

  8. ブロックデバイスの種類(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) 作る

    View Slide

  9. device mapperの諸機能: dm-raid
    ● 複数のデバイスを指定すると、それらを使ってRAID構成のブロックデバイスを生成
    ● mdraidと似通っているが別物
    ユーザ空間
    カーネル空間
    /dev/sda /dev/sdb
    device mapper(dm)層
    /dev/dm0
    (1)束ねる (2) 作る
    /dev/sdaと/dev/sdbから
    構成されるRAID1デバイス

    View Slide

  10. 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へアクセス

    View Slide

  11. device mapperの諸機能: dm-flakey
    ● 指定したデバイスにリニアマップされたブロックデバイスを生成
    ● 所定の条件でEIOを返すようにできる(疑似的にエラーを起こせる)
    ユーザ空間
    カーネル空間
    /dev/sda
    device mapper(dm)層
    /dev/dm0
    (2) 作る
    アクセスすると基本的には sdaにそのままアクセス
    所定の条件を満たすと EIOを返す
    (1) 指定

    View Slide

  12. 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

    View Slide

  13. 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. 切り出し

    View Slide