🐧

Proxmox VE のマシンのディスクを縮小(xfs, LVM, LUKS)

に公開

RHEL マシンがあまりディスクスペースを使っていないため、ディスクを縮小しました。
自分用のメモです。

今回行うこと

32GB のディスクを 16GB に縮小します。
16GB のディスクにデータをコピーして、32GB のディスクを削除することで縮小を実現します。
Proxmox VE 上で lvreduce を使って縮小はしません。

環境

OS: Rocky Linux 10.0
Boot: UEFI
FDE (LVM on LUKS): yes

root@localhost:~# df -h /
Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/rl-root   27G  2.2G   25G   9% /

root@localhost:~# fdisk -l /dev/sda
Disk /dev/sda: 32 GiB, 34359738368 bytes, 67108864 sectors
Disk model: QEMU HARDDISK   
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: BA25673D-2FB5-4D81-9884-F3F8DF875B06

Device       Start      End  Sectors  Size Type
/dev/sda1     2048  1230847  1228800  600M EFI System
/dev/sda2  1230848  3327999  2097152    1G Linux extended boot
/dev/sda3  3328000 67106815 63778816 30.4G Linux filesystem

root@localhost:~# lvs
  LV   VG Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root rl -wi-ao---- 26.39g
  swap rl -wi-ao----  4.00g

事前作業

手順

  1. 縮小したいサイズのディスクを追加
  2. xfsdump で root のバックアップ
  3. root 論理ボリュームの再作成
  4. xfsrestore でリストア
  5. 物理ボリューム縮小
  6. 16GB のディスクにデータをコピー
  7. 16GB のディスクをシステムのディスクとして設定

xfsdump で root のバックアップ

2.2G くらい

root@localhost:~# df -h /
Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/rl-root   27G  2.2G   25G   9% /

ディスク追加

バックアップファイルの保存先として使いますが、後ほどシステムのディスクとして再利用します。
今回は 16GB に縮小するので 16GB のディスクを追加。


マウント

root@localhost:~# fdisk -l
...
Disk /dev/sdb: 16 GiB, 17179869184 bytes, 33554432 sectors
Disk model: QEMU HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
mkfs.xfs /dev/sdb
mkdir /mnt/sdb
mount /dev/sdb /mnt/sdb

バックアップ

xfsdump -l 0 -f /mnt/sdb/root.dump -L "root dump" -M "backup" /dev/rl/root

再起動して RHEL インストールメディアからレスキューモードを起動します。

reboot

root 論理ボリュームの再作成

RHEL10 インストールディスクのレスキューモード起動

3) Skip to shell を選択

暗号化パーティションを開く
暗号化していない環境は不要

cryptsetup luksOpen /dev/sda3 sda3

root 論理ボリュームを再作成

lvremove /dev/rl/root
lvcreate -L 8G -n root rl
# WARNING: xfs signature detected on /dev/rl/root at offset 0. Wipe it? [y/n]: y
mkfs.xfs /dev/rl/root

xfsrestore でリストア

mkdir /mnt/root
mkdir /mnt/sdb
mount /dev/rl/root /mnt/root
mount /dev/sdb /mnt/sdb

xfsrestore -f /mnt/sdb/root.dump /mnt/root

ルートボリュームの UUID が変わっているので、/mnt/root/etc/fstab の UUID を修正
頑張って入力するか >> で追記しエディタで切り貼り

blkid /dev/mapper/rl-root
vi /mnt/root/etc/fstab

起動できるか確認する

reboot

縮小成功

root@localhost:~# vgs
  VG #PV #LV #SN Attr   VSize  VFree 
  rl   1   2   0 wz--n- 30.39g 18.39g
root@localhost:~# lvs
  LV   VG Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root rl -wi-ao---- 8.00g
  swap rl -wi-ao---- 4.00g
root@localhost:~# df -h /
Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/rl-root  8.0G  1.9G  6.2G  23% /

物理ボリューム縮小

楽なので Ubuntu Desktop の GParted で縮小作業をします。
シェルでやる方は pvresizecryptsetup resize で縮小できます。計算が面倒なので割愛

GParted を起動。luks パーティションを開く

/dev/sda3 を縮小。私の場合は 13000 MiB にしました。
データコピー後の最後に最大まで拡張すればいいので適当にやってます。

16GB のディスクにデータをコピー

Ubuntu 上のターミナルでやってしまいましょう

fdisk /dev/sdb

コピー元と同じ構成のパーティションを作成しましょう。

/dev/sdb1   600M
/dev/sdb2   1G
/dev/sdb3   12.7G

dd でコピー

dd if=/dev/sda1 of=/dev/sdb1 bs=4M status=progress
dd if=/dev/sda2 of=/dev/sdb2 bs=4M status=progress
dd if=/dev/sda3 of=/dev/sdb3 bs=4M status=progress
# for i in 1 2 3; do dd if=/dev/sda$i of=/dev/sdb$i bs=4M status=progress; done

できました。

/dev/sdb3 を最大まで拡張

シャットダウン後 Proxmox VE 上で作業。32GB のディスクをデタッチし、オプションから 16GB のディスクで起動するように設定

起動確認、ボリューム拡張

縮小成功

root@localhost:~# fdisk -l /dev/sda
Disk /dev/sda: 16 GiB, 17179869184 bytes, 33554432 sectors
Disk model: QEMU HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 4A90049D-10DC-4749-9D1E-BF921B967DCC

Device       Start      End  Sectors  Size Type
/dev/sda1     2048  1230847  1228800  600M Linux filesystem
/dev/sda2  1230848  3327999  2097152    1G Linux filesystem
/dev/sda3  3328000 33552383 30224384 14.4G Linux filesystem

root@localhost:~# pvs
  PV                                                    VG Fmt  Attr PSize   PFree  
  /dev/mapper/luks-56b095b6-640f-4c3a-ac81-225e559963ff rl lvm2 a--  <12.68g 692.00m

root@localhost:~# lvs
  LV   VG Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root rl -wi-ao---- 8.00g
  swap rl -wi-ao---- 4.00g

物理ボリュームを拡張する

pvresize /dev/mapper/luks-56b095b6-640f-4c3a-ac81-225e559963ff

拡張できました

root@localhost:~# pvs
  PV                                                    VG Fmt  Attr PSize  PFree
  /dev/mapper/luks-56b095b6-640f-4c3a-ac81-225e559963ff rl lvm2 a--  14.39g 2.39g

論理ボリューム拡張(任意)

lvextend -l +100%FREE /dev/rl/root
xfs_growfs /dev/rl/root
root@localhost:~# lvs
  LV   VG Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root rl -wi-ao---- 10.39g
  swap rl -wi-ao----  4.00g
root@localhost:~# df -h /
Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/rl-root   11G  1.9G  8.5G  19% /

お疲れさまでした。

Discussion