VMなどでLVM使わず適当に、
- /dev/sda1 => /boot
- /dev/sda2 => /
- /dev/sda3 => swap
と作っちゃったときに、/の容量が足りなくなってきて、VMマネージャで容量を増やした時などの作業方法。
fdiskでパーティションを一度削除し、より大きなエリアを同じ位置に設定することで、容量拡張をします。
※ちなみに作業は自己責任でお願いします。当方は作業結果の保証は、しませんので。
状況確認
# df -h
# fdisk -l /dev/sda
出力された情報を控えておく。 (特に各パーティションのシリンダ位置番号とブロック数)
Disk /dev/sda: 171.7 GB, 171798691840 bytes
255 heads, 63 sectors/track, 20886 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes
デバイス Boot Start End Blocks Id System
/dev/sda1 * 1 127 1020096 83 Linux
/dev/sda2 128 9920 78662272+ 83 Linux
/dev/sda3 9921 10442 4192965 82 Linux swap / Solaris
linux rescueで再起動
インストールCDから起動
-
CentOS5/Debian等
起動時にboot:
と表示されたらlinux rescue
と間違いなく入力する -
CentOS6等
起動時に選択メニューが現れるので、Rescue installed system
を選択する。
今回の作業ではネットワークは使用しないので、選択肢が出てきたらネットワーク無しでOK。
ディスクをマウントし作業
マウント
# fdisk /dev/sda
現在のパーティションの状況を表示
出力されたブロック数などの情報が最初に控えた物と相違無いことを確認。
p
第3パーティションと第2パーティションを削除
d 3
d 2
第2パーティションを作成
新規パーティションの開始位置(start)は、削除前に第2パーティションのものとして控えた開始位置を入力する(内容後述)。
※これを間違えると情報を失います
n p 2
第3パーティションを作成
n p 3
第3パーティションをSWAPに変更
t
82
書き込み
w
終了位置(end)の数値の算出方法(...というほど大げさなものでは無く...)
当初控えた第3パーティション(swap)の容量を、そのまま最終シリンダ位置に移動する。
よって、
-
控えたfdisk情報の第3パーティションの終了位置シリンダ番号から開始位置シリンダ番号を引く。(第3パーティションのシリンダ数)
上記サンプルでは、10442-9921=521 -
控えたfdisk情報のディスクのシリンダ数(最終シリンダ番号)から、先の第3パーティションのシリンダ数を引く。(第3パーティションの開始シリンダ番号)
上記サンプルでは、20886-521=20365 -
第3パーティションの開始シリンダ番号から1を引いた数字が第2パーティションの終了位置となる。
上記サンプルでは、20365-1=20364
つまり、
第2パーティションは
- 開始位置 128
- 終了位置 20364
第3パーティションは
- 開始位置 20365
- 終了位置 20886(最終シリンダ)
となる。
ファイルシステムのチェックと拡張
# e2fsck -f /dev/sda2
# resize2fs /dev/sda2
再起動
起動前にcdを出しておいてHDDから起動する。
reboot
作業後状況確認
# df -h
# fdisk -l /dev/sda
当初のサンプルの物が以下のようになればHappy End.
Disk /dev/sda: 171.7 GB, 171798691840 bytes
255 heads, 63 sectors/track, 20886 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes
デバイス Boot Start End Blocks Id System
/dev/sda1 * 1 127 1020096 83 Linux
/dev/sda2 128 20364 162553702+ 83 Linux
/dev/sda3 20365 20886 4192965 82 Linux swap / Solaris
おわり
たぶん問題無く/dev/sda2の容量が増えているはず。