バックアップ&復元(dump & restore)
Posted by: admin at 1 月 29th, 2009
FreeBSD 7.1で検証した確実なバックアップ手順を公開します。特に重要視したのは以下の点です。
- バックアップは短時間でできなければならない
確実なバックアップを取るにはシングルユーザモードにする必要があり、ブランクタイムをなるべく短くする必要があるからです。 - バックアップは簡単にできなければならない
面倒な作業は継続しません。 - リストアは手順に沿っておこなえば、他人(数ヶ月後の自分も含めて)でも確実にできなければならない
この状態になればきっと理解できます。
テープへのバックアップは、時間もかかるうえに、経験上メディアの信頼性も薄く、何よりも容量の大きいHDDを毎日バックアップを取るにはテープ媒体の寿命を考えると膨大なテープが必要となり、現実的では無くなりつつあります。
過去に一度、RAID5構成のHDDが2台同時にクラッシュをした際に、バックアップは数ヶ月前のもの…という事態を引き起こしてしまった事もあり、毎日バックアップを取れるような最善の方法を考えていましたが、現在はこの方法に落ち着いています。
バックアップ (dump)
バックアップ元となるサーバは以下のような状態です。ns# df
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/ad0s1a 1012974 153114 778824 16% /
devfs 1 1 0 100% /dev
/dev/ad0s1f 2025860 9122 1854570 0% /home
/dev/ad0s1d 6090094 2420298 3182590 43% /usr
/dev/ad0s1e 1012974 34662 897276 4% /var
バックアップデータを保存するデバイスをマウントします
USBメモリーでもSCSIハードディスクでも可能ですが、今回はIDE-HDDをプライマリ-slaveに繋ぎました。接続したい機器のデバイス名をdmesgで確認します。
ns# dmesg
.....
ad0: 11264MB <VMware Virtual IDE Hard Drive 00000001> at ata0-master UDMA33
ad1: 13312MB <VMware Virtual IDE Hard Drive 00000001> at ata0-slave UDMA33
.....
ns# dmesg|more
[q]で表示が終了します。(詳しくはman more)
バックアップ先を初期化・マウントします
初めて接続した機器の場合だけ必要な作業です。2回目以降は不要です。
ns# sysinstall
ns# /stand/sysinstall
/stand/sysinstall: Command not found.
ns# which sysinstall
/usr/sbin/sysinstall
通常、/usr/sbinへパスが通っているはずなので、sysinstallだけで良いという訳です。
[Configure]を選択して[Enter]を押します。
[Fdisk]を選択して[Enter]を押します。
バックアップ先のデバイスを選択して[Enter]を押します。(今回はad1)
[c]を押して[Enter]を押します。
[165]のままで[Enter]を押します。
[w]を押します。
確認ダイアログが表示されるので[Yes]を選択して[Enter]を押します。
[None]を選択して[Enter]を押します。
[q]を押します。
[Cancel]を選択して[Enter]を押します。
[Label]を選択して[Enter]を押します。
[c]を押して[Enter]を押します。
[FS]が選択されている状態のまま[Enter]を押します。
マウント名を入力します。(今回は/backup)
自動的にディレクトリが作成されて、マウントされます。
[w]を押します。
[Yes]を選択して[Enter]を押します。
[q]を押してメニューに戻り、[Cancel]を押します。
[Exit]または[Cancel]を押します。
[Exit Install]を選択して[Enter]を押します。
dump実行
以下のパーティションをそれぞれバックアップします。Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/ad0s1a 1012974 153114 778824 16% / <=== /backup/root.dump
devfs 1 1 0 100% /dev <=== バックアップ不要
/dev/ad0s1f 2025860 9122 1854570 0% /home <=== /backup/home.dump
/dev/ad0s1d 6090094 2420298 3182590 43% /usr <=== /backup/usr.dump
/dev/ad0s1e 1012974 34662 897276 4% /var <=== /backup/var.dump
ns# dump -0uaLC 32 -f /backup/root.dump /
オプション説明
0 ダンプレベル0(フルバックアップ)同様に、他の3つも行います。(容量の多い
u ダンプが成功した後で、 /etc/dumpdates ファイルを更新します。
a メディアの終了を検知します。(テープじゃないので不要かも…)
L FreeBSD5.0から搭載されたスナップショット機能を使います。
この機能を使えば、シングルユーザモードに落とす必要がありません。
C キャッシュサイズを8~32(単位:MB)の間で指定することにより、性能が劇的に向上します。
ただし、Lオプションを付けない場合には、Cオプションも外した方が良さそうです。
(詳細はこちら)
f バックアップ出力先のファイルを指定します。
/usr
等は少し時間がかかります)ns# dump -0uaLC 32 -f /backup/var.dump /var
ns# dump -0uaLC 32 -f /backup/usr.dump /usr
ns# dump -0uaLC 32 -f /backup/home.dump /home
ns# ls -al /backup
total 2662822
drwxr-xr-x 3 root wheel 512 Jan 27 17:26 .
drwxr-xr-x 23 root wheel 512 Jan 27 17:02 ..
drwxrwxr-x 2 root operator 512 Jan 27 17:02 .snap
-rw-r--r-- 1 root wheel 9646080 Jan 27 17:26 home.dump
-rw-r--r-- 1 root wheel 155197440 Jan 27 17:16 root.dump
-rw-r--r-- 1 root wheel 2524764160 Jan 27 17:36 usr.dump
-rw-r--r-- 1 root wheel 35655680 Jan 27 17:26 var.dump
いざ!という時のために、今のうちにftpサイトから同じバージョンのlivefs.isoをダウンロードしてLiveFS CDを作成しておきましょう。
そして「FreeBSD X.X 緊急用起動ディスク」と書いて、サーバの近く(目に付く場所)に置いておきましょう。
そして「FreeBSD X.X 緊急用起動ディスク」と書いて、サーバの近く(目に付く場所)に置いておきましょう。
復元(restore)
以下のような構成で検証しました。
起動HDD ・・・・・・・・・・・・・・・・・・・・・・・・ ad0
- 新しいサーバ(要は起動ディスクにOSがインストールされていない状態のサーバ)
- 上記サーバのプライマリ-slaveにバックアップデータが入ったIDE-HDDを接続
バックアップデータが保存されているHDD ・・・・・・・・・ ad1
他に必要なもの・・・・・・・・・・・・・・・・・・・・・ LiveFS CD
LiveFS CDで起動
まず、LiveFS CDを入れてサーバを起動します。(CDから起動しない場合には落ち着いてBIOSを見直してみましょう)
日本語が得意な方は
[110 Japan]
を選択して[Enter]を押します。(
[PageUp]
7回、[↓]4回とすると早いです)
[Japanese 106 keymap]
が選択されていると思いますので、そのまま[Enter]を押します。起動HDDの初期化(スライス・パーティション作成)
[Configure]を選択して[Enter]を押します。[Fdisk]を選択して[Enter]を押します。
起動デバイスを選択して[Enter]を押します。(ここではad0)
決してバックアップデータが保存されているデバイスを指定しないでください。
[c]を押して表示された数字のまま[Enter]を押します。
[165]のままで[Enter]を押します。
[q]を押します。
[Standard]を選択して[Enter]を押します。
[Cancel]を押してメニューに戻ります。
[Label]を選択して[Enter]を押します。
[c]を押します。
ルート( / )パーティションに割り当てる容量を指定します。(ここでは1GB)
旧サーバ(バックアップ元)よりも少ないと問題が起こる可能性があります。ddとは違って多い分には問題ありません。
[FS]が選択されている状態のまま[Enter]を押します。
マウント名を入力して( / )、[Enter]を押します。
同様に、[c]を押してスワップ領域を設定します。
これは、新サーバに搭載されているメモリ容量の2倍程度が良いです。(ここでは1GB)
[Swap]を選択して[Enter]を押します。
同様に、[c]を押して
/var
に割り当てる容量を指定します。(ここでは1GB)旧サーバ(バックアップ元)よりも少ないと問題が起こる可能性があります。ddとは違って多い分には問題ありません。
[FS]が選択されている状態のまま[Enter]を押します。
マウント名を入力して(
/var
)、[Enter]を押します。同様に、[c]を押して
/usr
に割り当てる容量を指定します。(ここでは4GB)旧サーバ(バックアップ元)よりも少ないと問題が起こる可能性があります。ddとは違って多い分には問題ありません。
/home パーティション等を作成しない構成で /usr へ残り全ての容量を割り当てたい場合には、容量を指定しないで表示された数字のまま[Enter]を押します。
[FS]が選択されている状態のまま[Enter]を押します。
マウント名を入力して(
/usr
)、[Enter]を押します。同様に、[c]を押して残り容量を全て
/home
に割り当てます。表示された数字を変更しないで[Enter]を押します。
/homeパーティションが不要な場合には、この作業は不要です。
[FS]が選択されている状態のまま[Enter]を押します。
マウント名を入力して(
/home
)、[Enter]を押します。こんな感じになります。
気に入らなければ、パーティションを選択して[d]を押せば削除できるので、設定しなおしてください。
よければ[w]を押します。
確認ダイアログが表示されるので[Yes]を選択して[Enter]を押します。
[q]を押してメニューに戻り、[Cancel]を選択して[Enter]を押します。
Fixtを起動
[Fixit]を選択して[Enter]を押します。[CDROM/DVD]を選択して[Enter]を押します。
Fixit が起動します。
デバイスに先ほど作成したパーティション(ad0s1a~ad0s1f)が登録されているか確認します。
Fixit# ls /dev
先ほど作成したパーティションは
/mnt
以下に配置されています。Fixit# ls /mnt
.snap/ dev/ home/ usr/ var/
バックアップデータの入ったHDDをマウント
バックアップデータの入ったHDDをマウントするために/mntbk
というディレクトリを作成します。Fixit# mkdir /mntbk
Fixit# _
ad1s1cのcについてはこちらを参照してください。
Fixit# mount /dev/ad1s1c /mntbk
Fixit# _
restore開始
ルート( / )をrestore
Fixit# cd /mnt
Fixit# restore -rf /mntbk/root.dump
/varをrestore
Fixit# cd /mnt/var
Fixit# restore -rf /mntbk/var.dump
/usrをrestore
Fixit# cd /mnt/usr
Fixit# restore -rf /mntbk/usr.dump
/homeをrestore
Fixit# cd /mnt/home
Fixit# restore -rf /mntbk/home.dump
多くの場合、容量の大きなusr等をrestore中に以下のようなエラーが表示されます。
Fixit# cd /mnt/usr
Fixit# restore -rf /mntbk/usr.dump
/: write failed, filesystem is full
restore: /tmp//rstdir1233044785: cannot write directory database: No space left on device
Try making space in /tmp/, or set environment variable TMPDIR
to an alternate location with more disk space.
Fixit# _
その場合には、以下の方法でTMPディレクトリを変更してから再度restoreをしてください。
Fixit# mkdir /mntbk/tmp
Fixit# TMPDIR=/mntbk/tmp
Fixit# export TMPDIR
ここにTMPディレクトリを作成して、そちらを利用するという意味です。
この作業後に、何らかの必要性にせまられて/mntbk/tmpディレクトリを削除した場合、ほぼ全てのコマンドが実行できなくなってしまいます。
その場合には、以下のようにしてTMPディレクトリを元に戻します。
Fixit# TMPDIR=/tmp
Fixit# export TMPDIR
fstabの書き換え
書き換え作業が不要の場合でも、必ず確認をしましょう。パーティションの作成順序の違いにより、起動しないという事態に陥り、2日間もはまってしまいました…
現在のマウント状況を確認します。
Fixit# df
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/md0 4175 2449 1726 59% /
devfs 1 1 0 100% /dev
/dev/ad0s1a 1012974 153114 778524 16% /mnt
devfs 1 1 0 100% /mnt/dev
/mnt/dev/ad0s1f 8122034 9426 7462846 0% /mnt/home
/mnt/dev/ad0s1e 4058062 2434140 1299278 65% /mnt/usr
/mnt/dev/ad0s1d 1012974 34750 897180 4% /mnt/var
/dev/acd0 226150 226150 0 100% /dist
/dev/ad1s1c 13198878 2662822 9480146 22% /mntbk
続いてfstabを開きます。
Fixit# vi /mnt/etc/fstab
# Device Mountpoint FStype Options Dump Pass#
/dev/ad0s1b none swap sw 0 0
/dev/ad0s1a / ufs rw 1 1
/dev/ad0s1f /home ufs rw 2 2
/dev/ad0s1d /usr ufs rw 2 2
/dev/ad0s1e /var ufs rw 2 2
/dev/acd0 /cdrom cd9660 ro,noauto 0 0
下線部分の違いにお気付きでしょうか。
デバイス名「ad0s1e」と「ad0s1d」のマウント名が逆になってしまっています。
このような場合には、「/mnt/etc/fstab」をエディタで開き、修正・上書き保存してください。
以上で完了です!
LiveFS CDを抜き、再起動すれば立ち上がります。
後処理
restoreを実行すると、各パーティションのカレントディレクトリにrestoresymtableというファイルが作成されます。これは増分バックアップを復元する際に必要になるものですので、restore作業が完了したら削除しておきましょう。
ns# ls /
.cshrc boot entropy mnt sys
.profile cdrom etc proc tmp
.snap compat home rescue usr
COPYRIGHT dev lib restoresymtable var
backup disk2 libexec root
bin dist media sbin
ns# rm /restoresymtable
ns# rm /var/restoresymtable
ns# rm /usr/restoresymtable
ns# rm /home/restoresymtable
こんな時は・・・
復元したサーバを起動しようとすると以下のメッセージで長時間止まる。
Configuring syscons: keymap blanktime
以下のメッセージが出てパーティション設定ができない
Unable to find device node for /dev/ad0s1b in /dev!
The creation of filesystems will be aborted.
Fdiskメニューでは[w]は押さずに、[q]だけを押し、Label設定が終わってから、最後にLabelメニュー内で[w]を押します。
sysinstallでFdisk・Labelが失敗する
私も検証中に何度も経験しました。sysinstallでFdisk・Labelが失敗するをご参照ください。
9 Responses to “バックアップ&復元(dump & restore)”
1 月 30th, 2009 at 1:07 PM
[...] Configuring syscons: keymap blanktime という表示が出て、長い時間止まってしまうのは、次に起動されるsendmailが正常に起動できずにタイムアウトを待っているのが原因です。 DNS等、ネットワーク周辺を見直しましょう。 私の場合は、dump&restoreのテストをVMware上で行っている最中にこの問題に遭遇し、ネットワークアダプタ設定を間違えていたのが原因でしたが… [...]
1 月 15th, 2010 at 2:41 PM
大変参考になりました。ありがとうございます。
1つ教えていただけますか。
FreeBSD4.10のサーバーをバックアップ&復元しようと考えていますが、FreeBSD4.10のlivefs.isoが見つかりません。
代わりに4.10-RELEASE-i386-disc1.isoを使用したらだめなのでしょうか?。
1 月 15th, 2010 at 3:38 PM
今各国のftpサイトを見てみましたが、FreeBSD4関係はどこからもダウンロードできそうもありませんね。
fixit.flpを持っていれば、そちらでもOKです。
(フロッピー媒体のため、緊急時に使用できなくなっている可能性が高く、あまりお勧めはできませんが)
disc1ですと、fixitモードに移行できなかった記憶があります。
新しいバージョンのlivefsでも使えます。
ただしこの場合、/mnt/etc/fstabのデバイスファイル名の書き換えが必要になるかもしれません。
(確か4.xからIDEハードディスクがwd→adになっているので不要かも)
2 月 3rd, 2010 at 1:17 AM
Kenji Kawachiさん、こんな方法はどうでしょうか?
boot -sや、4.0はメニューがあったか分かりませんがシングルユーザー
モードでログインする。
コピー先をfdisk->Labelエディタで作成(これはここのサイトに詳しくありますね。)
#mount / で/のread onlyを解除
#mount /dev/ad0s1a /mnt でコピー先を/mntにマウント
#cd /mnt
#dump 0f - / | restore xf - で/を/mntにdump&restore
#cd /
#umount /mnt でコピー先をアンマウントしてデータを確定させる。
ここからはコマンドはある程度割愛
再び/mntでコピー先をマウント
fstabを修正
disklabel -B ad0s1 でブートセクタをインストール(4.0系ではいらない?)
sync;sync;haltで終了
BIOSでコピー先を起動HDDに設定
MBRをインストールするためWin98SEのフロッピー(fdiskがはいったやつ)で起動。95,98のFDでもよいと思う。fdiskが入っていれば。
fdisk /mbr でMBRをインストール
再起動するとコピー先のディスクでFreeBSDが立ち上がる
11 月 6th, 2011 at 10:49 PM
参考にさせて頂きました。ありがとうございます。
1つ質問があります。(FreeBSD7.0で実行しました)
「バックアップデータの入ったHDDをマウント」の部分で
mount /dev/ad1s1c /mntbk
を実行したところ、
/dev/ad1s1c/ : Invalid argument
となります。
これは何が原因でしょうか。
ご教授願えれば幸いです。
11 月 7th, 2011 at 12:22 AM
> noriさん
ファイルシステムが作成されていない場合や既に他の場所にマウントされている等が考えられますが、一番怪しいのは「ad0s1b」の部分です。
FreeBSD7.0という事ですので、それほど古くないサーバーだと推測しますが、ad~はIDEハードディスクです。
SATAであれば「sda~,sdb~,sdc~」、SCSIであれば「da~」、RAIDであれば「aacd~,amrd~,idad~,twed~」等となります。
一度「df」コマンド等でデバイス名をご確認ください。
11 月 7th, 2011 at 1:51 AM
素早いご返答、感謝いたします。
HDDはSATAを使っており、dfコマンドで確認するとマスタースレイブで「ad6s1c」、usb外部接続で「da0s1c」と表記されます。これら両方で「Invalid argument」となりました。
>>ファイルシステムが作成されていない場合や既に他の場所にマウントされている等が考えられます
windowsにバックアップを取ったHDDをUSB接続した際、マウントされずHDD内を確認できません。これはやはりバックアップを取ったHDDのファイルシステムが正常に作成されていないためでしょうか。
11 月 7th, 2011 at 5:57 AM
上記の件解決しました。
やはりファイルシステムがうまく作成できていなかったようです。
バックアップをとり直したところうまくいきました。
ありがとうございました。
11 月 7th, 2011 at 6:17 AM
再度バックアップが取れる状況下で良かったです。