• ベストアンサー

NFS上のファイルについて

NFSで共有したディレクトリにあるファイルに、クライアントシェル上でawkやgrepなどをする事は可能でしょうか? またC言語のopenでファイルをオープンさせそのファイルディスクリプタをselect等でリアルタイムに監視するような事は可能でしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • you-m
  • ベストアンサー率58% (190/327)
回答No.1

それらのことができないようだと、NFS自体の存在に意味がありませんね。 シェルも含めて、アプリケーションから見たNFSは、ローカルのファイルシステムと何も変わりません。 しかし、良くある問題として、NFS上のファイルの排他制御が挙げられます。 うまく動くかどうかは、NFSバージョン、そのOS上の実装やクライアントとサーバのOSの組み合わせ等がありますので、特に同じファイルに複数ホストからの書き込みがある可能性がある場合は、flock等の排他制御がきちんと動くのかどうかの確認が必要でしょう。 また、特に書き込みバッファを使用している場合、アプリケーション上から書き込み完了と思っていても、実際にNFSサーバ上ではディスクに書き込まれていないケース等もあります。障害対策やアプリの仕様によって、問題になるケースとそうでないケースがありますが、この辺はパフォーマンスとの兼ね合いで、基盤構築時に検討する問題でしょう。

hankyo
質問者

お礼

排他処理はNFSでやっているのですね。(よく考えればそうですね^^;) 丁寧な説明をしていただき、ありがとうございました。

関連するQ&A

  • マウントしたnfsディレクトリの権限

    すみません。教えてください。 2つサーバーがあり、片方をNFSサーバとして使います。NFSサーバ側で/etc/exportsに以下の内容を記述しました。 /マウントさせるディレクトリ IPアドレス(rw,no_root_squash,sync) NFSクライアントにSSHでログインし、マウントしたディレクトリにアクセスすると、その中のファイルなどは開くことができ、書き込みもできます。 しかし、ブラウザを使ってそのマウントしたディレクトリの中をファイルを開こうとすると403 Forbiddenの権限エラーになります。(※NFSクライアント側はWebサーバとなります。) マウントではなく、同階層に別のテスト用ディレクトリを作り、同じファイルをコピーし、ブラウザで開こうとすると問題無く開き、書き込むこともできます。 NFSサーバもしくはNFSクライアントどちらかに(追加?)何か権限設定をしなければならないのでしょうか? もしくはhttpd.confの設定でしょうか? 宜しくお願い致します。

  • NFSサーバーのファイルを取得する

    今、RedHat9でNFSサーバーを立ち上げました。 /etc/exportsにアクセスできるディレクトリ指定をしました。 テストのため、クライアントを同一PCとしています。 取得したいファイルを得る場合はどのようにしたらいいのでしょうか? wgetコマンドを用いてサーバーのアドレスを指定して取得したいファイルを指定する? (/etc/exports) /home/user1 クライアント側のIPアドレス(rw) 取得したいファイルがもし、 /home/user1/sample/get_1.txt の場合、 wget ftp://NFSサーバーIPアドレス/取得したいファイルのディレクトリパス 格納先 どのようにして取得したいファイルおよび格納先していを行うのかわかりません。 よろしくお願い致します。

  • NFSデーモン停止時のNFSマウントディレクトリでのファイル操作

    現在、Linux環境においてNFSを利用してサーバー間でのファイルのコピーを行っております。 Cでプログラムを組んで、open()~read()~write()~close()を実施しています。 この操作で、ファイル操作でエラーが発生した場合には、エラーを呼び出しもとのアプリケーションに返すようにしているのですが、 NFSデーモン停止していると、ファイル操作が無応答のようになってしまう(NFSでの無期限のリトライが実施されているため)ため、エラーを返すことが出来ず困っています。 (NFSマウントでsoftオプションを付けるとI/Oエラーは帰ってくるのですが、以下の条件にも記述している理由等で、あえてsoftオプションをつけていません。) 以下の条件も含めて、NFSデーモン停止時に、(タイムアウト)エラーをアプリケーションに返したいのですが、いい方法はないでしょうか? よろしくお願いいたします。 <条件> 1.NFSマウントのオプションに"soft"は利用しない。  (エラー発生時に、ファイルが破損する可能性がある(推奨されない)オプションであるため。) 2.NFSマウントディレクトリに対してファイル操作するプログラムは、ライブラリとしてアプリケーションに提供する。 3.NFSでのファイル操作が無応答になった場合は、アプリケーションにエラーをreturnで返したい。 4.NFSでのファイル操作が無応答になった場合に、NFSでのファイル操作プログラムの外部から(シグナル等で)停止させることはしない。 (NFSでのファイル操作プログラムの内部でシグナルを発行して、最終的にreturnで返せるのであればOK) 5.NFSデーモンが停止した場合に、必ずしもNFSデーモンを再度起動させるとは限らない。

  • ファイル一覧を表示

    ファイル一覧を表示するため、別の質問にてシェルスクリプトを教えて いただきました。それを参考に、perlプログラムの中に入れたのですが、 期待した結果が得られません。 (シェルスクリプトで実行すると正常に動作しています) ちょうど「awk -F- '{print $2}'」の部分が実行されないのですが、 perlの中で、awkが実行できないなどの制限があるのでしょうか? それとも、書き方に問題があるのでしょうか? #! /usr/bin/perl chdir("/home/vpopmail/domains/defaultdomain"); open(DIR_IN, "ls .qmail-* | awk -F- '{print $2}' | grep -v majordomo | grep -v owner | grep -v default | sort | uniq 2> /dev/null |"); while($file=<DIR_IN>) { print $file; }

    • ベストアンサー
    • Perl
  • NFSマウント

    以前にNFSについて質問させて頂いたのですがご教授願います NFSマウントとは、Linux上のディレクトリを別のサーバー(Win・LinuxOS問わず)にマウントさせ共有させるシステムという事で、あくまでマウント元のOSがLinuxの時に使う言葉で、マウント先がLinuxの時のみに使う言葉ではないという認識でいいでしょうか? そして上記の上で基本的にはマウント元がWindowsの場合NFSマウントはできずCIFSマウントとなると思っているのですが、 hpのアレイコントローラーなどではNFS・CIFSマウントどちらもできるという話を聞いたのですが、WindowsServerを入れた状態でも別のサーバーにNFSマウントは可能なのでしょうか?(ストレージ用のRAIDのOSは忘れました;汗) 変に考えすぎなのか、こんがらがって頭の中で整理がついていない状態なので、宜しくお願いします。

  • NIS・NFSでのログインが不完全に終わります。

    A:CentOS5.3(NFSサーバー) B:CentOS5.2(NISサーバー) C:Red Hat Enterprise Linux6.5(NFSクライアント、NISクライアント) というネットワークを構築しています。 Cに一般ユーザーでログインしても、認証はできるものの、 NISのpasswdファイルに記述されているはずのホームディレクトリへ 入れないようで、画面が最初からいきなり固まってしまいます。 ちなみに、rootでCにログインし、上記のホームディレクトリは参照できます。 したがって、オートマウント(autofs)は効いているかと思われます。 やはり、クライアントのほうのOSのバージョン(6.5)がサーバー(5.3、5.2)より高いと うまくいかないものでしょうか? Red Hat(CentOS)では、6からportmapがrpcbindへ 統合されたことが影響しているのでしょうか? 要は、Cに一般ユーザーでのログインが不完全に終わってしまい、困っています。 原因・対策法をご教授していただければと思います。

  • C言語でのソケット通信のclose

    C言語でソケット通信をするプログラムの見本は、大体がサーバのプログラム内でサーバとクライアントのファイルディスクリプタを、クライアントのプログラム内でクライアントのファイルディスクリプタをcloseしてから終了しています。 でも、プログラムを終了させる時にopenしているファイルディスクリプタは自動的にcloseされるのだから、わざわざ明示的にcloseする必要がないと思います。 「明示的にcloseするのがマナーだから」という理由しか、調べても出てきませんでした。 明示的に全てのファイルディスクリプタをcloseする理由をご存知の方、教えてください。

  • 処理結果をファイルへ・・・

    set MUCHDAY = `grep $TODAY PDXFGKS.TXT` の結果を、ファイルに書き出したいのですがうまくいきません。 (MUCHDAYは内部変数です) 方法をご存じの方お教え下さい。 (尚、ディレクトリは関数の最初で移動していて、 移動した先にそのファイルを作りたいのです。 その後この様な処理をかませたいので・・・) set EDPTODAY = `more PDXFGKS.TXT | awk -F, '{print $1}'` if($HOLIDAY == "H")then echo "休日シェル作動" else echo "平日シェル作動" endif (PDXFGKS.TXTが結果内容を入れたいファイルです)

  • USBハードディスクのnfsでのエクスポート

    Debian etch(PPC版)でnfsサーバを以下の設定で立て、自宅LAN内で ファイル共有をする事が出来ました。 root@nfsserv# cat /etc/exports /home/share 192.168.0.0/255.255.255.0(rw,sync,subtree_check) root@nfsserv# /etc/init.d/nfs-kernel-server start Exporting directories for NFS kernel daemon.... Starting NFS kernel daemon: nfsd mountd. root@client# mount -t nfs -o rw nfsserv:/home/share /mnt/share root@client# touch /mnt/share/hoge root@client# ls hoge ここまでは正常に動作しているのですが、この環境でnfsservにUSB外付けハードディスクドライブ(/dev/sdb,プライマリパーティションでext3なsdb1がひとつだけある)を接続しました。 root@nfsserv# mkdir /home/share/sdb1 root@nfsserv# mount -o rw /dev/sdb1 /home/share/sdb1 root@nfsserv# chown nobody /home/share/sdb1 root@nfsserv# chgrp nogroup /home/share/sdb1 root@nfsserv# ls -l /home/share/ drwxrwxrwx 5 nobody nogroup 4096 2010-02-14 23:35 sdb1/ root@nfsserv# ls /home/share/sdb1 bar/ foo/ lost+found/ root@nfsserv# exit user@nfsserv$ touch /home/share/sdb1/hello user@nfsserv$ ls -l /home/share/sdb1/hello -rw-r--r-- 1 user user 0 2010-02-15 00:23 /home/share/sdb1/hello と、ローカルからは読み書き出来ているのですが、 exportfs -ra、nfs-kernel-serverの再起動、クライアントからの NFSディレクトリ再マウント後 root@client# ls /mnt/share/sdb1 何も表示されない root@client# touch /mnt/share/sdb1/hoge touch: `/mnt/alice/sdb1/hoge'にtouchできませんでした: Permission denied となってしまいます。 デバイスのマウントの仕方が悪いのか、/etc/exportsの書き方が悪いのか、分かりませんでした。 NFSでの公開ディレクトリ以下に、USBハードディスクをマウントして、クライアントから読み書きしたいのですが、どのようにすればいいでしょうか。

  • NFSマウントデータの削除

    現在、2台のパソコンがあり1台のパソコンのデータをもう1台のパソコンで読み書き削除等を行ないたいと思っています。 2台ともlinuxです。 パソコンA: NFSサーバー パソコンB: NFSクライアント NFS設定を行いマウントはうまくいきました。 パソコンA(/home/test/abc)をパソコンB(/home/hatena/kyouyu)にマウントしています。パソコンBのkyouyuにはパソコンAにあるいくつかのファイルが表示されているのを確認できました。 パソコンAにて設定を行った際(/etc/exports)に、読み書き可能としているのですが、パソコンBにてファイルを削除しようとしたところ、削除されません。 これは所有権の問題かと思ったのですが、kyouyuディレクトリはhatenaの所有権になっております。 どのようにしたら読み書き削除等が行えるようになるのでしょうか? どなたかお力添えお願いします。