検索してもなかなか出てこない+ビクビクしながら実施するのは嫌なので

Introduction

掲題通りなんですが、Ubuntuだとここまで面倒ではなくて、手順は広まっている。
けど、CentOS7のファイルシステムにXFSが採用された事で色々変わったのでしょう。

  • インストール後、rootまたはhomeが小さくて困った、サイズを変更したい
  • 拡大は良いが縮小するために一度パーティションの削除が必要で困った

こういう事例があります。
はい、私です。業務ではまりました。

忘れないように、見返せるようにメモをとります。

How to?

まず直前の状態。

1
2
3
4
5
6
7
8
9
10
# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 8.4M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 17G 1.4G 16G 8% /
/dev/sda2 1014M 179M 836M 18% /boot
/dev/sda1 200M 12M 189M 6% /boot/efi
tmpfs 379M 0 379M 0% /run/user/0

ここからリサイズを実施。
まずシャットダウン。

1. Hyper-Vからディスク拡張

これは簡単です。
GUIからどうぞ。
今回は20GBから30GBに拡張しました。

2. ディスクの状態を確認

1
2
3
4
5
6
7
8
9
10
# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 8.4M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 17G 1.4G 16G 8% /
/dev/sda2 1014M 179M 836M 18% /boot
/dev/sda1 200M 12M 189M 6% /boot/efi
tmpfs 379M 0 379M 0% /run/user/0

はい、何も変わっていません。

3. partedでディスクを修正

このままだとフリーな領域が見えませんので、partedで修正します。

1
2
3
4
# parted
GNU Parted 3.1
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.

対話形式で処理を進めます。
パーティションを修正するので、pを押下すると、バックアップGPTテーブルがディスクの終端にありません。 という警告が出ます。
無論、ディスクを拡張したからです。
修正するかと聞かれますのでs、Fixと入力します。
さらに /dev/sda に利用可能なスペースのすべてが使用されているわけではないようです。 という警告が出ます。
修正するかと聞かれますのでs、Fixと入力します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
(parted) p                                                                
Error: The backup GPT table is not at the end of the disk, as it should be. This might mean that another operating system believes the disk is smaller. Fix,
by moving the backup to the end (and removing the old backup)?
Fix/Ignore/Cancel? Fix
Warning: Not all of the space available to /dev/sda appears to be used, you can fix the GPT to use all of the space (an extra 20971520 blocks) or continue with
the current setting?
Fix/Ignore? Fix
Model: Msft Virtual Disk (scsi)
Disk /dev/sda: 32.2GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:

Number Start End Size File system Name Flags
1 1049kB 211MB 210MB fat16 EFI System Partition boot
2 211MB 1285MB 1074MB xfs
3 1285MB 21.5GB 20.2GB lvm

修正が実施され、ディスクの情報が出力されます。
ここで Disk /dev/sda: 32.2GB の部分の数値を記録します。
後から使用します。
この数値がHyper-Vで拡張したディスクサイズになっています。

4. resizepartで実際にリサイズ

同じくpartedのコマンドの一つresizepartでパーティションのサイズを変更します。
修正対象は、3つめのパーティションになります。
そして、パーティションの終端を指定します。つまり、先ほどのディスクサイズを指定します。

1
2
3
(parted) resizepart                                                       
Partition number? 3
End? [21.5GB]? 32.2G

リサイズ後、pコマンドで確認します。

1
2
3
4
5
6
7
8
9
10
11
(parted) p                                                                
Model: Msft Virtual Disk (scsi)
Disk /dev/sda: 32.2GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:

Number Start End Size File system Name Flags
1 1049kB 211MB 210MB fat16 EFI System Partition boot
2 211MB 1285MB 1074MB xfs
3 1285MB 32.2GB 30.9GB lvm

しっかりと、サイズが増えていることがわかります。
qを押下してpartedを終了しします。

5. pvresizeで物理ボリュームをリサイズ

続いて、物理ボリュームのリサイズ。
修正前はこうなります。

1
2
3
# pvs                                                   
PV VG Fmt Attr PSize PFree
/dev/sda3 centos lvm2 a-- 18.80g 0

修正対象の物理ボリュームを指定して、pvresizeを実行するだけで、最大まで物理ボリュームを拡張します。

1
2
3
4
5
6
7
# pvresize /dev/sda3
Physical volume "/dev/sda3" changed
1 physical volume(s) resized or updated / 0 physical volume(s) not resized

# pvs
PV VG Fmt Attr PSize PFree
/dev/sda3 centos lvm2 a-- <28.79g <9.99g

空き領域が増えたことがわかります。

6. lvextendで論理ボリュームをリサイズ

これで最後です。
先ほど拡張した物理ボリューム内のデバイスマッパーが割り当てたデバイスを拡張します。
つまり、**/dev/sda3** 配下のデバイスになります。
この関係はlsblkで確認できます。

1
2
3
4
5
6
7
8
9
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 30G 0 disk
├─sda1 8:1 0 200M 0 part /boot/efi
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 28.8G 0 part
├─centos-root 253:0 0 16.8G 0 lvm /
└─centos-swap 253:1 0 2G 0 lvm [SWAP]
sr0 11:0 1 1024M 0 rom

ここでは、

  • centos-root
  • centos-swap

を拡張できます。
片方に空き領域を全部足してもイイですし、均等に配分しても構いません。
ここでは、10:0でrootに配分します、というかswapにはlvextendで拡張できません。
fsadm: Filesystem “swap” on device “/dev/mapper/centos-swap” is not supported by this tool. って言われて怒られますので。

1
2
3
4
5
6
7
8
9
10
11
12
13
# lvextend -l +100%FREE -r /dev/mapper/centos-root
Size of logical volume centos/root changed from <22.80 GiB (5836 extents) to <26.79 GiB (6858 extents).
Logical volume centos/root successfully resized.
meta-data=/dev/mapper/centos-root isize=512 agcount=6, agsize=1101056 blks
= sectsz=4096 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=5976064, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 5976064 to 7022592

指定は、現在の空き領域の何%を指定したデバイスに追加するか、という意味になります。
今回は全部を配分するので100%を指定しました。

7. 確認

こうなりました。
無事に10GB増えていることがわかります。

1
2
3
4
5
6
7
8
9
10
# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 8.3M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 27G 1.4G 26G 5% /
/dev/sda2 1014M 179M 836M 18% /boot
/dev/sda1 200M 12M 189M 6% /boot/efi
tmpfs 379M 0 379M 0% /run/user/0