ここでは 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>