lsof や find コマンドで fuse.gvfsd-fuse の警告が出る問題について調べてみた
ご利用のブラウザは、JavaScript が無効 となっていませんか?
このサイトでは、コンテンツの一部が非表示 、あるいは、コメント、お問い合わせの投稿ができない 、検索ができない ことがあります。
lsof や find コマンドで、以下のような警告メッセージが表示されたことがないでしょうか?
$ sudo lsof / var
[sudo] password for hoge:
lsof: WARNING: can''t stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
Output information may be incomplete.
この警告メッセージは、出力されているとおり 以下のような意味になります。
gvfsd-fuse ファイルシステムの /run/user/1000/gvfs を stat 関数を使ってファイル(ディレクトリ)の状態を取得しようとしたけど、出力結果が不十分なようです。
つまり、/run/user/1000/gvfs の状態が読み込めなかったと言っています。
ちょっと気になったので、対処法を調べてみました。
FUSE とは、
F ilesystem in U serS pacE の略で、その名のとおりユーザ空間のファイルシステム という意味です。
一般にファイルシステムは、OSの管轄でシステム固有となり、
ユーザが別のファイルシステムを使いたいと思ってもOSの設定あるいはインストール時のファイルシステムに依存するため利用するこができませんでした。
これをユーザ毎に自由に利用できるようにしたのがFUSEです。
ユーザ毎に閉じたディスク空間という感じでしょうか。
ただ、ファイルシステムを個別にあえてOSと異なるシステムにすることはほとんどなく、
一般的には、ユーザ毎にアプリケーションをインストールしたりするための個別空間として利用されることが多いようです。
GVFS とは、
GnomeVFS(GNOME Virtual File System) の代替であり、FUSEを用いたGNOMEデスクトップの仮想ファイルシステムです。
GVFSを用いることによって SFTP, FTP, WebDAV, SMB 経由のリモートホストのデータに簡単にアクセスすることができるようになります。
この時 マウントされるディレクトリが、以下のいずれかになります。
$HOME/.gvfs/
/run/user/$USERNAME/gvfs
$XDG_RUNTIME_DIR/gvfs
fuse.gvfsd-fuse の警告の対処
まずは、先のfuse.gvfsd-fuse の警告がなぜ出力されるか、それから、その対処について調べてみました。
原因
原因は、先に警告メッセージのとおり FUSU を用いた GVFS がマウントするディレクトリ ( ここの例では、/run/user/1000/gvfs ) が
管理者権限のあるユーザからのアクセスも拒否するように設定してあるからです。
現在のマウント状態を確認してみます。
$ sudo cat / etc/ mtab
...
gvfsd-fuse /run/user/1000/gvfs fuse.gvfsd-fuse rw,nosuid,nodev,user=hoge 0 0
...
ここで出力されているオプション(rw,nosuid,nodev,user=hoge) は、それぞれ以下のような意味になります。
rw : ファイルシステムを読み書き可能でマウント
nosuid : suid や sgid ビットの操作を禁止
nodev : ファイルシステム上の特別なデバイスを解釈しない
user=hoge : hoge ユーザーにてファイルシステムがマウントされ、該ユーザにのみアンマウントを許可される
また、このディレクトリのパーミッションを確認してみます。
$ sudo ls - l / run/ user/ 1000/ gvfs
ls: cannot access /run/user/1000/gvfs: Permission denied
$ ls - dl / run/ user/ 1000/ gvfs
dr-x------ 2 hoge hoge 0 6月 19 02:20 /run/user/1000/gvfs
つまり、hoge さん以外にアクセスできないようになっています。
また、このディレクトリがマウントされるタイミングは、GNOMEログインした時になります。
ログイン時に、該ユーザにて gvfsd-fuse が起動され、gvfsd-fuseにてマウントされているようです。
$ ps axu| grep gvfsd- fuse
hoge 2296 0.0 0.0 44376 6972 ? Sl 02:20 0:00 /usr/lib/gvfs/gvfsd-fuse /run/user/1000/gvfs -f -o big_writes
対処1
最も簡単な対処は、無視する ことです。
GVFSの役割、用途からすれば、この警告は、無視しても大丈夫 でしょう。
例えば、lsof コマンドであれば、-e オプションを付けても良いかもしれません。
$ sudo lsof - e / run/ user/ 1000/ gvfs / var
[sudo] password for hoge:
このように出力されなくなります。
対処2
どうしてもこの警告が気になる方は、
管理者からのアクセスを許可するように設定を変更すれば良いことは なんとなくわかるかと思います。
その変更には、FUSEの設定、および、マウント時のオプション指定を行う必要があります。
以降に簡単に解説してみます。
/etc/fuse.conf にて、他ユーザからのアクセスを許可するように設定する
$ sudoedit / etc/ fuse. conf
...
user_allow_other
fuse グループへ追加する
この設定は、Debian , Ubuntu 系のディストリビューションのみのようです。
(CentOS には、このfuseグループがありません。)
$ sudo addgroup hoge fuse
Adding user `hoge' to group `fuse' ...
Adding user hoge to group fuse
Done.
$ newgrp fuse
現在 マウントされているディレクトリをアンマウントする
$ fusermount - zu $XDG_RUNTIME_DIR/ gvfs
オプション :
-zu は、lazyアンマウントする指定になります。
lazyは、直訳すれば “のんびりした” ぐらいの意味でしょうか、
つまり、ざっくりいうと、即アンマウントせずに、いまからアンマウントしますよと通知し、該ディレクトリがBUSY(使用中)でなくなったらアンマウントするというものです。
パラメータ :
$XDG_RUNTIME_DIR/gvfs は、ここの例でいうと /run/user/1000/gvfs と指定したのと同じになります。
先の GVFS の解説の中の以下のいずれかになります。
$HOME/.gvfs/
/run/user/$USERNAME/gvfs
$XDG_RUNTIME_DIR/gvfs
gvfsd-fuse を再起動する
まず、現在動作中のgvfsd-fuse プロセスを停止します。
$ killall gvfsd- fuse
gvfsd-fuse: no process found
次に、gvfsd-fuse を起動します。
Debian , Ubuntu
$ /usr/lib/gvfs/gvfsd-fuse - o big_writes - o allow_root $XDG_RUNTIME_DIR/ gvfs
CentOS , ScientificLinux
$ /usr/libexec/gvfsd-fuse - o big_writes - o allow_root $XDG_RUNTIME_DIR/ gvfs
オプション : -o allow_root を付加することで、マウントしてディレクトリに管理者がアクセスできるようになります。
対処2(おまけ)
上記の対処2にて、管理者からのlsofやfindコマンドにて警告がでることはなくなったかと思います。
ただ、このままでは、システムのリブートで上記の設定が、全て解除されてしまいます。
そこで、永続的にこの設定を有効にするには、各ユーザがGNOMEログインする際に、以下のようなスクリプトを実行するようにすれば、良いことになります。
Debian ,
Ubuntu
fusermount -zu $XDG_RUNTIME_DIR/gvfs
killall gvfsd-fuse
/usr/lib/gvfs/gvfsd-fuse -o allow_root $XDG_RUNTIME_DIR/gvfs
CentOS ,
ScientificLinux
fusermount -zu $XDG_RUNTIME_DIR/gvfs
killall gvfsd-fuse
/usr/libexec/gvfsd-fuse -o allow_root $XDG_RUNTIME_DIR/gvfs
上記のファイルを、たとえば、/user/local/bin/remount_fuse.sh として保存したとします。
このファイルに実行権限を与え、後は、各ユーザのログイン時に自動実行するように登録すればOKです。
$ sudo chmod + x / user/ local/ bin/ remount_fuse. sh
結果からすると、この警告は、あまり問題視する必要もないのかなぁと思います。
ただ、なんでもそうですが、問題ないと判断するには、それなりに理解した上で、判断することが大事かなかぁと思います。
そういう意味で、この記事が、皆さんの理解が少しでも深まれば幸いです。
ご利用のブラウザは、広告ブロック(AdBlockなど) が適用 となっていませんか?
このサイトでは、コンテンツの一部が非表示 、あるいは、コメント、お問い合わせの投稿ができない 、検索ができない ことがあります。
関連記事 :
コメントを投稿 :