CentOSで/homeを/にマージする

背景

現在,CentOSで構築しているサーバに外付けのSSDを接続し,そちらを/homeにマウントしている.
しかし,CentOSの初期設定の際に/homeには論理ボリュームcentos-homeが割り当てられていた.
centos-homeはどこにもマウントされていないためcentos-rootにマージしたい.

解決策

以下に示している解決法は「とりあえずやったらできた」程度のものです.
下記手順を実行したことによって生じた損害等の一切の責任を負いかねますのでご了承ください. (マサカリ🪓は歓迎します)

手順

流れとしては以下のようになります.
1. 論理ボリュームの確認
2. 現在/homeに存在するファイルの退避
3. 論理ボリュームcentos-homeの削除
4. 論理ボリュームが削除されたことの確認
5. 空いている容量を全てcentos-rootに割り当てる
6. 割り当てられたことの確認
7. OSが認識しているか確認
8. xfsファイルシステムを拡大
9. 正常にマウントされていることの確認

コマンド

(以下は全てrootで作業しています.)

1: 論理ボリュームの確認

まず,dfコマンドを用いてファイルシステムのディスク容量を確認します.以下の出力は/以外は省略してあります.現在,50GB中の約49GBを使用していることがわかります.

$ df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root    50G   49G  1.6G   97% /

次にlvdisplayコマンドを用いて論理ボリュームの情報を表示します.ログを取るのを忘れており出力結果は表示していないのですが,rootとhomeの論理ボリュームが表示されてい(ました|る思います).

$ lvdisplay -C

2: 現在/homeに存在するファイルの退避

/homeに既にファイルがある場合は別の場所に退避させます.可能であれば他の物理ボリュームが良いと思います.*1 今回,/homeは空だったのでコマンドは省略しますが,圧縮して他の場所に置けば良いです.

3: 論理ボリュームcentos-homeの削除

ファイルを退避させたらlvremoveコマンドを用いて論理ボリュームを解放します.

$ lvremove /dev/mapper/centos-home

4: 論理ボリュームが削除されたことの確認

もう一度lvdisplayコマンドを用いて,削除されたことの確認を行います.

$ lvdisplay -C

5: 空いている容量を全てcentos-rootに割り当てる

lvextendコマンドを使い,空き容量を全て/に割り当てます.

$ lvextend -l +100%FREE /dev/mapper/centos-root

6: 割り当てられたことの確認

元々50GBでしたが,500GBになりました.(464.56GBとなっていますが,ファイルシステムが使用する容量があるためこのようになっていると推察されます)*2

$ lvdisplay -C
  LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root centos -wi-ao---- 464.56g

7: OSが認識しているか確認

ファイルシステムのディスク容量を確認します.

$ df -h 
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root    50G   49G  1.6G   97% /

🤔 🤔 🤔

サイズが増えていません.
これはこの時点ではまだファイルシステムのリサイズは行なっていないためです.

8: xfsファイルシステムの拡大

今回使用しているファイルシステムがxfsなので,xfs_growfsコマンドを用いて変更を反映します.

$ xfs_growfs -d / 
meta-data=/dev/mapper/centos-root isize=512    agcount=38, agsize=3276800 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=121782272, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               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 121782272        

9: 正常にマウントされていることの確認

もう一度dfコマンドを用いてファイルシステムのディスク容量を確認します.

$ df -h 
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root  465G   49G  417G  11% /

正しく反映されました👍

参考

*1:最悪初期化することになるかもしれないので

*2:https://hesonogoma.com/linux/comparativetableoffilesystem.html