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交換完了。 無事動作中。