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

【NFS】Network File System

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。2006/03/28(火) 11:42:41
nfsに関する話題を扱うスレ
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
それぐぐって何番目に出た?
つまりはそういうことだ。
0833831 (not 829)2010/04/10(土) 10:19:34
>>832
ぐぐれ(ry
0834名無しさん@お腹いっぱい。2010/04/10(土) 10:23:59
解答能力のない人には聞いてないんで。。。
0835名無しさん@お腹いっぱい。2010/04/10(土) 10:36:22
linuxのNFSは独自実装なのだから、この板で質問するのが気違い。
0836名無しさん@お腹いっぱい。2010/04/10(土) 11:17:51
>>835
おまえ、カーネル2.0時代の知識のままで止まってるだろ
0837名無しさん@お腹いっぱい。2010/04/10(土) 21:11:22
でもあの糞みたいなVFSレイヤにNFS載せてるんだからなあ……
0838名無しさん@お腹いっぱい。2010/04/11(日) 16:53:56
どんな点が糞なの?
0839名無しさん@お腹いっぱい。2010/04/11(日) 18:08:58
>>838
struct *_operationsの切り方が変すぎる。
Solarisとかの実装を知ってると、どうやったらそうなるのかと言いたくなる。
0840名無しさん@お腹いっぱい。2010/04/12(月) 00:15:34
>>831
古いわw
0841名無しさん@お腹いっぱい。2010/05/06(木) 17:01:32
http://kwskkkst.net/jp/rz95gdf
こういうのって本当にあるんですね!

ここ一週間で二人ほどお相手したんですけど、
数時間で合計11万稼げましたよ!
0842名無しさん@お腹いっぱい。2010/05/07(金) 18:18:00
ホームディレクトリをNFS上に置きたいのですが、ネットワークがつながらなかった場合など、NFSに接続できない場合の
対処はどのようにしたらよいのでしょうか?
0843名無しさん@お腹いっぱい。2010/05/07(金) 19:07:15
>>842
冗長化等でネットワークにつながらない状態を作りにくくするのが
基本だと思う。
0844名無しさん@お腹いっぱい。2010/05/07(金) 19:10:21
>>842
どうしたらいいかってより
どうしたいのかじゃね。
0845名無しさん@お腹いっぱい。2010/05/07(金) 19:16:17
>>843
そういう基本対策は別途行なうとして、
それでもNFSがつながらなかった場合にどうするかを聞いてるんですが・・
0846名無しさん@お腹いっぱい。2010/05/07(金) 19:21:17
どうしたいのか
0847名無しさん@お腹いっぱい。2010/05/07(金) 19:24:20
>>844 >>846
「どうしたいのか」かなんて聞いていません。
0848名無しさん@お腹いっぱい。2010/05/07(金) 19:25:05
>>845
そんなの環境によるよ。
「ユーザにごめんなさいする」って手もあるんだぜ。
0849名無しさん@お腹いっぱい。2010/05/07(金) 20:12:19
IDが出ない板はやりたい放題だな。

>>842
ユーザにごめんなさいするんだよ。
それがイヤだったり業務上の損失が大きいならちゃんと予算積んでNWやNFSサーバの
冗長化をしてリスクを下げな。
0850名無しさん@お腹いっぱい。2010/05/07(金) 20:13:53
ホームをNFSに載せること自体が目的じゃないならNFSをやめるのも手。
所詮NFSは手段だから、どうしたいのか、どうあって欲しいのかによって
色々な部分が変化してくるだけの話。
0851名無しさん@お腹いっぱい。2010/05/07(金) 20:37:33
>>850
「どうしたいのか、どうあって欲しいのかによって色々な部分が変化してくる」
なら、そのすべての(回答者が知ってる)変化を回答すればいい。

たいてい「どうしたいのか」とか聞き返す回答者は
実は答を知らない場合がほとんど。
0852名無しさん@お腹いっぱい。2010/05/07(金) 21:04:59
ユーザにごめんなさいする
0853名無しさん@お腹いっぱい。2010/05/07(金) 21:08:04
>たいてい「どうしたいのか」とか聞き返す回答者は
>実は答を知らない場合がほとんど。

4.主観で決め付ける
0854名無しさん@お腹いっぱい。2010/05/07(金) 21:11:13
>>852
その回答つまんないから何度も書かなくていいよw
■ このスレッドは過去ログ倉庫に格納されています