【CentOS】OSインストール時にLVMで作成された/homeを削除して/を拡張

はじめに

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です