Rủi ro loại bỏ cầu chì khỏi Linux (để thoát khỏi các tệp .fuse_hidden)


0

Các tác dụng phụ của việc gỡ bỏ fusekhỏi máy chủ Ubuntu 16.04 là gì?

Mỗi lần tôi muốn xóa phim khỏi máy này, nó sẽ được đổi tên thành .fuse_hidden<some_long_number>.

Dừng máy chủ phim (Plex) không giải quyết được vấn đề, cách duy nhất để thực sự thoát khỏi tệp là khởi động lại. Tôi đã cố gắng sử dụng lsofđể định vị dịch vụ bằng cách sử dụng tệp không có kết quả.

Nếu tôi loại bỏ fuse( sudo apt-get remove --auto-remove fuse) một số cạm bẫy là gì? Hệ thống của tôi sẽ trở nên không ổn định?

Bằng cách loại bỏ fuse, sẽ xóa các tập tin có kết quả mong đợi? tức là tập tin sẽ biến mất?


Loại bỏ cầu chì có thể không phải là những gì bạn thực sự muốn làm. Nó giống như cắt ngón chân của bạn bởi vì bạn tiếp tục nhổ chúng. Làm thế nào bạn đang cố gắng để loại bỏ các bộ phim?
Joseph Sible

Tôi vào thư mục chứa phim, sau đó nhập rm movie_name. Ngoài ra, tôi đã cố gắng xem thư mục từ máy windows và xóa tệp từ đó. Tất cả với cùng một kết quả.
Cool Javelin

1
Điều này gần giống như cắt đứt cánh tay của bạn, khiến một con muỗi đậu trên nó.
Journeyman Geek

Câu trả lời:


2

Câu trả lời ngắn

Loại bỏ fusecó thể sẽ không có khả năng gắn kết hệ thống tập tin.

FUSE là Filesystem trong Userspace , có nghĩa là có một chương trình không gian người dùng xử lý tất cả các hoạt động được thực hiện trên hệ thống tệp cụ thể này (trong khi hỗ trợ hệ thống tệp không cầu chì hoạt động trong không gian nhân). Nó có thể là ntfs-3gtrong trường hợp của bạn; ngay cả khi nó không phải, câu chuyện nói chung là như vậy.

Tất cả các triển khai FUSE cụ thể đều phụ thuộc vào fusegói và ntfs-3gnằm trong số đó (tốt, chính thức là phụ thuộc trước nhưng nó không có sự khác biệt ở đây ). Điều này có nghĩa là bạn không thể xóa fusevà để ntfs-3g(hoặc một chương trình FUSE khác) hoạt động.

Điều thực sự làm phiền bạn là sự tồn tại của .fuse_hiddencác tệp (so sánh: vấn đề XY ). Phần còn lại của câu trả lời của tôi giải quyết vấn đề này.


Bối cảnh

Có vẻ như bạn có thể bỏ qua .fuse_hiddencác tệp, như đã nêu ở đây: Tệp là gì .fuse_hiddenvà tại sao chúng tồn tại?

Câu trả lời cho cách xóa .fuse_hiddentập tin? so sánh hành vi FUSE với NFS:

Điều này tương tự với những gì xảy ra khi bạn xóa một tệp mà hệ thống khác đã mở trên ngàm NFS.

và hành vi NFS được giải thích ở đây . Từ đó:

Điều gì xảy ra khi một tệp được mở bởi một khách hàng và bị xóa? Các tập tin cần phải có tên, để khách hàng mở nó vẫn có thể truy cập nó. Nhưng khi một tệp bị xóa, dự kiến ​​sẽ không còn tệp nào có tên đó tồn tại sau đó. Vì vậy, các máy chủ NFS biến việc xóa một tệp đang mở thành đổi tên: tệp được đổi tên thành .nfs…( .nfstheo sau là một chuỗi các chữ cái và chữ số).

Tất cả là vì một tệp trong Linux có thể bị xóa trong khi nó được mở bằng một quy trình . Cơ chế này hoạt động theo thiết kế với các hệ thống tệp cục bộ dựa trên inode (như ext Family) nhưng nó cần được mô phỏng bằng cách nào đó nếu việc truy cập vào các tệp chỉ phụ thuộc vào tên của chúng. Tôi tin rằng tình hình với NTFS có phần phức tạp. Bạn có thể tìm thấy một số ý kiến ​​và liên kết thú vị dưới liên kết ở trên.

Chà, ntfs-3gcó thể bắt chước hành vi chung của Windows và từ chối xóa tệp khi sử dụng. Vấn đề là nhiều chương trình Linux hy vọng họ có thể xóa tệp họ vẫn sử dụng. Nó khá thông minh.

Giả sử chương trình của bạn cần một tệp tạm thời. Nó tạo một cái, mở nó và xóa ngay lập tức - và Linux cho phép điều này. Từ giờ, nhiệm vụ thực sự giải phóng không gian đĩa (khi không cần tệp nữa) là công việc của người khác: kernel hoặc FUSE. Nhiệm vụ này sẽ được xử lý một cách duyên dáng ngay cả khi chương trình của bạn chết đột ngột hoặc bị giết chết một cách mạnh mẽ.

Mặt khác, nếu chương trình của bạn không thể xóa tệp trước, thì đây vẫn là công việc cần làm sạch khi hoàn tất; chấm dứt bất ngờ có thể để lại tập tin tạm thời "bị bỏ rơi". Và nếu người khác mở cùng một tệp thì sao? Sau đó, chương trình của bạn không thể xóa nó ngay cả khi hoàn thành và mọi thứ đều ổn với nó.

Thật tốt khi giữ cách xử lý tệp Linux này. Các tập tin như .fuse_hiddenhoặc .nfslà chi phí của triết lý này và cuối cùng chúng sẽ bị xóa. Nhưng hãy nói điều gì đó đã sai và họ sẽ không. Vẫn còn tương đối dễ dàng để phát hiện ra chúng trong quá trình bảo trì thủ công, trong khi trong Windows, bạn có thể đã "bỏ rơi" các tệp và không biết. Cách Linux dường như đối với tôi cách tiếp cận gọn gàng hơn nhiều.


Một số bài kiểm tra

Thử nghiệm của tôi:

# 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

Chuẩn bị các điểm gắn kết:

# mkdir /mnt/ext4 /mnt/ntfs

Chuẩn bị hệ thống tập tin:

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

(Đầu ra trò chuyện bị mkfs.ntfsbỏ qua.)

Gắn kết:

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

Sử dụng đĩa ban đầu:

# 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

Tạo tập tin:

# 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

Sử dụng đĩa:

# 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

Mở tệp, sau đó xóa:

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

Sử dụng đĩa:

# 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

Vì vậy, mặc dù loại bỏ không gian đĩa vẫn được sử dụng. Điều này là do các tập tin vẫn đang mở.

Các tập tin thực tế:

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

/mnt/ntfs/:
.fuse_hidden0000000200000001

Tại thời điểm này tôi tạo các bản sao của các hệ thống tập tin (để so sánh sau). Tôi biết nói chung tôi không nên làm điều này trong khi chúng được gắn kết nhưng ý tưởng là mô phỏng thiết lập lại cứng trước khi tôi đóng các tệp. Tôi vẫn muốn các hệ thống tập tin sao chép sạch sẽ, do đó synclệnh. Ngoài ra, --reflink=alwaystùy chọn cho phép tôi tạo các bản sao giống như ảnh chụp nhanh trên hệ thống tệp Btrfs của mình ở đâu image-ext4image-ntfsđược lưu trữ; trong thử nghiệm này đồng bằng cpnên làm việc là tốt.

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

Tôi có thể kiểm tra xem copy-ext4có sạch không:

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

Thật không may là không có fsck.ntfs.

Hãy tiếp tục với các hệ thống tập tin gốc. Đóng các tệp:

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

Sử dụng đĩa:

# 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

Nội dung:

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

/mnt/ntfs/:

Các .fuse_hiddentập tin không còn nữa và không gian đĩa là miễn phí một lần nữa. Các tập tin biến mất khi nó không còn cần thiết.

Hãy xem điều gì xảy ra sau khi thiết lập lại mô phỏng, khi các tệp không được đóng đúng cách. Gắn bản sao:

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

Sử dụng đĩa:

# 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

Các tập tin thực tế:

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

/mnt/ntfs/:
.fuse_hidden0000000200000001

Vì vậy, đây là một kịch bản khi bạn nên xóa .fuse_hidden(các) tệp theo cách thủ công . Lưu ý rằng nếu ntfs-3gkhông tạo một tệp như vậy và từ chối xóa ở vị trí đầu tiên, thì bây giờ bạn sẽ có một tệp còn lại với tên cũ của nó; bạn sẽ có nó ngay cả khi không thiết lập lại và điều này có nghĩa là bảo trì nhiều hơn.

Tôi tin rằng các hệ thống tập tin dựa trên inode hoàn toàn không cần bảo trì như vậy.

Làm sạch:

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

1
Có một số tình huống khi bạn thực sự CẦN xóa các tệp đó. Chẳng hạn, tôi đang sử dụng Guxer để cắt luồng âm thanh trong khi lưu trữ chúng trong ramdisk (tmpfs) cho quy trình đồng thời khác để kiểm tra chúng (nó có thể trì hoãn nhiều hay ít, tùy thuộc vào tính khả dụng). Vấn đề là, tại sao, Gstreamer không thực sự "miễn phí" tài nguyên hàng đợi, vì vậy khi chương trình thứ 2 của tôi xóa nó, nó vẫn ở đó tiêu thụ RAM rất có giá trị, làm đầy máy chủ. Bây giờ, thiết kế nói rằng nếu (i + 1). tồn tại, sau đó (i). sẽ không bao giờ được truy cập lại bởi quá trình đầu tiên. Không có gì khác để cầu chì ở đó, vì vậy nó an toàn để lau
DGoiko

giải pháp thích hợp sẽ là đào sâu vào Gstreammer để phát hiện lý do tại sao nó không phát hành tệp và làm cho nó phát hành nó, tất nhiên, nhưng chúng tôi đã ở trên đồng hồ.
DGoiko
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.