主なバックアッププログラムは 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; dofind $f >> backup.listdone#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> まで電子メールを (英語で) 送ってください。