「増やす」のは天国。「減らす」のは地獄。
こんにちは!「LINUX工房」管理人の「リナックス先生」です。
前回は、稼働中のサーバーを止めることなくディスク容量を増やす「オンライン拡張」を学びました。あれは魔法のように簡単で楽しい作業でしたね。
しかし、インフラエンジニアには時として、その逆のオーダーが舞い込みます。
「ディスク容量の縮小」と「物理ディスクの交換」です。
先生、また相談です…。
前回 /data を70GBに増やしましたけど、実は勘違いで、そんなに使わないことが判明しました。
逆に /home の容量が足りなくなっちゃって…。/data を20GBに戻して、浮いた50GBを /home に回したいんですけど、チャチャッとコマンド一発でいけますよね?
コウ君、それはLVMで最も危険な作業よ。
「増やす」時は中身(データ)には影響しないけど、「減らす」時はデータの尻尾を切り落としてしまう可能性があるの。
一歩間違えれば全データ消失。
それに、もし君がファイルシステムに「XFS」を選んでいたら…残念ながら「縮小」は不可能なのよ。
今回は、LVM運用における「撤退戦」の技術。
データ消失のリスクを回避しながらLVを縮小する手順と、古くなったHDDを新しいHDDに入れ替えるためのデータ移行技術(pvmove)を徹底解説します。
📚 LVM完全マスター(全8回)目次
現在地:【第6回】ディスク容量の縮小と物理ディスクの交換
- 【第1回】LVMの仕組みとメリットを完全図解
- 【第2回】物理ボリューム(PV)の作成とディスクの追加
- 【第3回】ボリュームグループ(VG)の作成と管理
- 【第4回】論理ボリューム(LV)の切り出しとフォーマット
- 【第5回】【核心】稼働中にディスク容量を増やす(lvextend)
- 【第6回】ディスク容量の縮小と物理ディスクの交換
- 【第7回】スナップショット機能で一瞬でバックアップを取る
- 【第8回】LVMトラブルシューティングとRAID構成
第1章:縮小作業の鉄則と「XFSの壁」
作業に入る前に、絶対に理解しておくべき「物理法則」があります。
1. 縮小の順序を間違えると死ぬ
拡張の時は「LVM枠拡大」→「中身(ファイルシステム)拡大」の順でした。
縮小の時はその逆…ではありません!
正しい縮小順序:
- 中身(ファイルシステム)を先に縮める
(例:70GB → 20GBに圧縮して、後ろ50GBを空っぽにする) - 外枠(LV)を縮める
(例:70GB → 20GBの枠にする)
もし逆に「先に枠(LV)を縮めて」しまうと、入り切らなくなったデータ(お尻の部分)が強制的に切り落とされ、ファイルシステムが破損します。
二度とマウントできなくなる、恐怖の事態です。
2. XFSファイルシステムは「縮小不可」
第4回で「XFSは縮小できない」と言ったのを覚えていますか?
RHEL/CentOS/AlmaLinuxなどで標準採用されている XFS は、仕様上、パーティションの縮小(shrink)機能をサポートしていません。
resize2fs に相当する縮小コマンドが存在しないのです。
もし現在 XFS を使っている場合は、「第3章:XFS環境での縮小(作り直し)」へ進んでください。コマンドでの縮小は諦めるしかありません。
第2章:ext4環境での縮小手順(lvreduce)
UbuntuやDebianで標準の ext4 を使っている場合は、コマンドで縮小が可能です。
ただし、拡張と違って「アンマウント(オフライン)」が必須です。
つまり、サービスを停止する必要があります。
手順1:バックアップを取る
どれだけ自信があっても、縮小作業前は必ずバックアップを取ってください。
人間は計算ミスをします。
手順2:アンマウントする
sudo umount /data
手順3:ファイルシステムのチェック(e2fsck)
整合性が取れていない状態でサイズ変更するのは自殺行為です。
必ずチェックを行い、クリーンな状態にします。
sudo e2fsck -f /dev/vg_storage/lv_data
「Pass 5…」まで進み、エラーがなければOKです。
手順4:ファイルシステムの縮小(resize2fs)
ここが一番緊張する瞬間です。
まず「中身」を目標サイズ(例:20GB)まで縮めます。
sudo resize2fs /dev/vg_storage/lv_data 20G
出力例:
Resizing the filesystem on /dev/vg_storage/lv_data to 5242880 (4k) blocks. The filesystem on ... is now 5242880 (4k) blocks long.
手順5:論理ボリュームの縮小(lvreduce)
中身が小さくなったので、外枠も同じサイズ(20GB)まで縮めます。
※注意:絶対にresize2fsで指定したサイズより小さくしてはいけません!
sudo lvreduce -L 20G /dev/vg_storage/lv_data
「データが失われる可能性がありますが続けますか? [y/n]」と聞かれます。
震える手で y を押します。
手順6:再マウントと確認
sudo mount /data df -h /data
サイズが20GBになり、中のデータが読めれば成功です!
これでVGに50GBの空きが戻ってきました。
💡 プロの技:lvreduceの -r オプション
拡張時と同じく、縮小時も -r オプションを使えば、resize2fs と lvreduce を連携させて安全に縮小してくれます。
sudo lvreduce -L 20G -r /dev/vg_storage/lv_data
計算ミスを防ぐため、実務ではこちらを推奨します(ext4の場合のみ有効)。
第3章:XFS環境での縮小(作り直し作戦)
XFSでは resize2fs のような縮小コマンドが使えません。
そのため、「データを別の場所に退避して、LVを作り直し、データを戻す」という物理的なアプローチが必要です。
手順フロー
- バックアップ: 別のディスクやサーバーにデータをコピーする(rsyncやtar)。
- LV削除:
lvremoveで現在のLV(70GB)を消す。 - LV再作成:
lvcreateで小さいサイズ(20GB)のLVを新規作成する。 - フォーマット:
mkfs.xfsでフォーマットする。 - リストア: バックアップからデータを書き戻す。
「なんだ、ただの引越しじゃないか」と思うかもしれませんが、これが唯一の解です。
XFSを採用する場合は、「大は小を兼ねる」で最初から大きめに確保しておくか、VGに余裕を持たせておく設計が重要になります。
第4章:物理ディスクの交換とデータ移動「pvmove」
さて、ここからは「容量」の話ではなく「物理的なハードウェア」の話です。
長年サーバーを運用していると、HDDから「カシュン、カシュン」と異音がし始めたり、SMARTエラーが出たりして、故障の予兆を感じることがあります。
LVMには、「稼働中のディスクから、新しいディスクへ、データを透明に移動させる」という神機能があります。
それが pvmove です。
シナリオ:故障寸前のHDDを交換する
- 現状:
/dev/sdb(20GB) が故障寸前。データが入っている。 - 目標: 新しい
/dev/sdc(20GB以上) にデータを移し、sdbを廃棄する。 - 条件: サーバーは止めない(オンライン)。
手順1:新しいディスクをVGに追加する
まず、交換用の新ディスク(sdc)を接続し、PV作成〜VG追加まで行います(第2・3回の復習)。
sudo pvcreate /dev/sdc sudo vgextend vg_storage /dev/sdc
これで、vg_storage の中に「古いsdb」と「新しいsdc」が同居している状態になりました。
手順2:データを移動させる(pvmove)
古いディスク(sdb)に入っているPE(データの断片)を、VG内の空いている場所(つまりsdc)に移動させます。
sudo pvmove /dev/sdb
実行結果:
/dev/sdb: Moved: 10.0% /dev/sdb: Moved: 45.0% ... /dev/sdb: Moved: 100.0%
この処理中も、サーバーは普通に読み書きが可能です。
LVMが裏側で、データのコピーとアクセスの切り替えをリアルタイムで行ってくれます。
データ量によっては数時間かかりますが、完了すると /dev/sdb は「空っぽ」になります。
手順3:古いディスクをVGから切り離す
空になった sdb はもう不要です。VGから追い出しましょう。
sudo vgreduce vg_storage /dev/sdb
手順4:PVラベルを剥がして廃棄
sudo pvremove /dev/sdb
これで /dev/sdb はLVMから完全に解放されました。
あとはサーバーの電源を切って物理的に取り外すだけです。
第5章:トラブルシューティング Q&A
Q1. pvmove中に電源が落ちたらどうなる?
A. 再起動後に再開されます(が、怖いです)。
pvmove はチェックポイント機能を備えており、中断しても途中から再開できるようになっています。
再起動後、pvmove --background などで再開できますが、ファイルシステムの整合性が崩れるリスクもあるため、UPS(無停電電源装置)がある環境で行うのが鉄則です。
Q2. “Extents not found” でpvmoveできない
A. 移動先に十分な空き容量がありません。
移動元のディスク(sdb)の使用量が15GBなら、VG内に(sdc側に)15GB以上の空き領域(Free PE)が必要です。vgs コマンドでVFreeを確認してください。
Q3. resize2fsで “New size smaller than minimum” エラー
A. 縮小しようとしているサイズが、現在入っているデータ量より小さいです。
例えば15GBのデータが入っているのに「10GBにしろ」と命令しても無理です。
不要なファイルを削除して空きを作るか、縮小サイズを見直してください。
まとめ:撤退戦を制する者が運用を制す
お疲れ様でした!
今回は、LVM運用の中でも難易度の高い「縮小」と「交換」をマスターしました。
今回の重要ポイント:
- 縮小順序は「中身(FS)」→「外枠(LV)」が鉄則。
- XFSは縮小できない。作り直しが必要。
pvmoveを使えば、稼働中にHDD交換・データ移行ができる。- 作業前には必ずバックアップを取る。
これで、ディスクが増えても減っても、壊れかけても、あなたは冷静に対処できるスキルを身につけました。
LVMの基本操作はこれでほぼコンプリートです。
次回、第7回は「スナップショット機能で一瞬でバックアップを取る」です。
LVMのもう一つの強力な武器、タイムマシンのようなバックアップ機能について解説します。
OSのアップデート前に「保険」をかける技術、必見です!
▼ エンジニアとしてのキャリアを加速させる ▼
LVMを実践練習
「VPS」で環境構築
インフラ技術を仕事に
「ITエンジニア転職」


コメント