【CentOS】OSインストール時にLVMで作成された/homeを削除して/を拡張
Contents
はじめに
CentOSを物理マシンに新規インストールする機会がありました。
その際、うっかりデフォルト設定のままインストールを進めてしまったところ、/
ディレクトリの容量が少なく、/home
ディレクトリが巨大な状態のシステム構成になりました。
サーバ利用はクラウド/仮想環境が主流の昨今、個人的にはLinuxローカル環境のパーティションはあまり細かく分けるべきでないと考えています。
/boot(/boot/efi)
、/
、swap
くらいに留めておくのがシンプルでお勧めです。
既に構築を進めていてOSの入れ直しは手間だったため、今回はLVMの機能を使って動的にディスク構成を変更してみました。
前提条件
以下の環境で調査を行いました。
ハードウェア
Oracle VM VirtualBox上に作成した、以下の仮想マシンを使用しました。
- CPU: 2core
- RAM: 2GB
- Disk: 200GB
OS
前述の仮想マシンに対して、CentOSインストールDVDのISOファイルからminimalインストールを行いました。
バージョン情報は以下の通りです。
# cat /etc/redhat-release
CentOS Linux release 8.0.1905 (Core)
# uname -r
4.18.0-80.el8.x86_64
ファイルシステム
各パーティション/論理ボリュームのファイルシステムにはXFSを使用しました。
作業概要
デフォルト設定でCentOSをインストールをインストールすると、以下構成図の状態となります。
今回は、/home
用に割り当てられている論理ボリュームを削除、/
用に割り当てられている論理ボリュームを拡張し、以下構成図の状態に変更します。
OSインストール直後の状態確認
ディスクパーティション
以下のコマンドを実行し、ディスクパーティション一覧を確認します。
ブートローダのGRUB2をインストールした起動パーティションとしてsda1
、LVM領域としてsda2
が存在しています。
# fdisk -l
ディスク /dev/sda: 200 GiB, 214748364800 バイト, 419430400 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0xac5d858d
デバイス 起動 開始位置 終了位置 セクタ サイズ Id タイプ
/dev/sda1 * 2048 2099199 2097152 1G 83 Linux
/dev/sda2 2099200 419430399 417331200 199G 8e Linux LVM
ディスク /dev/mapper/cl-root: 50 GiB, 53687091200 バイト, 104857600 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスク /dev/mapper/cl-swap: 2.1 GiB, 2222981120 バイト, 4341760 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスク /dev/mapper/cl-home: 146.9 GiB, 157760356352 バイト, 308125696 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
LVM 物理ボリューム
以下のコマンドを実行し、LVMの物理ボリューム一覧を確認します。
前述のfdisk -l
コマンドで表示されたLinux LVMパーティション/dev/sda2
が物理ボリュームとしてLVMで管理され、ボリュームグループcl
に全容量割り当てられています。
# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 cl lvm2 a-- <199.00g 0
LVM ボリュームグループ
以下のコマンドを実行し、LVMのボリュームグループ一覧を確認します。
#LV
の欄では、ボリュームグループcl
に3つの論理ボリュームが収容されていることが示されています。
# vgs
VG #PV #LV #SN Attr VSize VFree
cl 1 3 0 wz--n- <199.00g 0
LVM 論理ボリューム
以下のコマンドを実行し、LVMの論理ボリューム一覧を確認します。
swap
(swap用の論理ボリューム)に約2GB、root
(/用の論理ボリューム)に約50GBが割り当てられ、残りの全容量がhome
(/home用の論理ボリューム)に割り当てられています。
# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
home cl -wi-ao---- <146.93g
root cl -wi-ao---- 50.00g
swap cl -wi-ao---- 2.07g
ファイルシステム
以下のコマンドを実行し、ファイルシステムのマウント状態を確認します。
前述のlvs
コマンドで表示された論理ボリュームはそれぞれ、/dev/mapper/<ボリュームグループ名>-<論理ボリューム名>
のデバイスファイルとしてマウント元デバイスファイルに指定されています。
サイズ
列で各ファイルシステムの領域を確認すると、/
は約50GBの容量になっていて、残りは/home
に割り当てられています。今回は、この/home
の領域を削除します。
なお、swap領域はファイルシステムとしてマウントされないため、df
コマンドの結果には表示されません。
# df -Th
ファイルシス タイプ サイズ 使用 残り 使用% マウント位置
devtmpfs devtmpfs 980M 0 980M 0% /dev
tmpfs tmpfs 995M 0 995M 0% /dev/shm
tmpfs tmpfs 995M 8.5M 986M 1% /run
tmpfs tmpfs 995M 0 995M 0% /sys/fs/cgroup
/dev/mapper/cl-root xfs 50G 1.6G 49G 4% /
/dev/mapper/cl-home xfs 147G 1.1G 146G 1% /home
/dev/sda1 ext4 976M 110M 800M 13% /boot
tmpfs tmpfs 199M 0 199M 0% /run/user/1000
/home領域の削除
ホームディレクトリのバックアップ
ファイルシステム上の/home
配下には、OSローカルユーザのホームディレクトリが格納されています。
各ユーザのホームディレクトリにはシェルやsshの設定ファイル等、ログイン時に実行されるファイル類が含まれていているため、/home
領域を削除した後、/
領域内のディレクトリとして再び復元する必要があります。
そのため、まずは以下のコマンドでディレクトリのバックアップを取得します。
# cp -rp /home /tmp
# ls -ld /tmp/home
drwxr-xr-x. 3 root root 21 10月 7 11:19 /tmp/home/
ファイルシステムのアンマウント
/home
領域を削除するためには、マウントポイント/home
からファイルシステム/dev/mapper/cl-home
をアンマウントする必要があります。
以下のコマンドを実行し、アンマウントを行います。
# umount /dev/mapper/cl-home
この時、OS上の一般ユーザでログインしていると不具合が発生する可能性があります。
これは、ログインユーザが、ホームディレクトリ上のシェル設定ファイルを開いているためです。
一般ユーザからsu
コマンドやsudo
コマンドでroot権限に昇格した場合も同様なので、本作業を行うためには、必ずrootユーザで直接OSにログインしてください。
アンマウントが完了したら、以下のコマンドで/home
がマウントされていないことを確認します。
# df -Th
ファイルシス タイプ サイズ 使用 残り 使用% マウント位置
devtmpfs devtmpfs 980M 0 980M 0% /dev
tmpfs tmpfs 995M 0 995M 0% /dev/shm
tmpfs tmpfs 995M 8.5M 986M 1% /run
tmpfs tmpfs 995M 0 995M 0% /sys/fs/cgroup
/dev/mapper/cl-root xfs 50G 1.6G 49G 4% /
/dev/sda1 ext4 976M 110M 800M 13% /boot
tmpfs tmpfs 199M 0 199M 0% /run/user/1000
tmpfs tmpfs 199M 0 199M 0% /run/user/0
論理ボリュームの削除
以下のコマンドを実行し、論理ボリュームhome
を削除します。
# lvremove /dev/cl/home
Do you really want to remove active logical volume cl/home? [y/n]: y ←yを入力
Logical volume "home" successfully removed
論理ボリューム削除後、以下のコマンドでhome
が一覧に存在しないことを確認します。
# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root cl -wi-ao---- 50.00g
swap cl -wi-ao---- 2.07g
ホームディレクトリのリストア
/home
ディレクトリは、ファイルシステムがアンマウントされて空の状態になったので、バックアップしておいたホームディレクトリを復元します。
以下のコマンドを実行し、ホームディレクトリを/
ディレクトリの配下に上書き移動します。
# mv /tmp/home /
mv: '/home' を上書きしますか? y ←yを入力
ホームディレクトリリストア後、ディレクトリ内に一般ユーザのディレクトリが存在していることを確認します。
# ls -l /home
合計 0
drwx------. 2 user01 user01 62 10月 7 11:19 user01
OS起動時のマウント設定
OS起動時のマウント設定を編集し、次回起動時のマウント対象から論理ボリュームhome
を除外します。
この作業を行わないでOSを再起動すると、次回起動に失敗するので必ず実施してください。
以下のコマンドを実行し、マウント設定ファイルを編集します。
# vi /etc/fstab
### 下記の1行を削除
/dev/mapper/cl-home /home xfs defaults 0 0
fstab
ファイルを編集した場合、systemdのマウントユニットに設定を反映させる必要があります。
以下のコマンドを実行し、設定ファイルの再読み込みを行います。
# systemctl daemon-reload
/
領域の拡張
論理ボリュームの容量拡張
論理ボリュームhome
を削除すると、ボリュームグループcl
に空き領域ができます。
この空き領域を全て利用して、論理ボリュームroot
の容量を拡張します。
以下のコマンドを実行し、論理ボリュームroot
の拡張を行います。
# lvextend -l +100%FREE /dev/mapper/cl-root
Size of logical volume cl/root changed from 50.00 GiB (12800 extents) to <196.93 GiB (50413 extents).
Logical volume cl/root successfully resized.
論理ボリュームroot
の容量拡張後、以下のコマンドで同ボリュームの容量が増加していることを確認します。
# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root cl -wi-ao---- <196.93g
swap cl -wi-ao---- 2.07g
ファイルシステムの容量拡張
論理ボリュームを拡張しただけでは、OS上から使用できる/
ディレクトリの容量は増加しません。
そのため、ファイルシステム上の容量も拡張します。
以下のコマンドを実行し、ファイルシステムの拡張を行います。
# xfs_growfs /
meta-data=/dev/mapper/cl-root isize=512 agcount=4, agsize=3276800 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=13107200, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=6400, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 13107200 to 51622912
ファイルシステム拡張後、以下のコマンドで/
ディレクトリの容量が増加していることを確認します。
# df -Th
ファイルシス タイプ サイズ 使用 残り 使用% マウント位置
devtmpfs devtmpfs 980M 0 980M 0% /dev
tmpfs tmpfs 995M 0 995M 0% /dev/shm
tmpfs tmpfs 995M 8.5M 987M 1% /run
tmpfs tmpfs 995M 0 995M 0% /sys/fs/cgroup
/dev/mapper/cl-root xfs 197G 2.6G 195G 2% /
/dev/sda1 ext4 976M 110M 800M 13% /boot
tmpfs tmpfs 199M 0 199M 0% /run/user/0