ファイルシステムのバックアップ
2001/12/172001/06/12
2001/06/10
ここでは kfs ファイルシステムへバックアップをとる方法を解説する。
kfs ファイルシステムのバックアップ
現在 kfs を使用して運用中として、そのコピーを/n/kfs.local
に作成する例を以下に示す。(/n/kfs にはルートディスクがマウントされているものとする)
p=/sys/lib/sysconfig/proto/allproto disk/kfscmd -nlocal allow disk/mkfs -v -s /n/kfs -d /n/kfs.local $p
[注意1]: kfscmd
の実行権を持たねばならない。この権利はこのマシンのオーナーだけに与えられる。
[注意2]: ユーザが登録されていないディスクにいきなりディスクをコピーすると、登録されていないユーザのファイルのオーナーは全て none
に置き換えられるので、必ず前もってユーザを登録し、その登録を有効にする必要
がある。
[注意3]: この方法では、/n/kfs
に対して読み取り許可のないファイルのバックアップはとれない。/n/kfs
に対して読み取り許可を得るには
disk/kfscmd allow</pre>を発行する必要がある。ユーザを指定してあるいはホストオーナーだけに
allow
を発行できればよいのだが、全てのユーザに対して allow
が発行される。従って運用中のファイルシステムに対する allow
の発行は危険である。ネットワークを切断して行い最初のコピーだけに留め、このあとはユーザの責任において(他人からの読み取り不可を設定した)自分のファイルのバックアップを取らせるのがよいのであろう。
部分的なコピーを取りたい場合には
/sys/lib/sysconfig/proto/を参考にするとよい。
mkfs
は変更があったファイルのみをコピーする。オーナー情報、日時情報などは保存される。mkfs
は気のきいたバックアップツールで、UNIX にもよく似たものがあればと思うが、残念ながら見つからない。cpio
と find
の組み合わせがそれに近いが、筆者の cpio
は長いパスを処理できない。(GNU の cpio
はこの問題を解決しいる。ftp://ftp.gnu.org/gnu/cpio/cpio.tar.gz
)
リモートの kfs ファイルシステムのバックアップ
以下に認証サーバのディスクのコピーを端末のディスクに作成する方法を例に述べる。[1]. 認証サーバで
disk/kfscmd listemを実行しておく。
[2]. 端末を立ち上げる。端末のルートファイルシステムは認証サーバの kfs になっているものとする。
そのためには、認証サーバの
/lib/ndb/localに以下のようにドメイン、認証サーバ、CPUサーバのエントリを書く。
(hera は筆者の認証サーバの名称、al は端末の名称である)
dom=*.aichi-u.ac.jp # ns: name server ns=hera ip=202.250.160.71 ether=00d0b7bb5713 sys=hera dom=hera.aichi-u.ac.jp bootf=/386/9pccpudisk proto=il auth=hera ip=202.250.160.73 ether=00105a9f9404 sys=al dom=al.aichi-u.ac.jp bootf=/386/9pc proto=il auth=hera fs=hera
これらの情報は認証サーバのDHCPによってCPUサーバにブート時に伝えられる。このように CPU サーバのエントリを書いておくか(するとDHCPでCPUサーバにブートに必要なパラメータを渡せる)、あるいは明示的に CPU サーバのブートFDの中に
plan9.ini fs=... auth=...を書いておく(... は認証サーバの IP アドレスである)。
[3]. 認証サーバで
disk/kfscmd allowを実行しておく。
[4]. 端末で
al は hera のディスクを基に動いているが、
9fs heraを実行する事によって、hera のディスクの内容を純粋に
/n/hera
の中に見ることができる。( mkdir /n/hera
は前もって実行しておく)al に kfs のローカルディスクを作成しておき
/n/kfs
にマウントしておく。p=/sys/lib/sysconfig/proto/allproto disk/kfscmd allow disk/mkfs -v -s /n/hera -d /n/kfs $p rm /n/kfs.local/adm/key* rm /n/kfs.local/adm/netkey*(後で al をCPU サーバに変更する場合には認証情報は消しておこう。たとえこの情報が暗号化されていようとも)
[5]. 認証サーバで
disk/kfscmd disallowを実行しておく。
専用ファイルシステムのバックアップ
専用ファイルシステムの場合には運用を停止しない限り完全なバックアップをとれない。従って読み取り保護のかかったファイルのバックアップは保護をかけたユーザの責任にまかせる。以下に筆者が使用している backup 用のスクリプトを載せる。#!/bin/rc device=none switch($sysname){ case al device=sdC1 case ar device=sd00 case * echo 'don''t exec on this machine' exit } if(! test -f /n/9fs/adm/users) 9fs 9fs if(! test -f /n/9fs/adm/users){ echo `{date} 'cannot mount 9fs' exit } if(! test -d /dev/$device) bind -a '#S' /dev if(! test -f /srv/kfs) disk/kfs -f/dev/$device/fs if(! test -f /n/kfs/adm/users){ mount -c /srv/kfs /n/kfs } if(! test -f /n/kfs/adm/users){ echo `{date} 'cannot mount kfs' exit } disk/kfscmd allow echo `{date} start disk/mkfs -v -s /n/9fs /sys/lib/sysconfig/proto/allproto disk/kfscmd disallow disk/kfscmd sync unmount /n/kfs echo `{date} done
ここに 9fs コマンドの引数 9fs は筆者のファイルサーバの名称である。
このスクリプト(/usr/bootes/bin/rc/backup
)を毎日実行させるために、
認証サーバで
/cron/bootes/cronを作成しておき、次の行を入れる。(毎朝3時にバックアップをとる。)
0 3 * * * ar {/usr/bootes/bin/rc/backup>[2=1]} >/sys/log/backupなお ar は筆者の CPU サーバの名称である。
筆者のシステムでは、バックアップは数分で完了している。
バックアップすべきファイル
バックアップをとるファイルは実際上はもっと絞ることができる。/sys/lib/sysconfig/proto/allprotoの代わりに、以下の内容のproto ファイルを指定した方がよいであろう。
386 + cron + dist + rc + lib + sys + lp + acme + mail lib + usr + adm + wrap +</pre>