LVM のサイズをオンラインのまま変更する。
最近のメジャーな Linux ディストリビューションでは標準で LVM が利用可能となっている。この LVM のオンラインリサイズを利用すると、システムの停止無しにファイルシステムのサイズを変更できる。これは非常に便利なのでやり方をまとめておく。
ここでは Debian Squeeze を利用しファイルシステムには ext3 を利用しているものとする。なお Ubuntu や RHEL 等のディストリビューションで ext4 等を利用している場合も同様である。ユースケースとして /home に多めに割り当てていたサイズを縮小し /usr や /var 等に配分する方法を想定する。
ファイルシステムのサイズ縮小
LVM のパーティションをアンマウントして、まずファイルシステム領域を縮小する。ext3/4 の場合は resize2fs で縮小できる。ここでは仮に 283GB の /home から 10GB 縮小するものと仮定する。
df -T -h umount /dev/mapper/hostname-home e2fsck -f /dev/mapper/hostname-home resize2fs /dev/mapper/hostname-home 273G
mount -a でマウントしなおして df -T -h で確認すると領域が 10GB 減少しているのがわかる。
LVM のオンラインリサイズ
次に LV を縮小する。 lvdisplay であらかじめ現在の LV の状態を確認したあと lvresize -L で領域を 10GB 縮小する。
lvresize -L -10G /dev/mapper/hostname-home
ファイルシステムのサイズより小さい値まで LV を縮小してしまうとシステムの破壊につながるので気をつける。特にオプションの指定ミスはやりがちなので注意する。LV の縮小に成功すると VG 全体に空き領域が生まれるはずなので vgdisplay で確認する。今度はこれを各パーティションに割り振るため LV を拡大する。
lvresize -L +5G /dev/mapper/hostname-usr lvresize -L +1G /dev/mapper/hostname-root lvresize -L +3G /dev/mapper/hostname-var lvresize -L +1G /dev/mapper/hostname-tmp
ファイルシステムのサイズ拡大
あとは引数無しで resize2fs を実行し LV で割り当てられた上限サイズまでファイルシステムを拡張すれば良い。
resize2fs /dev/mapper/hostname-usr resize2fs /dev/mapper/hostname-root resize2fs /dev/mapper/hostname-var resize2fs /dev/mapper/hostname-tmp resize2fs /dev/mapper/hostname-home
Debian の標準のインストーラーで LVM のパーティーションを構築すると /home 以外のサイズはかなりストイックに設定されるが、オンラインリサイズすればいつでも補充できるので心配する必要は無い。
ちなみにこの記事は以前に書いた記事のサルベージである。