Каковы побочные эффекты удаления fuse с сервера Ubuntu 16.04?

Каждый раз, когда я хочу удалить фильм с этой машины, он просто переименовывается в .fuse_hidden<some_long_number> .

Остановка сервера фильмов (Plex) не решает проблему, единственный способ действительно избавиться от файла - это перезагрузить компьютер. Я попытался с помощью lsof найти службу, используя файл, но безрезультатно.

Если я удаляю fuse (sudo apt-get remove --auto-remove fuse), каковы некоторые подводные камни? Моя система станет нестабильной?

Удалив ли fuse , приведет ли удаление файла к ожидаемым результатам? т.е. файл исчезнет?

1 ответ1

2

Короткий ответ

Удаление fuse , вероятно, приведет к невозможности монтировать файловую систему.

FUSE является Filesystem в Userspace , который означает , что есть в пользовательском пространстве программы , которая обрабатывает все операции , выполняемые на этой конкретной файловой системе ( в то время как без плавких поддержки файловой системы работает в) ядрах системы . Это может быть 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 не создавал такой файл и вообще отказывал в удалении, у вас теперь был бы оставшийся файл со старым именем; Вы бы сделали это даже без перезагрузки, а это означает еще больше обслуживания.

Я считаю, что файловые системы, основанные на инодах, вообще не нуждаются в таком обслуживании.

Очистка:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .