きまぐれほげほげひろば

Linux システムバックアップリストア(ext2/ext3 dump restore)

Linuxにて、ext2/ext3ファイルシステムを使用しているときのシステムバックアップリストア方法。

(TOPICSに投稿したのを再編集して静的ページにしました)

dumpを使用してファイルシステムイメージでバックアップしているのでaclやselinuxにも対応できます。(aclやselinuxの場合は権限の箇所を適時読み替えてください)

以下の条件がそろっていることを前提とします。

ローカルディスクのマウントしている全ファイルシステム(/tmp以外)をバックアップします。

まずは、ファイルシステムのバックアップ
# sync #念のため # dump -0f - <ファイルシステムデバイス> | gzip -c > /<任意の場所>/<バックアップイメージ名>
  • ファイルシステムの数だけ繰り返してください
  • シングルユーザモードでバックアップを取得した方が吉ですが、経験上DBの書き込み等がなければ、そこまで神経質にならなくてもよいのではと思います。(書き込み中だったファイルが失われるだけ。→ログファイル等→この目的のバックアップで必要?? 各自で判断してください。)
  • オンラインでバックアップを取得してバックアップファイルを潰すことが心配なら、LVMのスナップショットを組み合わせて使用したほうがよいでしょう。LVMスナップショットについては、こちらを参照してください。
  • gzipしないほうが確実です。(でも破損することってあるの?こちらもリスクと運用・コストなどつき合わせて各自で判断してください。)
  • ”任意の場所”は外部ディスクにしてください。NFSマウントできる場所が吉
  • -b 32 オプションをつけると書き込み処理が高速化するようです。(RHEL6/CentOS6あたりから)例→# dump -b 32 -0f /nas/backup.dump /dev/vgroot/lvroot
あとで泣かないために、パーティション構造、lvm構造とかも記録しておく
# fdisk -l > /<任意の場所>/fdisk_<デバイス名>.txt # df -k > /<任意の場所>/df.txt # cat /etc/fstab > /<任意の場所>/fs.txt # pvdisplay > /<任意の場所>/lv.txt # vgdisplay > /<任意の場所>/vg.txt # lvdisplay > /<任意の場所>/vp.txt
手前味噌みたいで恐縮ですが、こちらにファイルシステムバックアップスクリプトを置いてますので、よろしければご使用ください(もちろん自己責任です)。
起動パラメータは
> linux rescue (レスキューモード)
途中でネットワークを設定するかどうか聞かれるが、その場では設定しない。「skip」を選択
同様に、ファイルシステムを/mnt/sysiamge以下にマウントするか?を聞かれるが、マウントしない。「skip」を選択
ネットワークを手動で有効化する
# ifconfig eth0 192.168.1.xxx netmask 255.255.255.0
ディスクのvgが有効化されていないので有効化する
# lvm vgchagne -ay
ディスクのパーティションを定義
# fdisk
  • /bootになるパーティションにはブートフラグを立てる。
  • lvm領域はタイプを8e(LinuxLVM)にする
LVMを定義
# lvm pvcreate <デバイス> # lvm vgcreate <vg名> <pvデバイスファイル> # lvm lvcreate --size <lv容量> --name <lv名> <VG名>
  • vg名は以前のvg名とあわせる(vmlinuzの中に記録されている??)
  • エクステントサイズを決めるときのvgcreateのオプションは-s サイズ、エクステント数を指定するlvcreateのオプションは-l 個数
ファイルシステム作成
# mke2fs -j <ファイルシステムデバイス>
  • ラベルが設定されていた場合ラベルも設定する # e2label /dev/sda1 boot
スワップ領域作成
# mkswap <ファイルシステムデバイス>
※完全にリストアが完了するまでに中断(電源落とす)して再開した場合、vgが有効化されていないので有効化する
# lvm vgchagne -ay
/backup 以下にバックアップイメージを置いたNFS領域をマウント
# mkdir /backup # mount -t nfs -o rsize=8192,wsize=8192,intr <NFSサーバーエクスポートディレクトリ> /backup
大抵のディストリビューションのrescueモードはnfsマウントしかできないはず・・・ (家庭用NASでsmbfs(cifs)のみのものがあるので注意!)
”復旧させるファイルシステムのルートディレクトリ”に移動して、リストアする。
一番最初に、復旧させる/にマウントするファイルシステムを、/restoreにマウントしリストアする。その後、復旧させる/bootなどにマウントするファイルシステムを、/restore以下に、/をリストアことによって復活しているマウントポイントに順にマウントしてリストアする。
/tmpになるファイルシステムはリストアしないが、restoreコマンドで使用する(下記参照)ので/restore/tmpなどにマウントすると吉。
# mkdir /restore # mount -t ext3 <ファイルシステムデバイス> /restore/<従来のマウントポイント> # cd /restore/<従来のマウントポイント> # gzip -dc /backup/<バックアップイメージ> | restore -r -T <大容量ファイルが格納できるディレクトリ> -f - # sync
(mountから繰り返し)
  • mountするときは、ファイルシステムタイプを必ず指定すること。rescueモードでは自動的にファイルシステムタイプを認識しない。(よって、 ext3でもタイプを指定しなければext2でマウントされてしまう → バックアップイメージが2G超だとrestoreがフリーズする)
  • restore時に-Tオプションで大容量ファイルが格納できるディレクトリを指定する。1ファイルをバックアップイメージから抜き出すときに使用するため。この領域がなければrestoreは失敗する(restoreがデフォルトで使用するrescueモードの/tmpは小さい)。復旧予定のディスクの /tmpになるファイルシステムをマウントして、そのディレクトリを指定しておけば良い。
  • mountコマンドで、nouser_xattrオプションで拡張属性(lsattrコマンドで見れるやつ)を無効にできる。CentOS5では拡張属性を持っているファイルがあり、無効にしておかないとrestoreでエラーになるがあまり気にしなくてもよいかも。
  • restore終了後に必ずsyncコマンドを実行してファイルキャッシュ内のファイルを書き出してください。さもないと、再起動時に「ファイルがない」など怒られてカーネルパニックになり原因不明(これに嵌る時は解ってないからね・・・)の泣きをみます。
マウントの情報やらネットワークの情報を必要に応じて変更する。
# vi /etc/fstab # vi /etc/sysconfig/network-scripts/ifcfg-eth0 # vi /etc/sysconfig/network # vi /etc/resolv.conf
など・・・

grubをMBRにインストール

chrootしてリストア先のgrubコマンドを直接実行できるようにする。
KNOPPIXなどリストアするOSと違うディストリビューションの LiveCDを使用いる場合に有効。
この場合chroot後/devにブロックデバイスファイルは当然存在しないので作成してあげディスクにアクセスできるようにする。

# chroot /restore # MAKEDEV hda # SATAの場合はsda # /usr/sbin/grub grub> root (hd0,0) ※/bootのパーティションが/dev/hda1の場合 grub> setup (hd0) grub> quit # exit # chrootモードを抜ける
など・・・
インストールCDをドライブから抜いて再起動。
# sync;sync;sync #←石橋を叩きたい数だけ(笑) # exit
rescueモードのシェルが終了して自動的に再起動する(CentOSの場合)
ハードウェアを交換した場合は再起動中のkudzuで質問に答えてハードウェア情報を更新しておくこと。
あと/tmpのファイルシステムを作り直したとき、パーミッションが初期状態になっているので、あるべき形に直すこと。
# chmod 1777 /tmp
以上。
戻る