Gentooのバックアップ

前置き

今年(2012年)の正月、当サーバのHDDがクラッシュしまして、1週間ほどホームページの運用が止まりました。顛末や対応についてメモっておきます。

本文

不調の兆し

最初は2011-11-22のsyslogでした。

sd 0:0:0:0: [sda] Unhandled error code
sd 0:0:0:0: [sda] Result: hostbyte=DID_OK driverbyte=DRIVER_TIMEOUT
end_request: I/O error, dev sda, sector 147996345
Buffer I/O error on device sda3, logical block 18224430
lost page write due to I/O error on sda3

こんなログを繰り返したあげく、read-onlyでリマウント。

Aborting journal on device sda4.
EXT3-fs error (device sda4) in ext3_reserve_inode_write: Journal has aborted
EXT3-fs error (device sda4) in ext3_dirty_inode: Journal has aborted
ext3_abort called.
EXT3-fs error (device sda4): ext3_journal_start_sb: Detected aborted journal
Remounting filesystem read-only

この状態で、静的なホームページは閲覧可能。wiki閲覧やブログ投稿はアウトです。他にも不穏なログを吐いていたのですが、fsckとリブートで一時的に正常化します。年末にかけて、これを数回繰り返してました。

クラッシュ

しかし、年が明けた1/3、ついに読み書きできない状態に。再起動してデータを吸い出したいところですが、コンソールからでもログインできません。telnetからならログインできるのですが、shutdownを試みるも、Input/output errorと拒否されます。そこで、あるサイトの情報を参考に、SysRQ Magic keyを試してみました。が、これが大失敗

# sysctl -w kernel.sysrq=1           # 非推奨です。
# sync                               # 非推奨です。
# echo b > /proc/sysrq-trigger       # 非推奨です。

ここで、HDDがカンカン鳴り出して終了。これなら、強制パワーオフの方が良かった気がします。

リストア

幸い、数日前に各パーティションをdumpしてあったのが救いです。dumpの手順は以下の通り(dumpのインストールは、app-arch/dumpのemergeで)。

# init 1
# mount -r -n -o remount /dev/sda4
# e2fsck -c /dev/sda4
# sync
# dump -0f - /dev/sda4 | gzip -c >/mnt/backup/sda4.gz

これに加えて、毎日、/etc、/var、/homeのデータを自動バックアップ(rsync)してあるので、クラッシュ前日の状態には戻せます。早速、ドスパラでHITACHI Travelstar HTS545025B 9A300(送料込みで6005円)を購入。gentooインストール用のUSBメモリで起動してからrestoreするつもりでしたが、インストール用のシステムにはrestoreコマンドが入ってないので断念。代わりに、Windowsノートのvmwareにインストールしたgentooに、新しいHDDをUSB経由で接続して作業しました。

まず、以下のようにfdiskしました。

デバイス ブート     始点        終点    ブロック   Id  システム
/dev/sda1   *           1           5       40131   83  Linux
/dev/sda2               6          71      530145   82  Linux スワップ / Solaris
/dev/sda3              72       19791   158400900   83  Linux
/dev/sda4           19792       30400    85216792+  83  Linux

restoreの手順は以下の通り。

# mkdir /mnt/restore
# mount -t ext3 /dev/sdb4 /mnt/restore
# cd /mnt/restore
# gzip -dc /mnt/backup/sda4.gz | restore -r -f -
  →巨大なファイルが含まれていると、restoreが失敗するらしい
  →その場合は、-Tオプションを付けて、テンポラリディレクトリを使わせる
# sync
# umount /dev/sdb4

新しいHDDのMBRにgrubを入れます。これはvmwareでは(USB接続では)失敗したので、サーバに新HDDを装着して行いました。

# mount /dev/sda4 /mnt/gentoo
# mount /dev/sda1 /mnt/gentoo/boot
# mount /dev/sda3 /mnt/gentoo/var
# chroot /mnt/gentoo /bin/bash
# grub-install --no-floppy /dev/sda
# exit
# umount -a
# reboot

無事、起動に成功。最後に、定期バックアップ(rsync)の内容を書き戻します。末尾のスラッシュに注意。

# /usr/bin/rsync -a /mnt/backup/gen0/etc/ /etc
# /usr/bin/rsync -a /mnt/backup/gen0/var/ /var
# /usr/bin/rsync -a /mnt/backup/gen0/home/ /home

現在は、日々のrsyncに加えて、月曜日の早朝にdumpしてます。

Last modified:2012/03/05 10:03:54
Keyword(s):
References:[サーバ管理・Linux関連] [GentooサーバをSSD化する]
This page is frozen.