 
 
ファイルシステムのバックアップ
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>