前回の記事でさくらVPSにCentOS7をインストールしましたが、その時のパーティション配分についてちょっと困ったことになりました。
再掲になりますが、dfコマンドで確認すると、ディスクの使用状況がこのようになっていました。
# df -hT ファイルシス タイプ サイズ 使用 残り 使用% マウント位置 /dev/mapper/centos_vps--host--name-root xfs 50G 15G 36G 30% / devtmpfs devtmpfs 2.0G 0 2.0G 0% /dev tmpfs tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs tmpfs 2.0G 8.4M 2.0G 1% /run tmpfs tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup /dev/vda1 xfs 497M 142M 355M 29% /boot /dev/mapper/centos_vps--host--name-home xfs 46G 49M 46G 1% /home tmpfs tmpfs 396M 0 396M 0% /run/user/1111
※「vps–host–name」の部分は契約したVPSのホストドメイン名になります。
ストレージ全体は100GBしかなく、またyumでインストールしていくと使用領域は概ねrootになるので、このままだとほぼ実質50GBしか使えないことになります。これは痛い。
homeの方を削減して、rootの領域を増やしたいと思いますが、ちょっと一筋縄ではいかなそうです。
本当はインストール時に割当を決められるようなのですが、さくらVPSのインストールマニュアルにはその部分は無かったので、そのまま進めたらこうなってしまっていたということです。
参考記事
CentOS 7(XFS)のパーティションを縮小する手順 – Qiita
CentOS7 minimalインストール後、自動作成の/homeを削除して/(ルート)に統合 – Qiita
CentOS7の/homeのディスク領域を縮小してルートのディスク領域を拡張したお話 – Qiita
このあたりの記事を参考にさせていただきました。
簡単にまとめると、CentOS7のファイルシステム(XFS)だと、パーティションの拡張は簡単だけど縮小は出来ず、もしやるとしたら一旦対象のパーティションの中身をバックアップし、アンマウント・削除を行った後、同じパーティションを小さいサイズで作り直し、復元、という手順になるようです。
また、homeパーティションだとユーザーごとにインストールしたプログラム等が動いていたり、参照されていたりすることもあるので、そういったプロセスを全部終了させないと、パーティションが削除出来ません。
作業前にプロセスを確認して、homeを利用しているものは全部落としておきます。
1.事前準備
普通に作ったアカウントだと、homeにユーザーのホームディレクトリができているはずです。
そうなると、そのアカウントでログインしているとhomeを参照してしまうので、今回の作業用にhome以外のディレクトリをホームディレクトリを持つアカウントを作る必要があります。
1-1.ホームディレクトリがworkの作業用ユーザーを作る
まず、suでrootになった後、/workディレクトリを作成します。
mkdir /work
次に、作業用ユーザーを作成し、パスワードを設定します。
useraddは、-dオプションでホームディレクトリを指定します。
作業用ユーザーもsu出来る必要があるので、wheelグループを追加します。
useradd -d /work/resize -m -G wheel -p resize resize passwd resize
1-2.homeのダンプのためxfsdumpをインストールする
suのまま、homeのダンプが出来るxfsdumpをyumからインストールします。
yum install xfsdump
※既にインストール済みなら飛ばします。
1-3.fuserコマンドが使えるようにする
psmiscパッケージをインストールすると、fuserコマンドが使えるようになります。
CentOS7を手順通りにインストールすると最小構成になるようで、最初からインストールされていないので、追加する必要があります。
yum install psmisc
※既にインストール済みなら飛ばします。
これは、後々にhomeパーティションを利用しているプロセスを見つけるために必要になります。
2.homeのバックアップ
homeパーティションの中身をバックアップするため、作業ユーザーでログインしなおし、先程インストールしたxsfdumpを実行します。
cd /work sudo xfsdump -J -L home -M drive -f home.dump /home
ダンプファイルは/workディレクトリ直下に作成するので、一度cdしています。
色々とログが出ますが、「xfsdump: Dump Status: SUCCESS」が出たら正常終了です。
これで、 /work/home.dump にダンプファイルが出来ました。
3.homeのアンマウントと削除
バックアップが済んだので、いよいよhomeをアンマウントします。
unmountコマンドでアンマウントするのですが、パスは先程のduコマンドで出てきた「/dev/mapper/centos_vps–host–name-home」になります。したがって、コマンドはこうなります。
umount /dev/mapper/centos_vps--host--name-home
※「vps–host–name」部分は契約環境によって異なります。
これを実行後、再度duコマンドを実行すると、/homeの行が無くなっていることが確認できます。
# df -Th ファイルシス タイプ サイズ 使用 残り 使用% マウント位置 /dev/mapper/centos_vps--host--name-root xfs 50G 15G 36G 30% / devtmpfs devtmpfs 2.0G 0 2.0G 0% /dev tmpfs tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs tmpfs 2.0G 8.4M 2.0G 1% /run tmpfs tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup /dev/vda1 xfs 497M 142M 355M 29% /boot tmpfs tmpfs 396M 0 396M 0% /run/user/1111 tmpfs tmpfs 396M 0 396M 0% /run/user/1112
※その他、先程作った作業用ユーザーの分のtmpfsが増えています。
アンマウントが出来たので、次は論理ボリュームの削除です。
Red Hatのマニュアルにはこうあります。
4.4.12. 論理ボリュームの削除
「lvchange -an」で非アクティブにし、「lvremove」で削除します。
sudo lvchange -an /dev/centos_vps-host-name/home sudo lvremove /dev/centos_vps-host-name/home
※「vps-host-name」部分は契約環境によって異なります。
Logical volume “home” successfully removed
と表示されれば成功です。
アンマウント・削除がうまくいかない時
この工程で、umountのタイミングなどで「device is busy」等のエラーが出て進まなくなることがあります。
これが出るときは、対象のディレクトリを使用中のプロセスが存在していますので、fuserコマンドでそのプロセスを見つけて終了させます。
fuser -va /dev/centos_vps-host-name/home
プロセスIDを1個ずつkillしてもよいですが、-kmオプションで一気に落とすこともできるようです。
参考:いつか役立つfuserコマンド | OpenGroove
4.homeの再作成・マウント
論理ボリュームの削除ができたら、今度はhomeを再作成します。
この時に新しいhomeの容量を指定します。今回は、念のため5Gとしていますが、実際のところ運用上は1Gとかでも良かったように思います。
lvcreate コマンドで、容量とボリューム名・ボリュームグループを指定して、論理ボリュームを作成します。
参考:4.4. 論理ボリュームの管理
sudo lvcreate -L 5G -n home centos_vps-host-name
「vps-host-name」の部分は例によって契約環境によって異なりますが、上記のコマンドは「vps-host-nameというボリュームグループに、homeというボリューム名の論理ボリュームを5G分作る」という意味になります。
論理ボリュームが出来たら、次のそこにファイルシステムを作ります。
sudo mkfs.xfs /dev/centos_vps-host-name/home
最後に、新しく出来たhomeをマウントします。
sudo mount /dev/centos_vps-host-name/home
ちゃんとdfコマンドで出てくるか確認します。
df -Th ファイルシス タイプ サイズ 使用 残り 使用% マウント位置 /dev/mapper/centos_vps--host--name-root xfs 50G 15G 36G 30% / devtmpfs devtmpfs 2.0G 0 2.0G 0% /dev tmpfs tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs tmpfs 2.0G 25M 2.0G 2% /run tmpfs tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup /dev/vda1 xfs 497M 142M 355M 29% /boot tmpfs tmpfs 396M 0 396M 0% /run/user/1111 tmpfs tmpfs 396M 0 396M 0% /run/user/1112 /dev/mapper/centos_vps--host--name-home xfs 5.0G 33M 5.0G 1% /home
増えていました。サイズも5Gになっています。
あとはダンプファイルをリストアするだけです。
4.homeのリストア
xfsrestore コマンドで、ダンプファイルをリストアします。
先程ダンプファイルは/work直下に作成したので、一旦cdしています。
cd /work sudo xfsrestore -J -L home -f home.dump /home
また色々とログが出てきますが、最後にSUCCESSが出たら正常終了です。
xfsrestore: Restore Status: SUCCESS
これで、homeを縮小させることが出来ました。
しかし、このままだとrootが50GBのままで、何も使われていない領域が41Gほど残っていることになります。
余った領域を、rootに割り当てましょう。
5.rootを拡張する
rootの使用領域を増やすには、論理ボリュームを拡張し、ファイルシステムも拡張する必要があります。
まず論理ボリュームの残りの部分を全部rootに割り当てます。
sudo lvextend -l +100%FREE /dev/centos_vps-host-name/root
Logical volume root successfully resized.
と出れば成功です。
次にファイルシステムを拡張します。
xfs_growfs /dev/mapper/centos_vps--host--name-root
これで論理ボリュームの割り当てによって増えた部分も使えるようになりました。
dfコマンドを確認します。
df -Th ファイルシス タイプ サイズ 使用 残り 使用% マウント位置 /dev/mapper/centos_vps--host--name-root xfs 91G 15G 77G 17% / devtmpfs devtmpfs 2.0G 0 2.0G 0% /dev tmpfs tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs tmpfs 2.0G 25M 2.0G 2% /run tmpfs tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup /dev/vda1 xfs 497M 142M 355M 29% /boot tmpfs tmpfs 396M 0 396M 0% /run/user/1111 tmpfs tmpfs 396M 0 396M 0% /run/user/1112 /dev/mapper/centos_vps--host--name-home xfs 5.0G 49M 5.0G 1% /home
無事にrootの領域が+41Gされて合計で91Gになっています。
これで、homeを縮小してrootを増やす作業が完了しました。
非常に面倒な手順になるので、出来ればOSインストール時点でちゃんとパーティションのボリュームを指定してインストールした方がいいですね。
コメント
ありがとうございます。
この記事を読んで本当に助かりました。
OSは違いますが、同じ事象で悩んでいました。
今後とも参考にさせて頂きます。
ありがとうございます!!!!!
助かりました!!!!!!!!!
まずは、本当に感謝しております。
お客様のサーバーを要件通りにセッティングを行い出荷したのですが、、
この記事と全く同じ要求がお客様から出されて1週間方法を調査しておりました。
英語の記事なども含めて検索しておりましたが、どれも期待通りの動作をしませんでした。
本日貴殿のブログが目に留まりまして、無事LVM内の論理ボリュームの縮小と拡張が出来る方法がわかりました。本当に助かりました。ありがとうございます。