短い答え
削除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-3g
Windowsの一般的な動作を模倣し、使用中のファイルの削除を拒否できます。問題は、多くの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