仮想ディスクでLVMの操作をしてみる
今回は、ファイルを仮想ディスク(ブロックデバイス)化し、LVMの作成、拡張、削除などを行う。 OS : Ubuntu16.04
■準備
$ sudo -i # mkdir /tmp/lvm_test # cd /tmp/lvm_test
■仮想ディスクの作成
ブロックデバイスにするファイルを作成する。
# dd if=/dev/zero of=disk.img bs=1M count=1200
作成したdisk.imgを空いているループバックデバイスに割り当てる
# losetup -f disk.img
確認
★disk.imgにループバックデバイスが割り当てられているか確認 # losetup -l NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE /dev/loop0 0 0 0 0 /tmp/lvm_test/disk.img
ディスクラベルを作成
# parted -s -a optimal /dev/loop0 mklabel gpt
パーティションを作成。
今回は基本パーティションを3つ作成する。
# parted -s -a optimal /dev/loop0 mkpart primary 0% 30% # parted -s -a optimal /dev/loop0 mkpart primary 30% 60% # parted -s -a optimal /dev/loop0 mkpart primary 60% 100%
各パーティションのディスクフォーマットをlinux lvmに設定する。
# parted -s -a optimal /dev/loop0 set 1 lvm on # parted -s -a optimal /dev/loop0 set 2 lvm on # parted -s -a optimal /dev/loop0 set 3 lvm on
確認
★フラグlvmの基本パーティションが3つ作成されている。 # parted /dev/loop0 p モデル: Loopback デバイス (loopback) ディスク /dev/loop0: 1258MB セクタサイズ (論理/物理): 512B/512B パーティションテーブル: gpt ディスクフラグ: 番号 開始 終了 サイズ ファイルシステム 名前 フラグ 1 1049kB 377MB 376MB primary lvm 2 377MB 755MB 377MB primary lvm 3 755MB 1257MB 502MB primary lvm ★作成されたパーティションと同数の仮想デバイスファイルが生成されている。 # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 119.2G 0 disk ├─sda1 8:1 0 487M 0 part /boot ├─sda2 8:2 0 1K 0 part └─sda5 8:5 0 118.8G 0 part ├─ubuntu--vg-root 252:0 0 114.9G 0 lvm / └─ubuntu--vg-swap_1 252:1 0 3.9G 0 lvm [SWAP] loop0 7:0 0 1.2G 0 loop ├─loop0p1 259:0 0 359M 0 loop ├─loop0p2 259:1 0 360M 0 loop └─loop0p3 259:2 0 479M 0 loop
■LVMの作成
LVMの作成は下の様な手順で行う [PVの作成]->[PVをVGに登録]->[VGからLVを作成]->[LVをマウント]
PV(フィジカルボリューム)の作成
/dev/loop0p1と/dev/loop0p2をPVとして登録する
# pvcreate /dev/loop0p1 /dev/loop0p2
確認
★/dev/loop0p1と/dev/loop0p2がPVに登録されている。 # pvdisplay "/dev/loop0p1" is a new physical volume of "359.00 MiB" --- NEW Physical volume --- PV Name /dev/loop0p1 VG Name PV Size 359.00 MiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID xihABl-WX3v-1JYW-lV4v-EL4A-P8VK-fqkrts "/dev/loop0p2" is a new physical volume of "360.00 MiB" --- NEW Physical volume --- PV Name /dev/loop0p2 VG Name PV Size 360.00 MiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID 74Pt3v-oXmk-RGyx-ynEk-VyAY-5aRZ-L31j0M
VG(ボリュームグループ)の作成
先ほど作成したPVをtest_vgという名前のVGに登録する。
# vgcreate test_vg /dev/loop0p1 /dev/loop0p2
確認
★test_vgという新しいVGが作成されている。 vgdisplay --- Volume group --- VG Name test_vg System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 2 Act PV 2 VG Size 712.00 MiB PE Size 4.00 MiB Total PE 178 Alloc PE / Size 0 / 0 Free PE / Size 178 / 712.00 MiB VG UUID Qapao3-sI8J-1TFN-5lFW-HFlN-P3fJ-A9QU7k ★PVを確認してもtest_vgに登録されたことがわかる。 # pvdisplay --- Physical volume --- PV Name /dev/loop0p1 VG Name test_vg PV Size 359.00 MiB / not usable 3.00 MiB Allocatable yes PE Size 4.00 MiB Total PE 89 Free PE 89 Allocated PE 0 PV UUID xihABl-WX3v-1JYW-lV4v-EL4A-P8VK-fqkrts --- Physical volume --- PV Name /dev/loop0p2 VG Name test_vg PV Size 360.00 MiB / not usable 4.00 MiB Allocatable yes PE Size 4.00 MiB Total PE 89 Free PE 89 Allocated PE 0 PV UUID 74Pt3v-oXmk-RGyx-ynEk-VyAY-5aRZ-L31j0M
LV(ロジカルボリューム)を作成する
先ほど作成したtest_vgからtest_lvというロジカルボリュームを切り出す。
# lvcreate -L 600M -n test_lv test_vg
確認
★ロジカルボリュームを作成すると、/dev/<VG名>/<LV名>というデバイスマッパー生成される。 # lvdisplay --- Logical volume --- LV Path /dev/test_vg/test_lv LV Name test_lv VG Name test_vg LV UUID LFYF2y-S49k-jrdn-pwaY-jLAs-qlqE-mtnJwk LV Write Access read/write LV Creation host, time dynabook, 2016-10-12 08:29:34 +0900 LV Status available # open 0 LV Size 600.00 MiB Current LE 150 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:2
マウント
先ほど作成したLVのファイルシステムをext4にフォーマットする。
# mkfs.ext4 /dev/test_vg/test_lv
マウント
# mount -t ext4 /dev/test_vg/test_lv /mnt/work-mido/lvm/
確認
★/mnt/work-mido/lvmに/dev/test_vg/test_lvがマウントされている # df -Th Filesystem Type Size Used Avail Use% Mounted on udev devtmpfs 1.9G 0 1.9G 0% /dev tmpfs tmpfs 385M 6.2M 379M 2% /run /dev/mapper/ubuntu--vg-root ext4 113G 55G 53G 51% / tmpfs tmpfs 1.9G 316K 1.9G 1% /dev/shm tmpfs tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/sda1 ext2 472M 155M 293M 35% /boot cgmfs tmpfs 100K 0 100K 0% /run/cgmanager/fs tmpfs tmpfs 385M 60K 385M 1% /run/user/1000 /dev/mapper/test_vg-test_lv ext4 575M 468K 533M 1% /mnt/work-mido/lvm
アンマウント
# umount /mnt/work-mido/lvm
■VGとLVの拡張
/dev/loop0p3を新たにtest_vgに登録し、test_lvを900MBに拡張する。
/dev/loop0p3をPVに登録する
# pvcreate /dev/loop0p3
test_vgに/dev/loop0p3を追加する
# vgextend test_vg /dev/loop0p3
test_lvを拡張する
# lvextend -L 900M /dev/test_vg/test_lv
■LVの縮小
test_lvを300MBに縮小する。
ファイルシステムのチェックを行う。
# e2fsck -f /dev/test_vg/test_lv
ファイルシステムを300MBに縮小する
# resize2fs /dev/test_vg/test_lv 300M
test_lvを縮小する。
# lvreduce -L 300M /dev/test_vg/test_lv
■VGの縮小
test_vgから/dev/loop0p3を削除する。
# vgreduce test_vg /dev/loop0p3
■PVの削除
/dev/loop0p3のPVとしての登録を解除する。
# pvremove /dev/loop0p3
■LVの削除
test_lvを削除する。
# lvremove /dev/test_vg/test_lv
■VGの削除
test_vgを削除する。
# vgremove test_vg
■後片付け
# pvremove /dev/loop0p1 /dev/loop0p2 # losetup -d /dev/loop0 # rm disk.img