Ubuntu 16.04: LVMでファイルシステムを拡張・縮小する

LVMを用いたディスク追加とファイルシステムの拡張と、ファイルシステムの縮小とディスクの削除について記載します。

 

1 動作環境

LVMを有効にしてUbuntu 16.04をインストールしています。

0001_LVM.png

 

/dev/vda1 マウントポイント/boot用の領域
/dev/vda5 ボリュームグループubuntu-vg用の物理ボリューム
/dev/ubuntu-vg/root マウントポイント/用の論理ボリューム(実体はdm-0)
/dev/ubuntu-vg/swap_1 スワップ領域用の論理ボリューム(実体はdm-1)
/dev/vdb 追加ディスク

 

/proc/partitionsの内容は以下のとおりです。

$ cat /proc/partitions
major minor  #blocks  name
<snip>
 253        0   83886080 vda
 253        1     498688 vda1
 253        2          1 vda2
 253        5   83384320 vda5
  11        0    1048575 sr0
 252        0   82333696 dm-0
 252        1    1048576 dm-1
 253       16   83886080 vdb

カーネルかinitramfsに問題があるのか、LVMが有効な場合にルートファイルシステムのマウントに5秒ほどの遅延があるようです。

今後の改善を期待します。

[    1.121681] FDC 0 is a S82078B
[    1.804980] clocksource: tsc: mask: 0xffffffffffffffff max_cycles:
0x30e5debfb38, max_i dle_ns: 440795265279 ns
[    6.429531] EXT4-fs (dm-0): mounted filesystem with ordered data
mode. Opts: (null)
[    7.308536] systemd[1]: systemd 229 running in system mode. (+PAM
+AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP
+GCRYPT +GNUTLS +ACL +XZ -LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD -IDN)

2 LVMへディスクを追加してext4ファイルシステムを拡張する

Ubuntu 16.04を起動したまま実行します。

2.1 追加ディスクのパーティション作成

fdiskで追加ディスクのパーティションを作成します。ここではプライマリディスクにしてディスク全体を使います。

$ sudo fdisk /dev/vdb

Welcome to fdisk (util-linux 2.27.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


コマンド (m でヘルプ): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p):

Using default response p.
パーティション番号 (1-4, default 1):
First sector (2048-167772159, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-167772159, default
167772159):

Created a new partition 1 of type 'Linux' and of size 80 GiB.

コマンド (m でヘルプ): w

The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

2.2 物理ボリュームの作成

pvcreateでvda1を物理ボリュームとして初期化します。

$ sudo pvcreate /dev/vdb1
  Physical volume "/dev/vdb1" successfully created

2.3 ボリュームグループへ追加

vgextendで既存のボリュームグループubuntu-vgに物理ボリュームを追加します。

$ sudo vgextend ubuntu-vg /dev/vdb1
Volume group "ubuntu-vg" successfully extended

pvdisplayで物理ボリュームの一覧に表示されます。

$ sudo pvdisplay
  --- Physical volume ---
  PV Name               /dev/vda5
  VG Name               ubuntu-vg
  PV Size               79.52 GiB / not usable 2.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              20357
  Free PE               0
  Allocated PE          20357
  PV UUID               9YrynY-3kGZ-PGiP-d7W6-8k21-JQW1-Echp5a

  --- Physical volume ---
  PV Name               /dev/vdb1
  VG Name               ubuntu-vg
  PV Size               80.00 GiB / not usable 3.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              20479
  Free PE               20479
  Allocated PE          0
  PV UUID               oJ75n9-BQbp-zFQd-t0Ct-ChNL-zpzT-MTzWbd

2.4 論理ボリュームの拡張

lvextendで論理ボリュームrootを拡張します。

$ sudo lvextend -l +100%FREE /dev/ubuntu-vg/root

dm-0のblockがvdb1の分だけ増加しました。

$ cat /proc/partitions
major minor  #blocks  name
<snip>
 253        0   83886080 vda
 253        1     498688 vda1
 253        2          1 vda2
 253        5   83384320 vda5
  11        0    1048575 sr0
 252        0  166215680 dm-0
 252        1    1048576 dm-1
 253       16   83886080 vdb
 253       17   83885056 vdb1

2.5 ext4ファイルシステムの拡張

拡張前のサイズは以下のとおりです。

$ df -h /
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/ubuntu--vg-root   78G  5.0G   69G   7% /

resize2fsをマウントポイント/のext4ファイルシステムを拡張します。

$ sudo resize2fs /dev/ubuntu-vg/root

拡張後のサイズは以下のとおりです。

$ df -h /
Filesystem                   Size  Used Avail Use% Mounted on

3 ext4ファイルシステムを縮小してLVMからディスクを削除する

ext4ファイルシステムの縮小にはマウントポイント/をumountする必要があるため、ここではLiveDVDを起動し、以下の作業を実行します。

また、ext4ファイルシステムの残り容量が削除するディスクサイズよりも大きい必要があります。

3.1 LiveDVDの起動

Ubuntu 16.04のインストールディスクを起動し、「Ubuntuを試す」をクリックします。

0002_LiveDVD.png

3.2 ディスクサイズの確認

物理ボリュームvdb1のディスクサイズを確認します。

fdisk -lだとLVMのメタデータも含まれるのでpvdisplayで表示します。

$ sudo pvdisplay /dev/vdb1
  --- Physical volume ---
  PV Name               /dev/vdb1
  VG Name               ubuntu-vg
  PV Size               80.00 GiB / not usable 3.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              20479
  Free PE               0
  Allocated PE          20479
  PV UUID               oJ75n9-BQbp-zFQd-t0Ct-ChNL-zpzT-MTzWbd

縮小すべきサイズは4MiB x 20479 = 81916MiBであることが分かります。

3.3 ext4ファイルシステムと論理ボリュームの縮小

lvreduceの-rオプションを用いればext4ファイルシステムと論理ボリュームの縮小を一度に実行できます。

$ sudo lvreduce -r -L -81916M /dev/ubuntu-vg/root
fsck from util-linux 2.27.1
/dev/mapper/ubuntu--vg-root: clean, 208635/10395648 files,
1987952/41553920 blocks
resize2fs 1.42.13 (17-May-2015)
Resizing the filesystem on /dev/mapper/ubuntu--vg-root to 20583424
(4k) blocks.
The filesystem on /dev/mapper/ubuntu--vg-root is now 20583424 (4k)
blocks long.

  Size of logical volume ubuntu-vg/root changed from 158.52 GiB (40580
  extents) to 78.52 GiB (20101 extents).
  Logical volume root successfully resized.

3.4 ボリュームグループから物理ボリュームを削除

vgreduceの前にpvmovedを実行し、ディスク内の使用しているデータを別のディスクに移動する必要があります。

ここではたまたま先ほどのext4ファイルシステムと論理ボリュームの縮小でディスクにデータがなくなったので、pvmoveは不要です。

$ sudo pvmove /dev/vdb1 /dev/vda5
  No free extents on physical volume "/dev/vda5".
  No specified PVs have space available.

vgreduceでボリュームグループから物理ボリュームを削除します。

$ sudo vgreduce ubuntu-vg /dev/vdb1
  Removed "/dev/vdb1" from volume group "ubuntu-vg"

3.5 物理ボリュームを削除

pvremoveで物理ボリュームを削除します。

$ sudo pvremove /dev/vdb1
  Labels on physical volume "/dev/vdb1" successfully wiped

pvdisplayで/dev/vdb1が表示されなくなりました。

$ sudo pvdisplay
  --- Physical volume ---
  PV Name               /dev/vda5
  VG Name               ubuntu-vg
  PV Size               79.52 GiB / not usable 2.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              20357
  Free PE               0
  Allocated PE          20357
  PV UUID               9YrynY-3kGZ-PGiP-d7W6-8k21-JQW1-Echp5a

LiveDVDをシャットダウンし、HDDからUbuntu 16.04を起動するとファイルシステムのサイズが縮小されていることを確認できます。

$ df -h /
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/ubuntu--vg-root   78G  5.0G   69G   7% /