CentOS/LVMの起動中ディスクをSSDに複製し交換する

提供:maruko2 Note.
移動: 案内, 検索

目次


LVM migration to small disk.svg

LVMのボリュームを含む起動中の HDD 全データを、HDD より容量の小さな SSD に複製し、SSD から起動させるようにする手順。

複製先の SSD だけでも起動できるよう、ブートローダの設定も行う。

Acronis を使うと簡単にディスクの複製をすることができるが、Acronis は LVM ボリュームをセクター単位で複製するため、使用領域のみ複製することができない。 例えば、200GB の LVM ボリュームのうち 10GB しか使っていなくても、Acronis だと 200GB コピーしてしまう。

大まかな手順

元ディスクには変更を加えずに作業する。

  1. 新ディスクにパーティションを作成。
  2. 新ディスクをフォーマット。
  3. 新ディスクをマウントし、rsync で複製。
  4. 新ディスクにブートローダをインストール。
  5. 新ディスクの fstab, grub.conf を修正。

パーティション作成

元ディスク(HDD)は 250 GB あり、下記のようにパーティションが作成されている。

Disk /dev/sda: 250.1 GB, 250059350016 bytes
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          64      512000   83  Linux
/dev/sda2              64       30402   243685376   8e  Linux LVM

元ディスク(HDD)の使用状況から、複製先の新ディスク(SSD)を下記のようにパーティションを切る。

Disk /dev/sdb: 32.0 GB, 32000000000 bytes
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         262     2104483+  82  Linux スワップ / Solaris
/dev/sdb2             263        3890    29141910   83  Linux

フォーマット(ファイルシステム作成)

/dev/sdb1 は swap として利用するため、mkswap コマンドで swap 用にフォーマットする。 作成時に表示される UUID をメモしておく。

[shell]# mkswap /dev/sdb1
スワップ空間バージョン1を設定します、サイズ = 2104476 KiB
ラベルはありません, UUID=74362c7b-7a23-4549-8c7f-577f9e795853

/dev/sdb2 に ext4 ファイルシステムを作成する。このパーティションをルート / として使用する。

[shell]# mkfs -t ext4 /dev/sdb2

/dev/sdb2 の UUID をメモしておく。

[shell]# tune2fs -l /dev/sdb2 | grep UUID
Filesystem UUID:          cce688dc-4d43-4ca7-8771-b2768213a2c5

マウントして rsync で複製する

/dev/sdb2 をルートにするので、/dev/sdb2 をマウントし、全データを rsync でコピーする。

/dev/sdb2 を /mnt にマウントする。

[shell]# mount /dev/sdb2 /mnt

rsync で、全データを /mnt に複製する。

[shell]# rsync -aHx / /mnt
[shell]# rsync -aHx /home /mnt
[shell]# rsync -aHx /boot /mnt

rsync を実行するときは、なるべく他のサービスを停止しておく。特にデータベースサーバは停止しておいたほうが良い。

ブートローダーのインストール

GRUB シェル起動を起動し、ブートローダーを /dev/sdb にインストールする。一連の複製作業が完了すると、/dev/sdb は /dev/sda として起動ディスクになるので、GRUB で指定するディスク番号に注意する。

GRUB シェルを起動する。

[shell]# grub
grub> device (hd0) /dev/sdb
device (hd0) /dev/sdb
grub> root (hd0,1)
root (hd0,1)
 Filesystem type is ext2fs, partition type 0x83
grub> setup (hd0)
setup (hd0)
 Checking if "/boot/grub/stage1" exists... yes
 Checking if "/boot/grub/stage2" exists... yes
 Checking if "/boot/grub/e2fs_stage1_5" exists... yes
 Running "embed /boot/grub/e2fs_stage1_5 (hd0)"...  26 sectors are embedded.
succeeded
 Running "install /boot/grub/stage1 (hd0) (hd0)1+26 p (hd0,1)/boot/grub/stage2 /boot/grub/grub.conf"... succeeded
Done.
grub> quit
quit

    GRUB は 1 からではなく 0 からカウントする。

  1. device (hd0) /dev/sdb
  2. GRUB シェルでの操作中、(hd0) を /dev/sdb として扱うようにする。

    device で指定しないと、(hd0) を /dev/sda として処理してしまう。関連付けは、/boot/grub/device.map に書かれている。

  3. root (hd0,1)
  4. ブートパーティションを指定する。ブートパーティションとは /boot ディレクトリの存在するパーティション。

    /dev/sdb の 1 番目のパーティションを swap、2 番目を / としたため、2 番目のパーティションに /boot ディレクトリが存在する。つまり、ブートパーティションは、1 番目のディスクの 2 番目のパーティションになるため、root (hd0,1) と指定することになる。

  5. setup (hd0)
  6. (hd0) の MBR (マスターブートレコード) にブートローダーをインストールする。

  7. quit
  8. GRUB シェルを終了する。

fstab, grub.conf の修正

複製先の fstab と grub.conf を修正する。

fstab の修正ポイント

[shell]# vi /mnt/etc/fstab

デバイス名ではなく UUID か LABEL で指定することで、ディスクの入れ替えによるトラブルを防ぐことができる。

fstab の記述例

UUID=cce688dc-4d43-4ca7-8771-b2768213a2c5 /    ext4 defaults 1 1
UUID=74362c7b-7a23-4549-8c7f-577f9e795853 swap swap defaults 0 0

grub.conf の修正ポイント

[shell]# vi /mnt/boot/grub/grub.conf

元ディスク /boot/grub/grub.conf

splashimage=(hd0,0)/grub/splash.xpm.gz
root (hd0,0)
kernel /vmlinuz-2.6.32-71.el6.i686 ro \
	root=/dev/mapper/vg_sl6-lv_root \
	rd_LVM_LV=vg_sl6/lv_root \
	rd_LVM_LV=vg_sl6/lv_swap \
	rd_NO_LUKS \
	rd_NO_MD \
	rd_NO_DM \
	LANG=ja_JP.UTF-8 \
	KEYBOARDTYPE=pc \
	KEYTABLE=jp106 \
	crashkernel=auto rhgb quiet
initrd /initramfs-2.6.32-71.el6.i686.img

複製先ディスク /mnt/boot/grub/grub.conf

splashimage=(hd0,1)/boot/grub/splash.xpm.gz
root (hd0,1)
kernel /boot/vmlinuz-2.6.32-71.el6.i686 ro \
	root=UUID=cce688dc-4d43-4ca7-8771-b2768213a2c5 \
	rd_NO_LUKS \
	rd_NO_MD \
	rd_NO_DM \
	rd_NO_LVM \
	LANG=ja_JP.UTF-8 \
	KEYBOARDTYPE=pc \
	KEYTABLE=jp106 \
	crashkernel=auto rhgb quiet
initrd /boot/initramfs-2.6.32-71.el6.i686.img

トラブルシュート

SELinux が有効になっていると、正常に起動できない

SELinux を無効にするか、SELinux のラベルを再設定(再作成)することで正常に起動できるようになる。

複製先ディスクから起動する前に下記のいずれかの対処をするか、複製先ディスクから起動している場合は、シングルユーザーモードで起動し下記のいずれかの対処をすればよい。

対処法 1

/etc/sysconfig/selinix を編集し、SELinux を disable にする。詳しくは、『SELinuxの動作モードを変更する』を参照。

対処法 2

ルートディレクトリに 空のファイル .autorelabel を作成し再起動することで、再起動時に SELinux のラベルが再設定される。

touch /.autorelabel

対処法 3

起動時の GRUB のカーネルパラメーターで selinux=0 を追記し、SELinux を無効にする。

脚注

  1. man dracut
LINEで送る このエントリーをはてなブックマークに追加
個人用ツール
名前空間
変種
表示
操作
案内
ツールボックス

注目のページ

このサイトのはてなブックマーク数