[CentOS 7] インストールしてしまった後に /home をなくして / に吸収させる方法
現在のディスク状況を確認する
$ df -hT
ファイルシス タイプ サイズ 使用 残り 使用% マウント位置
/dev/mapper/centos-root xfs 50G 1.4G 49G 3% /
devtmpfs devtmpfs 923M 0 923M 0% /dev
tmpfs tmpfs 933M 0 933M 0% /dev/shm
tmpfs tmpfs 933M 97M 837M 11% /run
tmpfs tmpfs 933M 0 933M 0% /sys/fs/cgroup
/dev/mapper/centos-home xfs 179G 15G 164G 9% /home
/dev/sda1 xfs 497M 124M 374M 25% /boot
tmpfs tmpfs 187M 0 187M 0% /run/user/1000
$
ご覧のように /home が一番大きな領域を持っている。
/home はあんまり使わないし、この CentOS 7 には KVM をインストールしたので、これからゲスト OS がインストールされる場所 /var/lib/libvirt/images にデータを多く使うようになりそうだ。/var/lib/libvirt/images でファイルシステムを切ることまではしたくないのでとりあえず / を大きくしたい。
df コマンドに -T を付けるとファイルシステムのタイプが表示される。なかなか便利なオプションだ。
手順の概要
簡単に手順を紹介すると、
- /home をアンマウントする
- /home を消去する
- /home を消去したことで出来た領域を / に割り当てる
という流れです。
めちゃくちゃ重要な注意事項
上記手順の概要で説明した「/home を消去する」ですが、すでにユーザーを作っている場合、そのユーザーのホームディレクトリも一緒に消去されることになります。
だから / を拡張したあと、それをどうやって復元するか?について、その方法を事前に考えておく必要があります。
僕がやったのは
- 必要なファイルを cp コマンドでバックアップする
だけです。
Dropbox を使えるようにしている CentOS ですので cp で Dropbox へファイル(主に python, ruby, bash スクリプト) をコピーしておきました。
で、/ を拡張した後、
- ユーザーを削除
- ユーザーを作成
- コピーしたファイルを /home/oreore に戻す
- もう一回 Dropbox を /home/oreore にインストールする
ということをやりました。
コンソールから root で作業する必要あり
/home を消去するわけですから、/home/oreore がホームディレクトリの oreore ユーザーでは作業ができません。コンソールで root でログインしてから作業する必要があります。
また、何かのプロセスが /home 以下にアクセスしていてもダメです。僕の場合、Dropbox が /home/oreore 以下にインストールされていて、それを常時起動するようにしていたので Dropbox のプロセスを止めてから作業する必要がありました。
/home を消去するのに lvremove コマンドを使用しますがこんな実行結果になりました。
# lvremove -f /dev/centos/home
Logical volume centos/home contains a filesystem in use.
#
これを見て、「あ、ドロップボックスが /home 使ってるわ」と思いついて、Dropbox を止めました。
/home を消去して / を大きくする
lvremove で /home を削除して、lvextend で / の領域を拡張します。
# ls -l /dev/centos total 0 lrwxrwxrwx. 1 root root 7 Apr 16 22:03 home -> ../dm-2 lrwxrwxrwx. 1 root root 7 Apr 16 22:03 root -> ../dm-0 lrwxrwxrwx. 1 root root 7 Apr 16 22:03 swap -> ../dm-1 # umount -l /home # lvremove -f /dev/centos/home Logical volume "home" successfully removed # ls -l /dev/centos total 0 lrwxrwxrwx. 1 root root 7 Apr 16 22:03 root -> ../dm-0 lrwxrwxrwx. 1 root root 7 Apr 16 22:03 swap -> ../dm-1 # ls -l /dev/mapper total 0 lrwxrwxrwx. 1 root root 7 Apr 16 22:03 centos-root -> ../dm-0 lrwxrwxrwx. 1 root root 7 Apr 16 22:03 centos-swap -> ../dm-1 crw-------. 1 root root 10, 236 Apr 16 22:03 control # lvextend -l +100%FREE /dev/mapper/centos-root Size of logical volume centos/root changed from 50.00 GiB (12800 extents) to 228.64 GiB (58533 extents). Logical volume root successfully resized. #
/home をマウントしに行かないように fstab を編集する
以下のように vi で /etc/fstab を編集しました。
# cp -p /etc/fstab /etc/fstab.20170416 # vi /etc/fstab
編集後は以下のようになっています。再起動します。
#
# /etc/fstab
# Created by anaconda on Tue Mar 22 00:15:53 2016
#
# Accessible filesystems, by reference, are maintained under ‘/dev/disk’
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=cebe2831-d89e-4556-9aec-2caafed493e4 /boot xfs defaults 0 0
#/dev/mapper/centos-home /home xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
# shutdown -r now
OS が起動してきたら
# xfx_growfs # df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 229G 1.4G 228G 1% / devtmpfs 923M 0 923M 0% /dev tmpfs 933M 0 933M 0% /dev/shm tmpfs 933M 8.6M 925M 1% /run tmpfs 933M 0 933M 0% /sys/fs/cgroup /dev/sda1 497M 139M 358M 28% /boot tmpfs 187M 0 187M 0% /run/user/0 #
以上で終了です。
案外簡単な作業ではあったのですが、そもそもファイルシステムのこととか、xfs、 LVM 関連の知識がほとんどないので運良く成功しただけかもしれません。
で、次回(かまたいつか)KVM 環境にゲスト OS をインストールするところを書いてみたいと思います。
xfx_growfs ではなくて xfs_growfs /dev/centos/root
ではないですか?
ああ、、、コマンドについてはきっとその通りです!xfx_growfs は書き間違えです。引数に /dev/centos/root が必要かどうかはすみません、今となっては思い出すことができません。コメント・ご指摘を頂きましてありがとうございました。