Совместимость файловой системы с CIFS

Проверьте журнал ядра:

nano /var/log/kern.log

В нем будет вся необходимая информация, если завершение работы было выполнено правильно, и необходимая вам отладочная информация.

Вы также можете проверить dmesg

nano /var/log/dmesg

Вы также увидите их резервные копии из предыдущих запусков / выключений, которые будут добавлены следующим образом

dmesg.0 kern.log.1

И там есть архивы, идущие дальше туда.

Вы можете сделать их более подробными, добавив дополнительные параметры в свое ядро:

  • CONFIG_PRINTK_TIME - добавить отметки времени в dmesg

  • CONFIG_DEBUG_KERNEL - включить отладку ядра

  • CONFIG_DETECT_HUNG_TASK - хорошо для выяснения причин
    зависание ядра

  • CONFIG_DEBUG_INFO - гарантирует, что вы можете декодировать ядро ​​

  • CONFIG_EARLY_PRINTK

  • CONFIG_LOG_BUF_SHIFT = 21 - устанавливает размер журнала буфера ядра на
    самый большой буфер

  • CONFIG_NETCONSOLE = m - компилирует сетевую консоль как модуль

2
21.02.2019, 01:32
2 ответа

vfat — очень ограниченная файловая система, она совершенно не подходит для любого сетевого использования и любой многопользовательской среды (это древняя файловая система MS -DOS ). Короче говоря, не используйте VFAT ни для чего, кроме флэш-накопителей USB, для максимальной совместимости.

В основном все ваши проблемы возникают из-за того, что MacOS пытается сохранить расширенные атрибуты, права на файлы и т. д. через SMB/CIFS в VFAT, который не поддерживает ничего из этого, а также не поддерживает очень длинные имена файлов или кодировку UTF. -8 имен файлов или все, что интересно современным пользователям.

Просто используйте на USB-накопителе настоящую нормальную файловую систему Linux (ext4, xfs )и все будет в порядке. Это точно решит проблемы с отсутствующими файлами, неправильными правами и разрешениями, артефактами и т.д.

По остальным вопросам:

  • SMB и CIFS — это разные названия одного и того же — сетевой файловой системы Microsoft(протокола Server Message Block). Тут какая-то путаница,потому что CIFS на самом деле была его первой версией (SMB версии 1.0 )и была заменена более новыми версиями (SMB v. 2.0, 3.0, 3.1,... ). Однако в Linux первая версия почему-то называлась «smbfs», а более новые — «cifs». В любом случае, в настоящее время как для Linux, так и для MacOS это не имеет никакого значения, оба взаимозаменяемы.

  • SMB/CIFS — это сетевая файловая система. Он вообще не имеет прямого отношения к файловой системе блочной . Это файловая система в том смысле, что она обеспечивает файловую абстракцию и общие режимы ввода/вывода; однако вы можете использовать любую сетевую файловую систему (NFS, SMB, WebDAV, AFP... )для обмена данными из любой блочной файловой системы (FAT32, ext4, HFS+, xfs, NTFS, ZFS... ).

  • Различные блочные файловые системы предоставляют разные функции (прямой ввод-вывод, списки ACL POSIX, списки ACL Windows, расширенные атрибуты, файловые потоки, «полые» файлы, управление версиями файлов, управление версиями метаданных, подтома, моментальные снимки томов... ). Различные сетевые файловые системы также предоставляют разные функции. Способы отображения функций сетевой файловой системы на базовую блочную файловую систему сильно различаются и являются бесконечным источником путаницы, боли и ошибок.

Например, CIFS, происходящий из Windows, по умолчанию использует списки ACL Windows, которые, к сожалению, не сопоставляют один -и -с ACL POSIX большинства файловых систем Unix/Linux. В настоящее время Samba решает эту проблему, используя расширенные атрибуты для хранения фактических списков управления доступом Windows, однако, если базовая блочная файловая система не поддерживает xattr , у вас возникнут проблемы.

3
27.01.2020, 21:58

Позвольте мне попытаться ответить на несколько ваших вопросов.

Первый CIFS — это версия протокола SMB. См., например. вики-страница SMB .

Второй вопрос касался файловой системы и сетевого протокола. CIFS/SMB — это сетевые протоколы.То, что касается файловой системы, пришло просто из мира linux :. Вы можете mountиспользовать такой общий ресурс, как и любую другую файловую систему, (предполагая права )для прозрачного доступа к файлам. Итак, у вас есть программа mount.cifs, которая обрабатывает процесс монтирования этого конкретного протокола.

Согласно вашему третьему вопросу :Ни один сетевой протокол никоим образом не связан с базовой файловой системой. Он только указывает, как данные передаются по линии (абстрактным образом ). Данные могут поступать напрямую с жесткого диска (, также известного как файловая система ), или могут генерироваться динамически (, подумайте, что произойдет, если вы экспортируете папки /procили /sys.... ).

Однако протокол был разработан с учетом определенного варианта использования. Насколько мне известно, это была система FAT. Были сделаны расширения, чтобы обеспечить расширенные права также в Linux/Unix. Тут я немного подустал, что возможно и что реализовано (, тем более, что и сервер, и клиент должны найти общую максимальную версию протокола ). Здесь могут иметь значение разные версии программного обеспечения на разных машинах, но я не уверен.


Вместо того, чтобы давать вам основную информацию, которая требует от вас дальнейшего изучения, я вместо этого рассмотрю некоторые из ваших заявленных проблем:

Ваши «упущения и артефакты» вызваны проблемами с кодовой страницей/набором символов. Это происходит только для символов, отличных от -ascii, верно? Я не знаю, как это устроено на данный момент. Можете ли вы сначала убедиться, что файлы на USB-устройстве записаны с правильными именами в файловой системе? Затем убедитесь, что RPi также может читать файлы (без CIFS, перейдите туда с помощью sshили непосредственно подключенного монитора/клавиатуры ).

Различные базовые файловые системы поддерживают разные наборы символов в именах файлов, поэтому SMB можно настроить для обработки имен файлов по-разному.Это возможность поддерживать как можно больше базовых файловых систем (, см. man smb.conf). Это также может быть проблемой монтирования на вашем клиенте, где предполагается неправильная кодировка. Поэтому начните с создания системы и проверки каждого шага.

Что касается упомянутых вами проблем с разрешениями пользователей, вам нужен либо аутентифицированный доступ (пользователь + пароль ), настроить сервер samba/cifs для использования пользователя по умолчанию с разрешениями по умолчанию, либо проблема связана с вашим хранилищем. Снова снизу вверх:

  • Какому пользователю/группе принадлежат файлы на USB-накопителе? Они лежат на vfat, где не хранится ни один владелец. Таким образом, ядро ​​Linux применяет пользователя к файлам в зависимости от параметров монтирования.
  • Убедитесь, что все файлы/папки принадлежат этому пользователю (еще раз на Rpi, используя ssh/терминальный доступ ).
  • Проверьте, получают ли новые созданные файлы (с терминала )такие же права. Если нет, примите свою конфигурацию монтирования (варианты монтирования uid, gid, umask, потенциально dmaskиfmask). См. man mount.
  • Создайте файл/папку из SMB/CIFS и также проверьте UID/GID/права. Если это гостевой доступ, create maskи directory maskконфигурации samba(man smb.conf)может быть достаточно. Если нет, вам следует более подробно описать свои проблемы.
2
27.01.2020, 21:58

Теги

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