実験内容
Device mapperを用いて複数の物理ブロックデバイスを1つの論理ブロックデバイスとして見せる。
まず1つ目のブロックデバイスだけを使ってdm-linear論理デバイスを作成して、あとから2つ目のブロックデバイスを追加した場合の挙動(結合前に入っていたファイルは残っているのか)を確認する。
手順
-
ループバックデバイスの作成
# 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
ループバックデバイスの番号は後ほど使用する。
-
1つ目のブロックデバイスでdm-linearデバイスを作成する
$ echo "0 `sudo blockdev --getsz /dev/loop9` linear /dev/loop9 0" | sudo dmsetup create testdm
-
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
-
testdmをext4でフォーマット
$ sudo mkfs.ext4 /dev/mapper/testdm
-
マウントしてファイルを置く
$ sudo mount /dev/mapper/testdm /mnt $ sudo touch /mnt/testfile $ sudo umount /mnt
-
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
-
新しいテーブルを反映させるためには、一度デバイスをsuspendさせる必要がある。
$ sudo dmsetup suspend testdm
-
スクリプトを実行
$ chmod 755 ./test.sh $ sudo ./test.sh /dev/loop9 /dev/loop10
-
デバイスをresume
$ sudo dmsetup resume testdm
-
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
- もし
-
マウントして、結合前に作成しておいたファイル(testfile)が残っていることを確認。
$ sudo mount /dev/mapper/testdm /mnt $ ls -al /mnt
-
ディスク容量が増えていることを確認
$ df -ah | grep testdm /dev/mapper/testdm 976K 24K 884K 3% /mnt