ファイルサーバの管理
2010年11月12日更新
調べながら書いてます。 未整理のものは日記のほうにもありますよ。
filesコマンド
N out of M files used
A: B
O out of M files used
- N
- 開いているファイル数
- M
- conf.nfile
- A
- コネクションのチャネルナンバー
- whoのものと同じ
- B
- Aが開いているファイル数
- O
- Bの合計
checkコマンド
- nfiles
- 総ファイル数
- fsize
- sb->fsize
- nused
- 有効ブロック総数
- ndup
- 重複したブロック数(amark)..有効ブロック
- nfree
- フリーリスト中の総ブロック数
- tfree
- たぶん、排他ロックなファイルを開いている数
- nfdup
- 重複したブロック数(fmark)..フリーリスト
- nmiss
- fsize-fstart-nused-nfree
- nbad
- fstart..fsizeに収まらないブロックアドレス数
- nqbad
- 0..sizqbitsに収まらないqid.pathの数
- maxq
- 最大のqid.path
statw
cwstats main
filesys main
nio = 1 1 2
maddr = 3
msize = 267049
caddr = 26708
csize = 17892283
sbaddr = 423710
craddr = 423938 423938
roaddr = 423941 423941
fsize = 423943 423943 0+ 1%
slast = 423409
snext = 423942
wmax = 423941 0+ 1%
wsize = 30524356 1+ 0%
17804952 none
60 dirty
0 dump
86888 read
383 write
0 dump1
cache 1% full
statd
0.0 work = 1 1 1 xfrs
rate = 7334 9050 8725 tBps
1.14 work = 0 0 0 xfrs
rate = 0 0 88 tBps
1.15 work = 0 0 0 xfrs
rate = 0 0 48 tBps
コンソールのログを取る方法
9fansより。
You have to set up console logging yourself on a cpu server, like this:
aux/clog /mnt/consoles/fileserver /sys/log/fileserver &
where "fileserver" is the name of your file server. This assumes you've already got consolefs(4)configured, running and mounted, and that you've got the file server's serial console configured and wired up to a serial port on the cpu server doing the logging. Add this to your file server's plan9.ini:
console=0 baud=9600
It's a bit of work to set up, but very handy. Not only do you get a console log, but you can access the console from any of your Plan 9 machines with:
C fileserver
ファイルサーバ側の設定
ファイルサーバのplan9.iniに、consoleの設定を追加します。 このconsoleは0または1を設定でき、ポート0またはポート1から データを流す、という意味になります。 baudはデフォルトで9600なので省略してもいいです。
console=0
ログの受け皿も用意しておきます。
fs: create /sys/log/fileserver sys sys 666 a
ログを受け取る側の設定
まず、/lib/ndb/consoledbを編集します。
# see consolefs(4)
group=sys
uid=bootes
console=fileserver dev=/dev/eia0 openondemand=1
gid=sys
次に/cfg/$sysname/namespace。 シリアルポートを/devにbindします。 このファイルはシェルスクリプトのように見えますが、 限られたコマンドしか受け付けません。 詳細はnamespace(6)。
bind -a #t /dev
最後に、/cfg/$sysname/cpustartあたりに以下を追加。
aux/consolefs
aux/clog /mnt/consoles/fileserver /sys/log/fileserver &
トラブルシューティング
/dev/eia0等が無い
カーネルデバイス#tから見えますので、 /cfg/$sysname/namespaceあたりからbindします。
/cfg/$sysname/namespaceが実行されない
/cfg/$sysname/namespaceにbindを書いているのに /dev/eia0が見つからない場合。 環境変数sysnameが設定されていないかもしれません。
受信側のplan9.iniに、sysnameを追加します。
sysname=wisp
または、consolefsを実行する直前にbindするとか。
おそらく、namespaceの後にcpurcとなるので、 /lib/namespaceの最後にある$sysnameを使った行は plan9.iniで設定しない限り実行されないのでしょう。。 手で設定したものとndb/csの結果が 違ったらどうするのだろうというのは置いておいて。
と思ってたら、起動順について9fansで話題に上がりました。
- init
- newns
- /lib/namespace
- /cfg/$sysname/namespace(あれば)
- /rc/bin/cpurc
ここで、$sysnameは設定されていないので読みません。 では何のためにあるのかというと、ブート後、 名前空間を変更する場合に使うらしいです。 auth/noneとか、listen(8)の/rc/bin/serviceとか。 service.authのほうは、呼び出し元と同じ名前空間みたい。
データを受信しない
デバッグなどのため、ふつうのユーザで動かしている場合は、 bootesで試してみてください。 bootes以外ではなぜかうまくいかなかった記憶がやんわりと。