トップページunix
982コメント306KB

【NFS】Network File System

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。2006/03/28(火) 11:42:41
nfsに関する話題を扱うスレ
0732名無しさん@お腹いっぱい。2009/06/14(日) 18:53:05
>>夫婦2人で
ステートフルよりハートフル
0733名無しさん@お腹いっぱい。2009/06/14(日) 19:24:18
俺は今年もハートレス
0734名無しさん@お腹いっぱい。2009/06/15(月) 14:36:49
>>731
でかいファイルのコピーに限れば、
sambaの方が速いケースもあります。
0735名無しさん@お腹いっぱい。2009/06/23(火) 05:17:58
ポートの制御がしやすいからNFSv4のほうが好きだな。
男らしく / ごと export してるぜ。
0736名無しさん@お腹いっぱい。2009/06/23(火) 08:06:16
男らしくっつーかNFSv4のダメなところをしかたなくそれで対処してるじゃん
0737名無しさん@お腹いっぱい。2009/06/23(火) 19:02:33
ファイル転送ならば無理にmountしなくても
ftpかsftp でいいんじゃないかと思うのですが...スレチごめん
0738名無しさん@お腹いっぱい。2009/06/24(水) 21:21:38
任意のタイミングで意図的にgetattrさせたいのですが良い仕組みはないでしょうか?
できればシェルスクリプトとかPerlで出来ると嬉しいのですが・・・・・
0739名無しさん@お腹いっぱい。2009/06/24(水) 23:07:43
つ stat(2)
0740名無しさん@お腹いっぱい。2009/07/10(金) 10:22:18
NFS サーバ側からのコマンドか何かで、どれだけの NFS クライアントが現在
マウント中かを見ることってできますか?サーバは Linux です。
0741名無しさん@お腹いっぱい。2009/07/10(金) 10:58:15
showmount
0742名無しさん@お腹いっぱい。2009/07/10(金) 11:02:45
クライアントが落ちたりしてもそのままだし当てにならんよ
0743名無しさん@お腹いっぱい。2009/07/10(金) 11:05:16
>>741
「現在」マウント中かを見ること

showmountでは、「過去」のmountまですべて表示される。質問欲嫁。
0744名無しさん@お腹いっぱい。2009/07/14(火) 22:23:36
>>743
> すべて表示
「すべて」は表示されんよ。mountしてからちゃんとumountしてみ。
0745名無しさん@お腹いっぱい。2009/07/14(火) 22:29:04
>>744
umountしても shoumountには表示される。当然何度も試した。常識。

それがステートレスというもの。サーバー側にはmount中かどうかは原理的にわからない。
0746名無しさん@お腹いっぱい。2009/07/14(火) 22:35:24
俺も試してから言ってるんよ
0747名無しさん@お腹いっぱい。2009/07/14(火) 22:43:34
ちなみに、RFC 1094 の A. あたりに、
mount/umountに関連したプロトコルは定義されてるから、
それをちゃんと実装してあれば、不確実かもしれないけどマウント状態は把握可能。
0748名無しさん@お腹いっぱい。2009/07/14(火) 22:45:14
umount の時点で UMNT procedure を発行する OS を見たことがない。
もし存在するなら、その OS を教えて欲しい。
0749名無しさん@お腹いっぱい。2009/07/14(火) 23:11:52
あぁ、FreeBSDはてっきりnfsレベルでやってるのかと思ってた。
調べたらumountが直接RPCMNT_UMOUNTを送ってて、
mountdがmounttabから消してるわ。

ともかく、umountすればshowmountから消える実装はあるってことで。
0750名無しさん@お腹いっぱい。2009/07/15(水) 00:05:26
>>745
> umountしても shoumountには表示される。当然何度も試した。常識。
> それがステートレスというもの。サーバー側にはmount中かどうかは原理的にわからない。

どれだけ理解が出鱈目なんだよ、お前は。
0751名無しさん@お腹いっぱい。2009/07/15(水) 14:00:56
>>749
umountシステムコールのレベルじゃやってないよね。
0752名無しさん@お腹いっぱい。2009/07/15(水) 14:59:08
スレのレベルに恐れおののきながらNFSを初めて使った者が質問します。

サーバ側 Mac XServe、クライアント側 Linuxなのですが、
サーバ(XServe)を再起動などして接続が一旦切れてしまった後、
クライアントが自動的に再度正常にマウントしてくれず↓のような状態になります。

# df /XServe
ファイルシステム サイズ 使用 残り 使用% マウント位置
192.168.11.3:/Volumes/export
- - - - /XServe

もちろん正常な場合にはサイズ、使用容量などの数字が表示されるのですが。
この状態のとき
○ ls するとマウントポイントも見えなくなっている
○ 手動で umount → mount をやると正常に使えるようになる
○ コンソールや/var/log 以下にエラーメッセージは一切出ていない
という状況です。
マウントオプションは rw,hard,intr が指定されており、
もちろんfstabの指定でクライアント側の起動時にも正常にマウント & 読み書きできています。

サーバ復帰後、自動的に再度マウントさせるにはどうすればよいのでしょう?
0753名無しさん@お腹いっぱい。2009/07/15(水) 15:01:00
あ、dfの表示が崩れてしまった。

要するに全項目「-」の表示になっていて
マウントポイントは /XServe です。

失礼しました。
0754名無しさん@お腹いっぱい。2009/07/15(水) 22:48:43
>>752
とりあえずOSのバージョン位は書こうや
0755名無しさん@お腹いっぱい。2009/07/15(水) 22:51:34
>>754
バージョン書いてもキミには答えられない
0756名無しさん@お腹いっぱい。2009/07/15(水) 23:06:12
>>752
autofs使えば?
0757名無しさん@お腹いっぱい。2009/07/16(木) 01:49:32
>>752
少なくともサーバ/クライアントの片側くらいは、
まともな実装にした方がいいと思われ
0758名無しさん@お腹いっぱい。2009/09/12(土) 12:44:52
FreeBSDでは、touch -h コマンドなどで symlink自体のタイムスタンプを
任意の時刻に変更できますが、SolarisやLinuxでは出来ません。

ところが、SolarisまたはLinuxをNFSサーバーとして、
それをFreeBSD(NFS client)に mountして、
FreeBSD上で touch -h を実行すると、
Solaris(またはLinux)のファイルシステム上の symlinkのタイムスタンプを
変更できるのです。

これはどういうことでしょうか?
OSの仕様上、Solaris(またはLinux)ではsymlinkのタイムスタンプを
変更する手段がないのかと思ったらそうではなく、
NFSを通せば変更できるとは。

ちなみに、Solaris(またはLinux)には lutimes()がないので、
システムコールではsymlinkのタイムスタンプを変更できません。
システムコールになくても、NFSを通すと可能になるって、
一体どういう仕組みでしょうか?

あと、Solaris(またはLinux)上で直接symlinkのタイムスタンプを変更するような
NFSの命令(?)を発行するにはどうすればいいですか?
0759名無しさん@お腹いっぱい。2009/09/12(土) 15:05:37
>これはどういうことでしょうか?
そういうことです。
0760名無しさん@お腹いっぱい。2009/09/12(土) 15:10:44
すみませんが詳しい方のみ回答をお願いします
0761名無しさん@お腹いっぱい。2009/09/12(土) 15:11:24
futimes(2)はないの?
新しいLinuxならlutimes(3)はある。
0762名無しさん@お腹いっぱい。2009/09/12(土) 15:14:47
>>761
futimes()はあるけど、これはシンボリックリンク自体を変更できないよ。
(lutimes()がないOSでもNFS経由でシンボリックリンクの時刻変更ができてしまう)

たぶん、システムコールは使ってなくて、
NFSサーバー専用の何らかのコールが存在してると踏んでいるんだけど。
0763名無しさん@お腹いっぱい。2009/09/12(土) 15:16:44
>>761
futimes()はあるけど、シンボリックリンクそのもののファイルディスクリプタを
取得できないから、futimes()ではタイムスタンプ更新できない。

(symlinkをopen()すると、リンク先のファイルが開く)
0764名無しさん@お腹いっぱい。2009/09/12(土) 15:19:52
>>762
utimensat(2) つかってんじゃねーの。
AT_SYMLINK_NOFOLLOWを指定して。
*at(2)系の必要性についてはPOSIXの解説でも読んで。
0765名無しさん@お腹いっぱい。2009/09/12(土) 15:26:19
>>764
それも考えたけど、
(f)utimensat(2) を使っても symlinkのタイムスタンプは変更できないんだよ。

*at(2)系の必要性は(知ってるけど)今の問題には関係ないので置いといて。
0766名無しさん@お腹いっぱい。2009/09/12(土) 15:35:36
AT_SYMLINK_NOFOLLOW
If pathname specifies a symbolic link, then update the times-
tamps of the link, rather than the file to which it refers.
だけど?
0767名無しさん@お腹いっぱい。2009/09/12(土) 15:59:21
>>766
AT_SYMLINK_NOFOLLOW に対応していないOSでも NFS経由でタイムスタンプ更新できる。

AT_SYMLINK_NOFOLLOWは、fcntl.hの中で定義はされてるけど、
実際には機能しない。そのOSでも NFS経由でタイムスタンプ更新できる。
0768名無しさん@お腹いっぱい。2009/09/12(土) 16:09:59
>>767
File systemごとに動作が違うだけでしょ。
0769名無しさん@お腹いっぱい。2009/09/12(土) 16:13:04
>>768
そういう問題じゃないんだよ。ちょっと黙っててくれるかな。
0770名無しさん@お腹いっぱい。2009/09/12(土) 17:04:43
ユーザにAPI提供してなくてもカーネルがNFSリクエスト見てやればできる。
0771名無しさん@お腹いっぱい。2009/09/12(土) 17:07:53
>>770
ですよね。

で、そのNFSリクエストを具体的に知りたいんですが。
symlinkのタイムスタンプを変更するNFSリクエストを。
0772名無しさん@お腹いっぱい。2009/09/12(土) 17:16:34
symlinkに対してSETATTR発行するだけですが。
0773名無しさん@お腹いっぱい。2009/09/12(土) 17:26:59
>>772
ありがとうございます。
で、SETATTRを要求されたNFSサーバー側の rpc.nfsdは、
どうやってそれをカーネルに伝えていますか?
バックドアみたいなのがあるのでしょうか?
0774名無しさん@お腹いっぱい。2009/09/12(土) 18:51:08
rpc.nfsdはプロセスコンテキストを提供するだけのスタブ。
環境を整えたらnfssvc(2)を呼ぶだけ。nfssvcは永久にリターンしない。
nfssvcは以降、カーネル内で全ての処理を行う。カーネル内なのでシステムコール
より粒度が小さいAPIを使用できる。
0775名無しさん@お腹いっぱい。2009/09/12(土) 19:01:09
>>774
すると、NFSを使わずに、普通のユーザープログラムから
nfssvc(2)を呼び出せば、symlinkのタイムスタンプが変更できるのでしょうか。

symlinkのタイムスタンプ変更の際に、
nfssvc()に渡す具体的な引数ってわかりますか?

あと、nfssvcはLinuxの場合ですが、Solarisだとどうですか?
0776名無しさん@お腹いっぱい。2009/09/12(土) 19:15:55
>>775
いや、nfssvcはFreeBSDの場合だ。
0777名無しさん@お腹いっぱい。2009/09/12(土) 19:30:14
>>775
nfssvcはカーネル内でクライアントからのSETATTRを受け取りタイムスタンプをセットして
結果を返す。
普通のプログラムから(正しい手順で)呼び出してもrpc.nfsd相当のプロセスが産まれるだけ。

>>776
現在は知らないけど、linuxも何年か前はnfssvcだったよ。
0778名無しさん@お腹いっぱい。2009/09/12(土) 19:40:37
nfssvcを呼び出すのではなく、
ユーザープログラムから直接SETATTRを発行するのが良いと思ってきました。
つまり、NFSマウントせずに、直接NFSファイルハンドルを取得して、
直接SETATTRを発行するようなユーザープログラムを作って、
symlinkのタイムスタンプを更新するのです。
これが可能なら、lutimes()がないOSでも、NFS exportしているファイルに限っては
自力でsymlinkのタイムスタンプを更新出来るようになると思いますが、
この理解で合ってますか?

また、そのようなプログラムって、どこかにすでに存在してたりしませんか?
つまり、NFSマウントせずに、ftpクライアントまたはsmbclientみたいなコマンド方式で
SETATTRとかを直接、インタラクティブに実行できるのが理想です。
0779名無しさん@お腹いっぱい。2009/09/12(土) 19:46:52
>>778
前半、正しい。
後半、知らない。
0780名無しさん@お腹いっぱい。2009/09/13(日) 13:16:34
>>777
> 現在は知らないけど、linuxも何年か前はnfssvcだったよ。
少なくとも2.6以降は基本的に/proc/fs/nfsd/*を使う。
システムコールならnfsservctl(2)。
0781名無しさん@お腹いっぱい。2009/09/29(火) 05:03:57
外部ネットワークに公開しているWEBサーバA(多数)があります。
NFSサーバBをAとLAN接続し、
Aで /usr をBからリードオンリー、root_squash で
マウントし、仮に Aがクラックを受けても、
/usr 内を改ざんされないようにできないかなと考えているのですが、
こういった方法は可能でしょうか?
また、効果自体見込める方法でしょうか?

この方法に限らず、
/usr 内のデータとその他随時変更を行うようなデータを分断し、
運用管理面、セキュリティ面、
両方でメリットのあるような設定事例ってないでしょうか?

ご助言お願いします。
0782名無しさん@お腹いっぱい。2009/09/29(火) 06:39:19
>>781
/usrをroot_squashでmountすると、
/usr/binなどにある set-UID rootのプログラムが正常動作しなくなるから、
その方法は不可。

/usrをリードオンリーでmountするのはOK。よくある一般的な方法。
0783名無しさん@お腹いっぱい。2009/10/04(日) 10:43:30
Coda に乗り換えようと思うのだが。
0784名無しさん@お腹いっぱい。2009/10/12(月) 03:28:38
>>783
なぜ?
0785名無しさん@お腹いっぱい。2009/10/15(木) 13:41:18
あんなろくにメインテナンスもされてない実装に?
0786名無しさん@お腹いっぱい。2009/10/30(金) 09:57:13
NFS サーバー : NetBSD 5.0
NFS クライアント: Debian lenny

このような環境で、NFSを運用したいのですが、asyncにすることは
できますか?
クライアント側で、 mount -t nfs -o async ... と書いても、
書かないときとパフォーマンスに変化が見られません。
サーバー側に設定が必要かとも思いましたが、どのように書くのか
見つけられませんでした。

よろしくおねがいします。
0787名無しさん@お腹いっぱい。2009/10/30(金) 14:35:23
サーバで、async するように設定しないとだめぽ。
BSDの書式なら、/etc/exports に

/exports/dir -network 127.0.0.1 -async

みたいに書けばいいんじゃまいか?
0788名無しさん@お腹いっぱい。2009/10/30(金) 21:50:44
786です
exports(5) を読んでも書いてなく、787さんのように書いてみたらmountdに怒られました。
vfs.nfs.iothreads=4 を試してみたのですが、変わらなかったです。残念。
0789名無しさん@お腹いっぱい。2009/10/30(金) 23:41:12
/etc/exports を晒か、エラーメッセージくらい書けよ。
0790名無しさん@お腹いっぱい。2009/10/30(金) 23:48:47
そうじゃなくて、NFS鯖の /etc/fstabに asyncオプションを付けるべきじゃないのか?

/etc/exportsとか言ってる回答者は無視が吉。
0791名無しさん@お腹いっぱい。2009/10/31(土) 00:10:14
そもそも論なんだが、
asyncはやめておけ。
0792名無しさん@お腹いっぱい。2009/10/31(土) 08:28:43
そもそも論だけど NFS で async もへったくれもあるかい…

って思うのは俺だけ?
0793名無しさん@お腹いっぱい。2009/10/31(土) 08:29:08
>>791
>>786みると遊びっぽい環境だからどうでもいいんじゃね?
0794名無しさん@お腹いっぱい。2009/10/31(土) 09:26:56
786です。
遊び環境ですね。古いPCにNetBSDをいれて遊んでます。

fstabで、softdepをはずしてasyncにしてみたらどえりゃー速くなりました・・
どうもありがとうございます。

ファイルシステムのasyncとNFSのasyncって同じなんでしょうか?
ぜんぜん違う階層だと思ってました。
そか・・・NFSもファイルシステムか・・・
0795名無しさん@お腹いっぱい。2009/10/31(土) 09:40:08
>>794
違う階層だよ。違う階層だからこそ、1番ネックになってる下の階層でasyncしないと
効果が見えないと言う話。
0796名無しさん@お腹いっぱい。2009/11/03(火) 14:50:06
>>792
うん
多分君だけ
0797名無しさん@お腹いっぱい。2010/02/09(火) 08:40:44
ユーザ領域をNFSでマウントしてるんだけど
quotaかけるってことできますか?
0798名無しさん@お腹いっぱい。2010/02/09(火) 08:57:21
できる
0799名無しさん@お腹いっぱい。2010/02/09(火) 11:06:53
できない
0800名無しさん@お腹いっぱい。2010/02/09(火) 11:09:35
もちろんできる。

>>799
嘘書く時はちゃんとオチを用意しとけよw
0801名無しさん@お腹いっぱい。2010/02/09(火) 11:10:10
どちらとも言えない
0802名無しさん@お腹いっぱい。2010/02/09(火) 11:12:57
できました! ありがとう
0803名無しさん@お腹いっぱい。2010/02/09(火) 11:28:48
彼女が妊娠しますた。
0804名無しさん@お腹いっぱい。2010/02/09(火) 21:49:17
mountした結果ですな
0805名無しさん@お腹いっぱい。2010/02/09(火) 22:17:21
foreで? それともback?
0806名無しさん@お腹いっぱい。2010/02/09(火) 22:21:19
俺がintrしといたけど
0807名無しさん@お腹いっぱい。2010/02/10(水) 06:35:48
関係者にはWallしておくように
0808名無しさん@お腹いっぱい。2010/02/10(水) 10:21:59
つまんね。
0809名無しさん@お腹いっぱい。2010/02/11(木) 00:00:32
DNA.exeが非同期書き込みになっていたのと排他書き込みに問題が発生したのですね。
0810名無しさん@お腹いっぱい。2010/02/11(木) 01:05:29
久しぶりにnfs使ったら無茶苦茶速いしCPU負荷もぜんぜんかからないのね。
マシンの性能が良くなったからかnfsが良くなったからか判らないけどnfsは
遅いってイメージあったからびっくりした。
0811名無しさん@お腹いっぱい。2010/02/12(金) 19:35:31
>>810
なにと比較してNFSのほうが速かったの?
iSCSIより速くて驚いたなら興味ある
0812名無しさん@お腹いっぱい。2010/02/12(金) 21:41:24
SunOS4の時代のsum4mとか
0813名無しさん@お腹いっぱい。2010/03/17(水) 16:53:29
hosts.denyで
ALL: ALL

hosts.allowで
lockd: xxx
portmap: xxx
rpc.mountd: xxx
rpc.statd: xxx
rquotad: xxx

としてますがxxxからnfsをマウントしようとするとはじかれてしまいます。

hosts.denyを
lockd: ALL
portmap: ALL
rpc.mountd: ALL
rpc.statd: ALL
rquotad: ALL

とすればマウントに成功します。
上記以外に、どのサービスのアクセスを許可する必要があるのでしょうか?
OSはdebian/lennyです。
0814名無しさん@お腹いっぱい。2010/03/17(水) 16:58:25
rpc.nfsdはどうした?
0815名無しさん@お腹いっぱい。2010/03/17(水) 17:25:35
rpc.nfsd: xxx
をhosts.allowに追加しましたがマウントできませんでした。
0816名無しさん@お腹いっぱい。2010/03/17(水) 17:39:37
じゃなくて、rpc.nfsdも必要だろ、と言ってるだけ。
mountできるかどうかは別問題。
0817名無しさん@お腹いっぱい。2010/03/17(水) 17:41:51
OSわからんけど、Linuxなら
http://www.linux.or.jp/JF/JFdocs/NFS-HOWTO/server.html
によるとrpc.っていらんな。
FreeBSDならrpcbindに変わったし。
Solaris知らん。
0818名無しさん@お腹いっぱい。2010/03/18(木) 11:45:14
/etc/hosts.allow
lockd: xxx
mountd: xxx
portmap: xxx

/etc/hosts.deny
ALL: ALL

でマウントできるようになりました。
最低限許可しないといけないのが上記3つなようです。
やはりhosts.denyではALL: ALLが良いかと。
0819名無しさん@お腹いっぱい。2010/03/18(木) 20:17:44
statdがないと、サーバがダウンした後の
クライアント側の復旧に失敗するよ。

まあクライアント側も、再起動すればいいけども。
(書き込み要求があってもそれは捨てることにして)
0820名無しさん@お腹いっぱい。2010/03/18(木) 21:27:59
debian/lennyだと以下を許可すればnfsをフルに使えそうですね。

lockd
mountd
portmap
rquotad
statd

rquotadはファイルシステムクォータというのを利用する場合に必要だそうで。
statdはlockdとともに動作してクラッシュ回復に使われるとか。

結局、問題だったのはmountdなどバイナリファイル名がrpc.mountdだったとしても、hosts.allowでは
mountdを許可するようにしないといけなかったことでした。
0821名無しさん@お腹いっぱい。2010/03/18(木) 21:45:10
なんか礼儀がなってないような気がしないでもない
0822名無しさん@お腹いっぱい。2010/03/18(木) 21:52:43
debianだとtcpdchk, tcpdmatchってコマンドがあるでしょ。
0823名無しさん@お腹いっぱい。2010/03/18(木) 23:00:26
/etc/exportsでアクセス制御できるのにtcp_wrappersなアクセス制御に
介入されるのは不幸な気がする
0824名無しさん@お腹いっぱい。2010/03/19(金) 01:14:15
>>823
んならlibtcpdリンクせずにビルドすればいいんでね?
0825名無しさん@お腹いっぱい。2010/03/19(金) 04:06:23
クライアントマシンからログインした際、ファイルサーバのディレクトリをホームディレクトリとしたいのですが
.bashrcなどのファイルをコピーして、/etc/passwd内のホームディレクトリの場所を書き替えるだけでよいのでしょうか?


0826名無しさん@お腹いっぱい。2010/03/19(金) 08:34:42
おk
0827名無しさん@お腹いっぱい。2010/03/19(金) 11:00:37
>>822
tcpdchk関連でtlid.confという設定ファイルがでてきたのですけど、これはなんですか?
ネットで検索してみたけどでてこない。
家の環境に入ってなかったですし。
0828名無しさん@お腹いっぱい。2010/03/19(金) 23:39:07
>>827
inetd.confのtypo.
0829名無しさん@お腹いっぱい。2010/04/09(金) 11:18:05
NFSv4で6台のクライアントにサービスを提供しています。
数年間にわたってうまく動いているのですが高負荷時に
サーバ側のログ(dmesgで表示されます)に次のようなメッセージが出ます。

NFSD: setclientid: string in use by client

これは何が問題なのでしょうか?
サーバ、クライアント共に CentOS 5.4です。

0830名無しさん@お腹いっぱい。2010/04/09(金) 21:05:12
気にすんなw
気になるならRFC 3530の8.1.2, 14.2.33辺り。
0831名無しさん@お腹いっぱい。2010/04/09(金) 23:44:06
>>829
ttp://lists.linuxcoding.com/rhl/2005/msg52121.html
かな
0832名無しさん@お腹いっぱい。2010/04/09(金) 23:54:45
それぐぐって何番目に出た?
つまりはそういうことだ。
■ このスレッドは過去ログ倉庫に格納されています