仮想ディスクで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