CentOS6の起動ディスクのLVMを縮小して、現在より小容量のSSDに交換する。
具体的には250GB HDDを120GB SSDに交換する。
このHDDはOS起動にしか使っていない。
/homeもあるが、他のディスクをマウントしているのでスカスカ状態である。
ほかのシステムはあるが、/は50GBあれば余裕な状態。
絵でイメージするとこんな感じ。
上が元のHDD
下が新しいSSD
/homeはもっと小さくでもよく、その分/を拡張することもできる。
しかし、現状で/も余裕で足りているので、/homeを削って新SSDの120GBに収まるようにすることを目的とした。
シングルユーザーモードで起動して作業することを推奨。
sshでリモート作業する場合は一般ユーザで繋ぐとできない。
rootでsshできる環境ならrootでログインして作業を行う。
sda1 512,000KB /boot sda2 243,685,376KB LVM (/, /home, swap)
/bootはそのまま512MiB
/はそのまま50.00GiB
/homeは50GiBに縮小したい
umount /home
vg_godzilla-lvは、host名がgodzilaだから。
e2fsck -f /dev/mapper/vg_godzilla-lv_home resize2fs /dev/mapper/vg_godzilla-lv_home 50G
lvreduce -L 50G /dev/mapper/vg_godzilla-lv_home
lvdisplay /dev/mapper/vg_godzilla-lv_home
pvscan
lvscan
|/ |/home |空き |swap |
このままでは末尾にswapが作成されているので切りなおせない。
swapを/homeの直後に配置するように設定しなおし、空きが後ろにまとまるようにする必要がある。
|/ |/home |swap |空き |
こんな配置関係に。
swapを止めて、swap用LVを削除して、swap用LVを作り直して、swap用にフォーマットして、swapを有効にする。
swapoff /dev/vg_godzilla/lv_swap lvremove /dev/vg_godzilla/lv_swap lvcreate -L 4G lv_swap vg_godzilla mkswap /dev/vg_godzilla/lv_swap swapon /dev/vg_godzilla/lv_swap
pvscan
pvresize -- setphysicalvolumesize 110G /dev/sda2
/が50GB、/homeが50GB、swapが4GBなのでトータル104GB
少し多めにして110GBとした。(試行錯誤して空き0まで詰めても良い)
pvscan
私は別マシンに繋ぎなおして作業を行った。
Windows機のVMware上に構築したCentOS7にHDDをSATA-USB変換で接続
→/dev/sdcに接続された
fdisk /dev/sdc コマンド:p デバイス ブート 始点 終点 ブロック Id システム /dev/sdc1 * 2048 1026047 512000 83 Linux /dev/sdc2 1026048 488396799 243685376 8e Linux LVM
ここまでの処理で、実データはパーティションの先頭に寄せ集められている。
パーティションを一度削除して、先頭を変えずに後ろを縮める処理をする。
間違えるとデータを飛ばすので注意。
コマンド:d パーティション番号:2
コマンド:n Partition Type:p パーティション番号:2 最初セクター:(デフォルトでOKなのを確認してEnter) Last Sector:+111G(目標サイズより1GB多くしておいた)
容量を決めるときは十分な余裕をもって切ると安全です。
SSDは120GB、パーティションは512MBと110MBをターゲットにした。
つまり、指定容量はPVサイズより大きくする。
このとき、GBとGiBの違いに注意。1000倍と1024倍の違い。
コマンド:t パーティション番号:2 Hex code:8e
コマンド:p Disk /dev/sdc: 250.1 GB, 250059350016 bytes, 488397168 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O サイズ (最小 / 推奨): 4096 バイト / 4096 バイト Disk label type: dos ディスク識別子: 0x0000d3ae デバイス ブート 始点 終点 ブロック Id システム /dev/sdc1 * 2048 1026047 512000 83 Linux /dev/sdc2 1026048 233809919 116391936 8e Linux LVM
コマンド:w
dd if=/dev/sdc of=/dev/sdd bs=512 count=233809920 233809920+0 レコード入力 233809920+0 レコード出力 119710679040 バイト (120 GB) コピーされました、 7798.68 秒、 15.4 MB/秒
最小ブロックサイズ単位(512バイト)でコピーすると時間がかかる。
bs=1M、count=[233,809,920÷( (1,024×1,024) ÷512)]でやると早いと思う。