Некоторые файлы на общих ресурсах Samba отображаются как папки

Ubuntu 20.04.1, Samba pkg 2:4.11.6+dfsg-0ubuntu1.2

Недавно установил общий ресурс Samba на моей машине Ubuntu; ничего причудливого, просто общий ресурс под названием "media" с тремя подкаталогами - Movies, TV, & Photos.

Все было нормально в течение недели, но со вчерашнего дня все файлы в каталоге Photos отображаются как каталоги. При доступе к ресурсу Samba из MacOS (smb://myserver/media) все файлы отображаются значком "папка", а при cd в папку через терминал все файлы перечислены как drwx при выполнении ls -al. В таком состоянии файлы невозможно нормально использовать. Даже если я скопирую этот файл на машину MacOS, он останется в виде каталога. Доступ к файлам на самой машине Ubuntu (т.е. локально) показывает, что файлы целы и все выглядит нормально.

Что я пробовал для решения проблемы:

  • Перезагрузить компьютер Ubuntu.
  • Перезапустить службу smbd.
  • Добавил min protocol = SMB2 и client min protocol = SMB2 в /etc/samba/smb.conf
  • Перезапустил компьютер MacOS.
  • Скопируйте пострадавшие файлы в другой каталог на общем ресурсе.
  • Убедился, что мой пакет Samba обновлен.

Это странно, потому что файлы в других каталогах на ресурсе ведут себя нормально, и файлы в каталоге Photos вели себя нормально в течение недели, прежде чем это внезапно произошло.

Интересно, что это похоже на старую ошибку, но я использую версию Samba, которая исправляет эту проблему.

Любая помощь будет очень признательна; поскольку я не делал никаких изменений, которые привели к такому поведению, я не уверен, что стирание и перезагрузка (навсегда) исправят это. Я надеялся использовать эту коробку в качестве NAS, но невозможность доступа к файлам является серьезным препятствием.

Терминал

File GUI

*** EDIT: Похожее поведение на Windows

0
задан 1 November 2020 в 07:13

1 ответ

У меня возникла та же проблема, и решение было найдено для меня следующим образом:

Все затронутые файлы/папки имели расширенный атрибут user.DOSATTRIB. При выполнении getfattr #filename результат «плохого» файла будет примерно таким:

getfattr Borat\ \(2006\).mp4
# file: Borat (2006).mp4
user.DOSATTRIB

Чтобы решить эту проблему, я удалил расширенный атрибут с помощью команды setfattr -x user.DOSATTRIB # имя файла. Итак, для приведенного выше примера выполнение:

setfattr -x user.DOSATTRIB Borat\ \(2006\).mp4
getfattr Borat\ \(2006\).mp4

не вернуло расширенных атрибутов, и мой общий сетевой файл снова стал доступным.

В настоящее время я выясняю, как запустить setfattr -x user.DOSATTRIB рекурсивно для моих папок. Я отредактирую этот ответ, когда разберусь.

Обновление: Итак, я сделал небрежное решение.

  1. Сначала я использовал команду getfattr -R Movies > DOS-Movies.txt в каталоге НАД папкой с фильмами. Приведенная выше команда запускает getfattr рекурсивно для папки с фильмами и возвращает все файлы и папки с расширенными атрибутами, а затем сохраняет их в текстовом файле.
  2. Я открыл этот текстовый файл в Notepad++, чтобы немного почистить его, так как присутствовали другие атрибуты, которые я не хотел удалять, такие как «user.encryptable».
  3. Я использовал регулярное выражение (?-is)^.+\Ruser.encryptable\R для удалите строку, содержащую этот атрибут, И ПРЕДЫДУЩУЮ СТРОКУ (имя файла). Я также удалил все пустые строки и получил файл #: Movies/Dune (1984)/Dune (1984).mp4 = только файлы с расширенным атрибутом DOSATTRIB, по одному элементу в строке.Я также использовал Find/Replace, чтобы найти \r\n и заменить на "\r\n, чтобы добавить символ " в конце каждой строки.
  4. Команда для удаления атрибута: setfattr -x user.DOSATTRIB, поэтому я выполнил простой поиск/замену, и каждая строка в конце выглядела так: setfattr -x user.DOSATTRIB «Movies/Dune (1984)/Dune (1984).mp4»
  5. Затем я просто вставил команды, которые удалили DOSATTRIB для всех файлов и папок, снова сделав их доступными для чтения из Windows.

Надеюсь, это поможет!

8
ответ дан 6 January 2021 в 11:59

Другие вопросы по тегам:

Похожие вопросы: