Linuxからヒューズを削除するリスク(.fuse_hiddenファイルを削除するため)


0

fuseUbuntuサーバー16.04から削除すると、どのような副作用がありますか?

このマシンからムービーを削除するたびに、単に名前が変更され.fuse_hidden<some_long_number>ます。

ムービーサーバー(プレックス)を停止しても問題は解決しません。実際にファイルを削除する唯一の方法は再起動することです。lsofファイルを使用してサービスを見つけるために使用しようとしましたが、役に立ちませんでした。

削除した場合fusesudo apt-get remove --auto-remove fuse)落とし穴は何ですか?システムは不安定になりますか?

fuseを削除することにより、ファイルを削除すると期待される結果が得られますか?すなわち、ファイルはなくなりますか?


ヒューズを取り外すことは、おそらく実際にやりたいことではありません。つま先を削り続けるので、つま先を切り落とすことに似ています。現在、映画をどのように削除しようとしていますか?
ジョセフ・シブル

ムービーが含まれるディレクトリに移動し、rm movie_nameと入力します。また、Windowsマシンからフォルダーを表示し、そこからファイルを削除しようとしました。すべて同じ結果になります。
クールジャベリン

1
これはおおよそ、腕を切り落とすようなもので、蚊がその上に落ちます。
ジャーニーマンオタク

回答:


2

短い答え

削除fuseすると、おそらくファイルシステムをマウントできなくなります。

FUSEは、ユーザ空間でファイルシステムこの特定のファイルシステム上で実行されるすべての操作を処理するユーザ空間のプログラムがあることを意味する(kernelspace非ヒューズファイルシステムのサポート機能するが)。ntfs-3gあなたの場合かもしれません。そうでなくても、ストーリーは一般的に同じです。

すべての特定のFUSE実装はfuseパッケージに依存してntfs-3gおり、その中にあります(正式には事前依存関係ですが、ここでは違いはありません)。つまり、削除fuseしてntfs-3g(または別のFUSEプログラムを)動作させることはできません。

本当に気になるのは、.fuse_hiddenファイルの存在です(比較:XY問題)。残りの回答では、この問題に対処しています。


コンテキスト

.fuse_hiddenここに記載されているように、ファイルを無視できるようです:ファイルとは何で、.fuse_hiddenなぜ存在するのですか?

ファイルを削除.fuse_hiddenする方法の答えはFUSEの動作をNFSと比較します。

これは、NFSマウントで別のシステムが開いているファイルを削除した場合に起こることと似ています。

ここでは、NFSの動作について説明します。その中から:

クライアントがファイルを開いて削除するとどうなりますか?ファイルは、名前を保持し続ける必要があるため、ファイルを開いたクライアントは引き続きアクセスできます。ただし、ファイルが削除されると、その後その名前のファイルはもう存在しないことが予想されます。したがって、NFSサーバーは、開いているファイルの削除を名前変更に変換します。ファイルの名前が変更されます.nfs….nfsその後に文字と数字の文字列が続きます)。

Linuxのファイルは、プロセスで開いているときに削除できるためです。このメカニズムは、inodeベースのローカルファイルシステム(extファミリなど)で設計上機能しますが、ファイルへのアクセスが名前のみに依存する場合は、何らかの方法でエミュレートする必要があります。NTFSの状況はやや複雑だと思います。上記のリンクの下にいくつかの興味深いコメントとリンクがあります。

まあ、ntfs-3gWindowsの一般的な動作を模倣し、使用中のファイルの削除を拒否できます。問題は、多くのLinuxプログラムがまだ使用しているファイル削除できることを期待していることです。それはかなり賢いです。

プログラムに一時ファイルが必要だとしましょう。これを作成して開き、すぐに削除します。Linuxはこれを許可します。(ファイルが不要になったとき)ディスクスペースを実際に解放するタスクは、カーネルまたはFUSEの誰かの仕事です。このタスクは、プログラムが予期せず終了したり、強制的に終了した場合でも、適切に処理されます。

一方、プログラムでファイルを事前に削除できない場合でも、完了時にクリーンアップするのは依然として仕事です。予期しない終了により、「放棄された」一時ファイルが残る場合があります。そして、他の誰かが同じファイルを開いたらどうしますか?そうすれば、プログラムは完了しても削除できず、すべてが問題なく動作します。

このLinuxのファイル処理方法を維持するのは良いことです。.fuse_hiddenまたはのようなファイル.nfsはこの哲学のコストであり、最終的には削除されます。しかし、何かがうまくいかなかったとしましょう。手動メンテナンス中にそれらを見つけるのは比較的簡単ですが、Windowsでは「放棄された」ファイルがあり、それを知らない場合があります。Linuxのやり方は、もっときれいなアプローチのように思えます。


いくつかのテスト

私のテストベッド:

# whoami
root
# cat /etc/issue
Ubuntu 16.04.2 LTS \n \l
# uname -a
Linux foobar 4.4.0-59-generic #80-Ubuntu SMP Fri Jan 6 17:47:47 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
# dpkg -l | grep ntfs-3g
ii  ntfs-3g                                     1:2015.3.14AR.1-1ubuntu0.1 amd64                      read/write NTFS driver for FUSE

マウントポイントの準備:

# mkdir /mnt/ext4 /mnt/ntfs

ファイルシステムの準備:

# truncate -s 20M image-ext4
# truncate -s 20M image-ntfs
# mkfs.ext4 -Fq image-ext4 
# mkfs.ntfs -FqQ image-ntfs

(省略されたチャット出力mkfs.ntfs)。

取り付け:

# mount image-ext4 /mnt/ext4/
# mount image-ntfs /mnt/ntfs/

初期ディスク使用量:

# df -h /mnt/ext4/ /mnt/ntfs/
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0       19M  172K   17M   1% /mnt/ext4
/dev/loop1       20M  2.5M   18M  13% /mnt/ntfs

ファイルの作成:

# dd if=/dev/urandom bs=1M count=10 | tee /mnt/ext4/file > /mnt/ntfs/file
10+0 records in
10+0 records out
10485760 bytes (10 MB, 10 MiB) copied, 0.645865 s, 16.2 MB/s

ディスクの使用状況:

# df -h /mnt/ext4/ /mnt/ntfs/
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0       19M   11M  6.8M  60% /mnt/ext4
/dev/loop1       20M   13M  7.6M  63% /mnt/ntfs

ファイルを開いてから削除:

# exec 3<> /mnt/ext4/file 
# exec 4<> /mnt/ntfs/file 
# rm /mnt/ext4/file /mnt/ntfs/file

ディスクの使用状況:

# df -h /mnt/ext4/ /mnt/ntfs/
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0       19M   11M  6.8M  60% /mnt/ext4
/dev/loop1       20M   13M  7.6M  63% /mnt/ntfs

そのため、削除してもディスクスペースはまだ使用中です。これは、ファイルがまだ開いているためです。

実際のファイル:

# ls -A /mnt/ext4/ /mnt/ntfs/
/mnt/ext4/:
lost+found

/mnt/ntfs/:
.fuse_hidden0000000200000001

この時点で、ファイルシステムのコピーを作成します(後で比較するため)。一般に、マウントされている間はこれを行うべきではありませんが、ファイルを閉じる前にハードリセットをシミュレートすることをお勧めします。それでも、コピーされたファイルシステムはクリーンであり、したがってsyncコマンドが必要です。さらに--reflink=alwaysオプションでは私はBtrfsファイルシステム上のスナップショットのようなコピーを作成することを可能にするimage-ext4とは、image-ntfs保存されているが、このテストでは、プレーンも機能するcpはずです。

# sync
# cp --reflink=always image-ext4 copy-ext4
# cp --reflink=always image-ntfs copy-ntfs

copy-ext4きれいかどうか確認できます:

# fsck.ext4 copy-ext4
e2fsck 1.42.13 (17-May-2015)
copy-ext4: clean, 11/5136 files, 1849/20480 blocks

残念ながらありませんfsck.ntfs

元のファイルシステムを続けましょう。ファイルを閉じる:

# exec 3>&-
# exec 4>&-

ディスクの使用状況:

# df -h /mnt/ext4/ /mnt/ntfs/
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0       19M  172K   17M   1% /mnt/ext4
/dev/loop1       20M  2.5M   18M  13% /mnt/ntfs

内容:

# ls -A /mnt/ext4/ /mnt/ntfs/
/mnt/ext4/:
lost+found

/mnt/ntfs/:

.fuse_hiddenファイルはもうありませんし、ディスク容量は再び自由です。ファイルは不要になると消えます。

ファイルが適切に閉じられなかったときに、シミュレートされたリセット後に何が起こるかを見てみましょう。コピーのマウント:

# umount /mnt/ext4 /mnt/ntfs 
# mount copy-ext4 /mnt/ext4/
# mount copy-ntfs /mnt/ntfs/

ディスクの使用状況:

# df -h /mnt/ext4/ /mnt/ntfs/
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0       19M  172K   17M   1% /mnt/ext4
/dev/loop1       20M   13M  7.6M  63% /mnt/ntfs

実際のファイル:

# ls -A /mnt/ext4/ /mnt/ntfs/
/mnt/ext4/:
lost+found

/mnt/ntfs/:
.fuse_hidden0000000200000001

したがって、これは手動で.fuse_hiddenファイルを削除する必要があるシナリオです。そのntfs-3gようなファイルを作成せず、そもそも削除を拒否した場合、古い名前のファイルが残っていることに注意してください。リセットしなくても使用できます。これはさらにメンテナンスが必要になることを意味します。

iノードベースのファイルシステムでは、このようなメンテナンスはまったく必要ないと思います。

クリーニング:

# umount /mnt/ext4 /mnt/ntfs
# rmdir /mnt/ext4/ /mnt/ntfs/
# rm image-ext4 copy-ext4 image-ntfs copy-ntfs

1
実際にこれらのファイルを削除する必要がある場合があります。たとえば、Gstreamerを使用してオーディオストリームをカットし、同時にラムディスク(tmpfs)に保存して、他の同時プロセスがチェックするようにします(可用性に応じて多少遅延する場合があります)。その理由は、Gstreamerがqueリソースを実際に「解放」しないので、2番目のプログラムがそれを削除してもそこにとどまり、非常に貴重なRAMを消費してサーバーがいっぱいになることです。現在、設計では(i + 1)の場合、存在する場合、(i)。最初のプロセスによって再びアクセスされることはありません。そこにヒューズが残っているものはないので、拭いても安全
です-DGoiko

適切な解決策は、Gstreammerを掘り下げて、なぜファイルをリリースしないのかを検出し、それをリリースすることでした。
DGoiko
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.