ここでは kfs ファイルシステムへバックアップをとる方法を解説する。
kfs
をサポートしていない。また Plan9 のファイルシステム cwfs も fossil もバックアップが毎日の自動的に採られ、信頼性は素晴らしい。特に cwfs。(2021)
/n/kfs.local
に作成する例を以下に示す。
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
allow
を発行できればよいのだが、全てのユーザに対して allow
が発行される。従って運用中のファイルシステムに対する allow
の発行は危険である。
部分的なコピーを取りたい場合には
/sys/lib/sysconfig/proto/
mkfs
は変更があったファイルのみをコピーする。オーナー情報、日時情報などは保存される。mkfs
は気のきいたバックアップツールで、UNIX にもよく似たものがあればと思うが、残念ながら見つからない。cpio
と find
の組み合わせがそれに近いが、筆者の cpio
は長いパスを処理できない。(GNU の cpio
はこの問題を解決しいる。ftp://ftp.gnu.org/gnu/cpio/cpio.tar.gz
)
disk/kfscmd listem
[2]. 端末を立ち上げる。端末のルートファイルシステムは認証サーバの kfs になっているものとする。
そのためには、認証サーバの
/lib/ndb/local
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=...
[3]. 認証サーバで
disk/kfscmd allow
[4]. 端末で
al は hera のディスクを基に動いているが、
9fs hera
/n/hera
の中に見ることができる。( mkdir /n/hera
は前もって実行しておく)/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*
[5]. 認証サーバで
disk/kfscmd disallow
#!/bin/rc device=none switch($sysname)<code> case al device=sdC1 case ar device=sd00 case * echo 'don''t exec on this machine' exit </code> if(! test -f /n/9fs/adm/users) 9fs 9fs if(! test -f /n/9fs/adm/users)<code> echo `<code>date</code> 'cannot mount 9fs' exit </code> 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)<code> mount -c /srv/kfs /n/kfs </code> if(! test -f /n/kfs/adm/users)<code> echo `<code>date</code> 'cannot mount kfs' exit </code> disk/kfscmd allow echo `<code>date</code> start disk/mkfs -v -s /n/9fs /sys/lib/sysconfig/proto/allproto disk/kfscmd disallow disk/kfscmd sync unmount /n/kfs echo `<code>date</code> 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>