Linux システムのバックアップ(dump/restore)

・バックアップ元パーティションは /dev/sdb1
・リストア先パーティションは /dev/sdc1
・バックアップしたファイルの保存場所は /mnt
・リストア先パーティションのマウント場所は /mnt2

準備

・バックアップするファイルシステムの指定

# vi /etc/fstab
バックアップしたいファイルシステムの第5フィールドに「1」のフラグを立てる.
swap や /proc などはバックアップする必要がないので「0」にしておく.

・バックアップしないファイルの除外
attribute を設定し、バックアップしないファイルを除外する.

# chattr -R +d /mnt /tmp
# lsattr /mnt /tmp

バックアップ

ファイルシステムのdump

# dump -0uf /mnt/root.dump /dev/sdb1

以下オプション
-0〜9
 バックアップレベルを指定
 0を指定するとフルバックアップ
 1以外はインクリメンタルバックアップ(/etc/dumpdatesを参照して、更新があったもののみバックアップ)
-u
 /etc/dumpdatesファイルに記録
-f
 ダンプ出力先のファイルまたはデバイスを指定

※コアダンプする場合あり。
 その場合は /etc/dumpdates ファイルを初期化する。
 # rm /etc/dumpdates; touch /etc/dumpdates

MBR のバックアップ

# dd if=/dev/sdb of=/mnt/mbr.img bs=512 count=1

リストア

・(パーティションのサイズを変更しない場合)MBRのリストア

# dd if=/mnt/mbr.img of=/dev/sdc bs=512 count=1

・(パーティションのサイズを変更する場合)パーティションテーブルの作成

# fdisk /dev/sdc

ファイルシステムの作成

# mkfs -t ext4 /dev/sdc1

・マウント

# mount /dev/sdc1 /mnt2

・リストア

# cd /mnt2
# restore -rf /mnt/root.dump 

restoresymtable が作成されるので、消しておく。
# rm  restoresymtable

・UUID の確認

# ls -l /dev/disk/by-uuid/ | grep sdb
# ls -l /dev/disk/by-uuid/ | grep sdc

・fstab の修正

# vi /mnt2/etc/fstab
:%s/[旧ディスクUUID]/[新ディスクUUID]/g
※一括変換

grub の修正

# vi /mnt2/boot/grub/grub.conf
:%s/[旧ディスクUUID]/[新ディスクUUID]/g
※一括変換

・mtab の修正

# vi /mnt2/etc/mtab
/dev/sdb1 / ext4 rw 0 0
   ↓ 修正
/dev/sdc1 / ext4 rw 0 0

・device.map の修正

# vi /mnt2/boot/grub/device.map
(hd0)     /dev/sdb
   ↓ 修正
(hd0)     /dev/sdc

grub-install 準備

# mount -t proc /proc /mnt2/proc
# mount -t sysfs /sys /mnt2/sys
# mount --bind /dev /mnt2/dev

grub-install

# chroot /mnt2

# grub-install /dev/sdc
 ※「The file /boot/grub/stage1 not read correctly.」が出力される場合、
  grub はインストールされるものの、mtab、fstab、device.map の整合性がとれていないため
  適切な stage1 ファイルを生成できていない。結果、起動に失敗する。
 ※「Installation finished. No error reported.」が出力された場合は正常に終了している。

・後処理

# exit 
 ※chrootから抜ける

# cd /
# umount /mnt2/proc
# umount /mnt2/sys
# umount /mnt2/dev
# umount /mnt2