0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Device mapper (dm-linear)の使い方

Posted at

実験内容

Device mapperを用いて複数の物理ブロックデバイスを1つの論理ブロックデバイスとして見せる。
まず1つ目のブロックデバイスだけを使ってdm-linear論理デバイスを作成して、あとから2つ目のブロックデバイスを追加した場合の挙動(結合前に入っていたファイルは残っているのか)を確認する。

手順

  1. ループバックデバイスの作成

    # 1つ目のブロックデバイス作成
    $ dd if=/dev/zero of=disk1 bs=512 count=1000
    $ sudo losetup -f disk1
    
    # 2つ目のブロックデバイス作成
    $ dd if=/dev/zero of=disk2 bs=512 count=1000
    $ sudo losetup -f disk2
    
    # ループバックデバイスが存在していることを確認
    $ losetup -l
    NAME        SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE                                        DIO LOG-SEC
    /dev/loop9          0      0         0  0 /home/askee/temp/disk1                            0     512
    /dev/loop10         0      0         0  0 /home/askee/temp/disk2                            0     512
    

    ループバックデバイスの番号は後ほど使用する。

  2. 1つ目のブロックデバイスでdm-linearデバイスを作成する

    $ echo "0 `sudo blockdev --getsz /dev/loop9` linear /dev/loop9 0" | sudo dmsetup create testdm
    
  3. dm-linearが生成されていることを確認

    $ sudo dmsetup info
    Name:              testdm
    State:             ACTIVE
    Read Ahead:        256
    Tables present:    LIVE
    Open count:        0
    Event number:      0
    Major, minor:      253, 0
    Number of targets: 1
    
  4. testdmをext4でフォーマット

    $ sudo mkfs.ext4 /dev/mapper/testdm
    
  5. マウントしてファイルを置く

    $ sudo mount /dev/mapper/testdm /mnt
    $ sudo touch /mnt/testfile
    $ sudo umount /mnt
    
  6. dm-linearにブロックデバイス2を追加
    以下のスクリプトを作成してtest.shとして保存。echo... の部分ではdmsetupに与えるテーブルを作成している。

    #!/bin/sh
    size1=`blockdev --getsz $1`
    size2=`blockdev --getsz $2`
    echo "0 $size1 linear $1 0\\n$size1 $size2 linear $2 0" | sudo dmsetup reload testdm
    
  7. 新しいテーブルを反映させるためには、一度デバイスをsuspendさせる必要がある。

    $ sudo dmsetup suspend testdm
    
  8. スクリプトを実行

    $ chmod 755 ./test.sh
    $ sudo ./test.sh /dev/loop9 /dev/loop10
    
  9. デバイスをresume

    $ sudo dmsetup resume testdm
    
  10. testdmのext4ファイルシステムのサイズを更新する。現時点ブロックデバイス1の分しかフォーマットされていないのでブロックデバイスサイズの拡大に伴いリサイズが必要。

    $ sudo resize2fs /dev/mapper/testdm
    
    • もしPlease run 'e2fsck -f /dev/mapper/testdm' first.の警告が出力されたら先にe2fsckコマンドを実行して、resize2fsを再実行。
      $ sudo e2fsck -f /dev/mapper/testdm
      e2fsck 1.45.5 (07-Jan-2020)
      Pass 1: Checking inodes, blocks, and sizes
      Pass 2: Checking directory structure
      Pass 3: Checking directory connectivity
      Pass 4: Checking reference counts
      Pass 5: Checking group summary information
      /dev/mapper/testdm: 12/64 files (0.0% non-contiguous), 12/125 blocks
      
  11. マウントして、結合前に作成しておいたファイル(testfile)が残っていることを確認。

    $ sudo mount /dev/mapper/testdm /mnt
    $ ls -al /mnt
    
  12. ディスク容量が増えていることを確認

    $ df -ah | grep testdm
    /dev/mapper/testdm  976K   24K  884K   3% /mnt
    
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?