FreeBSD dump_restore - eiichiromomma/CVMLAB GitHub Wiki
FreeBSD) dump, restore
(dumpとrestoreコマンドによるバックアップとリカバリについて
HDDのバックアップ
ミラーリングデバイスもあるのだが、必要になった時点でHDDが壊れてしまっている事もあるのであまりあてに出来ない。 昔からあるdumpとrestoreによる作業を行なう。
dump
もともとはテープデバイス用のコマンドだったと思うがファイルへの出力も可能なので、外付けHDDにバックアップをとる。
usb HDDのフォーマット
FAT32だとファイルサイズの問題が生じるのでUFSにしてしまう。 sysinstallのConfigure->FDISK, LABELでやってしまうのが手っ取り早い。
環境の保存
sysinstallでnewfsした場合には勝手に指定した場所にマウントされている。 ここでは/exportにマウント。
ファイルシステムに関するファイルと情報をコピーしておく。
mkdir /export/sarvage
cp /etc/fstab /export/sarvage/
mount > /export/sarvage/mount.txt
df > /export/sarvage/df.txt
例として示すdfはこんな感じになっている。
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/ad0s1a 2025328 107590 1755712 6% /
devfs 1 1 0 100% /dev
/dev/ad0s3e 2024690 12 1862704 0% /tmp
/dev/ad0s4d 29713186 17508692 9827440 64% /usr
/dev/ad0s3d 2026030 288322 1575626 15% /var
devfs 1 1 0 100% /var/named/dev
/dev/da0s1d 28378924 6098038 20010574 23% /export
次に各スライスのディスクラベルを保存しておく。
disklabel /dev/ad0s1 > /export/sarvage/ad0s1.label
disklabel /dev/ad0s3 > /export/sarvage/ad0s3.label
disklabel /dev/ad0s4 > /export/sarvage/ad0s4.label
dumpの実行
dump 0af /export/sarvage/ad0s1a.dump /
dump 0af /export/sarvage/ad0s3e.dump /tmp
dump 0af /export/sarvage/ad0s4d.dump /usr
dump 0af /export/sarvage/ad0s3d.dump /var
USB1.1だと死ぬほど遅い。
restore
動いているサーバを止めてrestoreするのもやっかいなのでVMWareを使って行なう。 既存のFreeBSD on VMWareがあればそれを使って、無ければFreeSBIEのLiveCDを使う。 FreeSBIE - Free System Burned In Economy からLiveCDのisoファイルを拾っておく。
FreeSBIE on VMWare
isoと同じフォルダに置くFreeSBIE.vmxは以下の通り。
config.version = "8"
virtualHW.version = "3"
memsize = "256"
ide0:0.present = "FALSE"
ide1:0.present = "TRUE"
ide1:0.fileName = "FreeSBIE-1.1-i386.iso"
ide1:0.deviceType = "cdrom-image"
floppy0.present = "FALSE"
ethernet0.present = "TRUE"
ethernet0.connectionType = "nat"
usb.present = "TRUE"
sound.present = "TRUE"
sound.virtualDev = "es1371"
displayName = "FreeSBIE"
guestOS = "freebsd"
nvram = "suse.nvram"
scsi0:0.redo = ""
ethernet0.addressType = "generated"
uuid.location = "56 4d 5c fc 36 01 d2 57-21 94 24 c6 e3 7f a3 15"
ide1:0.autodetect = "TRUE"
ethernet0.generatedAddress = "00:0c:29:7f:a3:15"
ethernet0.generatedAddressOffset = "0"
checkpoint.vmState = "freesbie.vmss"
tools.remindInstall = "TRUE"
ide0:0.redo = ""
uuid.bios = "56 4d 5c fc 36 01 d2 57-21 94 24 c6 e3 7f a3 15"
起動したらキーマップと言語を適当に設定し、console起動を選ぶ。 新たにインストールするHDDをUSB箱やストレージ関連製品:これdo台ヒーロー:KD25/35FUL を使ってVMWareのマシンに接続し、認識させる。(/dev/da0)
続けてdumpを入れたHDDも接続し認識させる。(/dev/da1)
パーティションの設定
sysinstallを起動する。
sysinstall
Configure->fdiskでパーティションを切る。 サイズについては前と同じ構成が楽だが、変えたい場合には.disklabelファイルを書き換える必要がある。
次にdisklabelを書き込む。先ずda1を適当な所にマウント。
mkdir /mnt/bk
mount /dev/da0s1d /mnt/bk
cp /mnt/bk/*.disklabel /mnt/
サイズを弄ったのであれば.disklabelを書き換える。 .disklabelファイルは#がコメントなので、/dev/ad0となっているのは気にしない。 書き方についてはpochy9nのノート 参照
disklabelを書き込む。
disklabel -R -B /dev/da0s1 /tmp/ad0s1.disklabel
disklabel -R -B /dev/da0s3 /tmp/ad0s3.disklabel
disklabel -R -B /dev/da0s4 /tmp/ad0s4.disklabel
cとswap以外をnewfsする。
restore
不良セクタのデータのせいでad0s4dのrestoreがコケたので別の手段講じ中…
非常手段
面倒なのでHDDを直結してマウントし、
mount /dev/da0s1a /mnt
mount /dev/da0s3d /tmp
mount /dev/da0s3e /var
mount /dev/da0s4d /mnt/usr
cd /
cp -Rpv usr /mnt/
で/usrをコピー。
コピー中にユーザが中身を変えないようにネットは外しておいた方が良いが、時間もかかるしメール用途だけなのでそのままで作業。
最後にネットを外してvarだけdump/restoreとした。 取り敢えずHDD交換完了。 無事動作中。