主なバックアッププログラムは dump(8), tar(1), cpio(1) の三つです。
伝統的な UNIX® のバックアッププログラムは
dump
と restore
です。
これらはファイルシステムによって作成されるファイル、リンク、
ディレクトリといった抽象の下位にある、
ディスクブロックの集合としてドライブを操作します。
dump
はデバイス上のファイルシステム全体をバックアップします。
ファイルシステムの一部分だけ、
または二つ以上のファイルシステムにわたるディレクトリツリーをバックアップすることはできません。
dump
はファイルおよびディレクトリをテープに書き込まずに、
ファイルおよびディレクトリを含んだ raw データブロックを書き込みます。
ルートディレクトリで dump
を使った場合、
/home
, /usr
など、他の多くのディレクトリはバックアップされません。
これらのディレクトリは通常、
他のファイルシステムへのマウントポイントであったり、
シンボリックリンクとなっているためです。
dump
には AT&T UNIX のバージョン 6
(およそ 1975 年) の初期から残っている癖があります。
デフォルトのパラメタは、現在利用可能な高密度メディア
(最大 62,182 ftpi) ではなく、9 トラックテープ (6250 bpi)
に最適な値となっています。
現在のテープドライブの容量を利用するために、
これらのデフォルト値をコマンドラインで上書きしなければなりません。
rdump
と rrestore
を用いて他のコンピュータに接続されているテープドライブにネットワーク経由でデータをバックアップすることも可能です。
どちらのプログラムもリモートのテープドライブにアクセスするために
rcmd
および ruserok
に依存しています。
したがって、バックアップを実行するユーザがリモートコンピュータの
.rhosts
ファイルに書かれていなければなりません。
rdump
および rrestore
の引数はリモートコンピュータに適切なものを用いなければなりません。
FreeBSD コンピュータから komodo
と呼ばれる Sun
に接続されている Exabyte テープへ rdump
するには以下のようにします。
#
/sbin/rdump 0dsbfu 54000 13000 126 komodo:/dev/nsa8 /dev/da0a 2>&1
注意: .rhosts
認証を許可することには、セキュリティに関する暗黙の仮定があります。
あなたの置かれている状況を注意深く調べてください。
ssh
越しに
dump
と restore
をより安全な形で使うこともできます。
dump
の利用#
/sbin/dump -0uan -f - /usr | gzip -2 | ssh1 -c blowfish \ targetuser@targetmachine.example.com dd of=/mybigfiles/dump-usr-l0.gz
または、環境変数 RSH
を設定して、
dump
の組み込み機能を利用する。
RSH
を設定した ssh 越しの dump
を利用#
RSH=/usr/bin/ssh /sbin/dump -0uan -f targetuser@targetmachine.example.com:/dev/sa0
tar(1) は AT&T UNIX の バージョン 6 (1975 年ごろ)
にまで遡ることができます。tar
はファイルシステムと協調して動作し、
ファイルとディレクトリをテープに書き込みます。tar
は cpio(1)
で使用可能なフルレンジのオプションには対応していませんが、
tar
には cpio
が使用するような奇妙なコマンドパイプラインは必要ありません。
tar
の多くの版はネットワーク経由のバックアップには対応していません。
FreeBSD が使用している GNU 版の tar
は、
rdump
と同じ構文でリモートデバイスに対応しています。
komodo
と呼ばれる Sun に接続された Exabyte
テープドライブに対して tar
を実行するには以下のようにします。
#
/usr/bin/tar cf komodo:/dev/nsa8 . 2>&1
リモートデバイスに対応していない版に対しては、パイプラインと
rsh
を使用してリモートテープドライブにデータを送ることができます。
#
tar cf - . | rsh hostname dd of=tape-device obs=20b
ネットワークを越えたバックアップのセキュリティを懸念しているなら、
rsh
の代わりに ssh
を使うべきです。
cpio(1) は本来 UNIX®
ファイルを磁気メディアで交換するためのプログラムです。
cpio
はバイトスワッピング、
多くの異なるアーカイブフォーマットの書き込みオプションがあり
(それ以外にも多数のオプションがあります)、
パイプで他のプログラムにデータを渡すこともできます。
この最後にあげた特徴が、cpio
をインストールメディアとしては優れた選択肢にしています。
cpio
はディレクトリツリーの探索の機能はなく、ファイルリストは
stdin
からの入力でなくてはなりません。
cpio
はネットワーク経由のバックアップには対応していません。
以下のようにパイプラインと rsh
を用いてリモートテープドライブにデータを送ることができます。
#
for f in directory_list; do
find $f >> backup.list
done
#
cpio -v -o --format=newc < backup.list | ssh user@host "cat > backup_device"
directory_list
はバックアップしたいディレクトリのリストで、
user
@host
はバックアップを実行したいユーザとホスト名の組であり、
backup_device
はバックアップを書き込みたいデバイスです
(たとえば /dev/nsa0
)。
pax(1) は tar
と
cpio
に対する IEEE/POSIX®
の回答です。長年の間、さまざまな版の
tar
と cpio
は互いにわずかに非互換になってきていました。
それらをしらみ潰しに標準化する代わりに、POSIX®
は新しいアーカイブユーティリティを作りました。
pax
は、いくつもの cpio
や
tar
のフォーマットの読み書きに対応しようと試みているほか、
専用に新しいフォーマットを開発しました。
コマンド群は tar
よりも
cpio
の方にいくぶん似ています。
Amanda (Advanced Maryland Network Disk Archiver) は単一のプログラムではなく、 クライアント/サーバ型のバックアップシステムです。 Amanda サーバは、 Amanda クライアントを有する ネットワークに接続されたコンピュータからデータを受け取り、 備え付けられたテープドライブにバックアップします。 いくつもの大容量ディスクを備えたサイトでの共通の問題は、 データディレクトリをテープにバックアップするのに時間がかかりすぎることです。 Amanda はこの問題を解決します。 Amanda は 「ホールディングディスク」 を使用して、 同時に複数のファイルシステムのバックアップを行うことができます。 Amanda の設定ファイルにかかれたすべてのファイルシステムのフルバックアップを特定の間隔でとるために 「アーカイブセット」 と呼ばれるテープグループを作成します。 「アーカイブセット」 には 夜間に作成されるすべてのファイルシステムの増分 (または差分) のバックアップも含まれます。 障害が起きたファイルシステムのリストアには、 最も新しいフルバックアップと増分のバックアップが必要です。
設定ファイルでは、バックアップの制御と Amanda によるネットワークトラフィック量を設定します。 Amanda は上記のバックアッププログラムのいずれかを使ってデータをテープに書き込みます。 Amanda は port または package として利用可能です。デフォルトではインストールされていません。
「何もしない」 というのはコンピュータのプログラムではありませんが、 バックアップの戦略として最も広く採用されています。 これには初期投資が必要ありません。 従わなければならないバックアップスケジュールもありません。 ただ何もしないだけです。データに何か起きたら苦笑いして耐えてください!
あなたにとって時間やデータの価値が少ないか、 あるいはまったくないのであれば 「何もしない」 のはあなたのコンピュータに最も適したバックアッププログラムでしょう。 しかし注意してください。UNIX® は便利なツールです。 6 ヶ月も使用していれば、 あなたにとって価値のあるファイルの山が出来上がっているでしょう。
「何もしない」
ことはコンピュータが同じものをもう一度作り直すことのできる
/usr/obj
やその他のディレクトリツリーについては適切なバックアップ方法です。
一例として、このハンドブックの HTML 版 または PostScript®
版を構成するファイルがあります。
これらの文書形式は SGML ファイルから作成されたものです。
HTML または PostScript® ファイルのバックアップは必要ありません。
SGML ファイルは定期的にバックアップされています。
dump(8) です。以上。
Elizabeth D. Zwicky
はここで検討したプログラムすべてについて拷問的なテストを行いました。
すべてのデータと UNIX®
ファイルシステムの状態すべてを保存するのに最適なのは、明らかに
dump
です。
Elizabeth は多種多様の特異な状態
(いくつかはあまり珍しくないものもあります)
を含むファイルシステムを作成し、
それらのファイルシステムのバックアップとリストアを行って、
それぞれのプログラムのテストを行いました。特異な状態とは、
ホールがあるファイル、ホールとヌルブロックがあるファイル、
奇妙な文字をファイル名に持つファイル、読み取り不可、
書き込み不可のファイル、デバイスファイル、
バックアップ中のファイルのサイズ変更、
バックアップ中のファイルの作成および削除、などです。
彼女は 1991 年 10 月の LISA V で結果を発表しています。
torture-testing Backup and Archive Programs
を参照してください。
発生する可能性があるどのような惨事に対しても、 備えるのに必要な手順は以下の 4 ステップだけです。
最初に、
各ディスクのディスクラベルとファイルシステムテーブル
(/etc/fstab
)、
ブートメッセージ全体をそれぞれ 2 枚ずつ印刷します
(たとえば disklabel da0 | lpr
)。
2 番目に、ブートフロッピーと fix-it フロッピー
(boot.flp
および fixit.flp
)
にそのシステムのデバイスがすべて含まれているか確認します。
最も簡単に確認する方法は、フロッピーをドライブに入れてマシンをリブートしてブートメッセージを確認することです。
あなたのシステムのデバイスのすべてが含まれ、
機能していれば 3 番目の手順に進んでください。
さもなければ、
そのシステムのすべてのディスクをマウントでき、
テープドライブにもアクセスできるカーネルを備えた
カスタムブートフロッピーを 2 枚作成する必要があります。
これらのフロッピーディスクには fdisk
,
disklabel
, newfs
,
mount
と、利用するバックアッププログラムが入っていなければなりません。
これらのプログラムはスタティックリンクされていなければなりません。
dump
を使用するのなら、このフロッピーには
restore
も含まれていなければなりません。
3 番目に、定期的にバックアップテープを作成します。 最後のバックアップの後で行われた変更は、回復できずに失われます。 バックアップテープにライトプロテクトを施してください。
4 番目に、フロッピーディスク
(boot.flp
と
fixit.flp
、
か、第 2 段階で作成した
2 枚のカスタムブートフロッピーディスクのどちらか)
およびバックアップテープのテストをします。
手順のメモを作りましょう。
このメモはブートフロッピー、印刷した紙、
バックアップテープと一緒に保存しておきます。
リストアを行うときには、
このメモがバックアップテープを壊すのを防ぐくらい取り乱しているかもしれません
(どのように?
tar xvf /dev/sa0
の代わりに、うっかり
tar cvf /dev/sa0
と入力してバックアップテープを上書きしてしまうかもしれません)。
上書きはライトプロテクトをしておけば防げますが、 何らかの原因でプロテクトがはずれているかもしれません。 ちなみに訳者の経験から言えば、 上のようなミスタイプは結構起きます。
安全性を増すために、毎回、 ブートフロッピーを作成し、 2 巻のバックアップテープを取ります。 一方を離れた場所に保管します。 離れた場所は同じ事務所の建物の地下室ではいけません。 世界貿易センタービルにあった数多くの会社は、 苦い経験によりこの教訓を得ました。離れた場所とは、 コンピュータやディスクドライブから十分な距離を取って 物理的に分離されていなければなりません。
#!/bin/sh # # create a restore floppy # # format the floppy # PATH=/bin:/sbin:/usr/sbin:/usr/bin fdformat -q fd0 if [ $? -ne 0 ] then echo "Bad floppy, please use a new one" exit 1 fi # place boot blocks on the floppy # disklabel -w -B /dev/fd0c fd1440 # # newfs the one and only partition # newfs -t 2 -u 18 -l 1 -c 40 -i 5120 -m 5 -o space /dev/fd0a # # mount the new floppy # mount /dev/fd0a /mnt # # create required directories # mkdir /mnt/dev mkdir /mnt/bin mkdir /mnt/sbin mkdir /mnt/etc mkdir /mnt/root mkdir /mnt/mnt # for the root partition mkdir /mnt/tmp mkdir /mnt/var # # populate the directories # if [ ! -x /sys/compile/MINI/kernel ] then cat << EOM The MINI kernel does not exist, please create one. Here is an example config file: # # MINI - A kernel to get FreeBSD onto a disk. # machine "i386" cpu "I486_CPU" ident MINI maxusers 5 options INET # needed for _tcp _icmpstat _ipstat # _udpstat _tcpstat _udb options FFS #Berkeley Fast File System options FAT_CURSOR #block cursor in syscons or pccons options SCSI_DELAY=15 #Be pessimistic about Joe SCSI device options NCONS=2 #1 virtual consoles options USERCONFIG #Allow user configuration with -c XXX config kernel root on da0 swap on da0 and da1 dumps on da0 device isa0 device pci0 device fdc0 at isa? port "IO_FD1" bio irq 6 drq 2 vector fdintr device fd0 at fdc0 drive 0 device ncr0 device scbus0 device sc0 at isa? port "IO_KBD" tty irq 1 vector scintr device npx0 at isa? port "IO_NPX" irq 13 vector npxintr device da0 device da1 device da2 device sa0 pseudo-device loop # required by INET pseudo-device gzip # Exec gzipped a.out's EOM exit 1 fi cp -f /sys/compile/MINI/kernel /mnt gzip -c -best /sbin/init > /mnt/sbin/init gzip -c -best /sbin/fsck > /mnt/sbin/fsck gzip -c -best /sbin/mount > /mnt/sbin/mount gzip -c -best /sbin/halt > /mnt/sbin/halt gzip -c -best /sbin/restore > /mnt/sbin/restore gzip -c -best /bin/sh > /mnt/bin/sh gzip -c -best /bin/sync > /mnt/bin/sync cp /root/.profile /mnt/root cp -f /dev/MAKEDEV /mnt/dev chmod 755 /mnt/dev/MAKEDEV chmod 500 /mnt/sbin/init chmod 555 /mnt/sbin/fsck /mnt/sbin/mount /mnt/sbin/halt chmod 555 /mnt/bin/sh /mnt/bin/sync chmod 6555 /mnt/sbin/restore # # create the devices nodes # cd /mnt/dev ./MAKEDEV std ./MAKEDEV da0 ./MAKEDEV da1 ./MAKEDEV da2 ./MAKEDEV sa0 ./MAKEDEV pty0 cd / # # create minimum file system table # cat > /mnt/etc/fstab <<EOM /dev/fd0a / ufs rw 1 1 EOM # # create minimum passwd file # cat > /mnt/etc/passwd <<EOM root:*:0:0:Charlie &:/root:/bin/sh EOM cat > /mnt/etc/master.passwd <<EOM root::0:0::0:0:Charlie &:/root:/bin/sh EOM chmod 600 /mnt/etc/master.passwd chmod 644 /mnt/etc/passwd /usr/sbin/pwd_mkdb -d/mnt/etc /mnt/etc/master.passwd # # umount the floppy and inform the user # /sbin/umount /mnt echo "The floppy has been unmounted and is now ready."
重要な問題は、ハードウェアが生き残ったかどうかです。 定期的にバックアップを取っていれば、 ソフトウェアについて心配する必要はありません。
ハードウェアに障害があれば、 コンピュータを使用する前にその部品を交換してください。
ハードウェアに問題が無ければ、フロッピーを確認してください。
カスタムブートフロッピーディスクを使用しているのであれば、
シングルユーザモードでブートして (boot:
プロンプトで -s
を入力します)、
次の段落は飛ばしてください。
boot.flp
と fixit.flp
を使用しているのであればこのまま読み進めてください。
boot.flp
フロッピーをフロッピードライブに入れて、
コンピュータを起動してください。
本来のインストールメニューが画面に表示されます。
Fixit--Repair mode with CDROM or floppy.
オプションを選択します。指示された通り
fixit.flp
をいれてください。
restore
とその他必要となるプログラムは
/mnt2/stand
にあります。
そして、ファイルシステムを一つずつ回復します。
最初のディスクのルートパーティションを mount
してみてください (たとえば mount /dev/da0a /mnt
)。
ディスクラベルが破壊されている場合は、disklabel
を用いてあらかじめ印刷して保存しておいた通りにパーティションを作り直し、ディスクラベルを作成してください。
newfs
を使用してファイルシステムを作り直します。
ルートパーティションを読み書き可能にマウントし直します
(mount -u -o rw /mnt
)。
バックアッププログラムとバックアップテープを使用して、
このファイルシステムのデータを回復します
(たとえば restore vrf /dev/sa0
)。
ファイルシステムをアンマウントします
(たとえば umount /mnt
)。
障害を受けたファイルシステムそれぞれについて繰り返してください。
システムが動き出したら、 新しいテープにデータをバックアップしてください。 どのような理由で再び事故が起きたり、データが失われるかわかりません。 これに数時間を費すことで、後々の災難から救われます。
本文書、および他の文書は https://download.freebsd.org/ftp/doc/ からダウンロードできます。
FreeBSD に関する質問がある場合には、
ドキュメント を読んだ上で
<questions@FreeBSD.org> まで (英語で) 連絡してください。
本文書に関する質問については、
<doc@FreeBSD.org> まで電子メールを (英語で) 送ってください。