Можно ли использовать общий ресурс Samba для резервных копий Time Machine на macOS и копирования файлов через Finder?

Вопрос или проблема

Я хочу использовать общий ресурс Samba для резервного копирования macOS Time Machine, а также для обмена файлами (копировать файлы с помощью Finder).

Возможно ли это, и если да, как исправить ошибки, с которыми я сталкиваюсь?

Я могу делать резервное копирование macOS с помощью ПО Time Machine, однако, когда я пытаюсь скопировать файлы в тот же общий ресурс Time Machine, это заканчивается ошибкой:

Операция не может быть завершена, так как произошла неожиданная ошибка (код ошибки 100093).

Когда я копирую файлы, создается пустой файл (ноль байт), и выводится ошибка.

Я могу создавать папки, но не могу копировать файлы с помощью Finder.

Вот мой конфиг Samba:

[homes]
comment = Home Directories
browsable = no
writable = yes
create mask = 0600
directory mask = 0700

[timemachine]
# https://www.samba.org/samba/docs/current/man-html/vfs_fruit.8.html
comment = Time Capsule
path = /media/timemachine
browseable = yes
writeable = yes
create mask = 0600
directory mask = 0700
read only = no
guest ok = no
valid users = <user_name> # замените на вашу учетную запись
write list = <user_name>  # замените на вашу учетную запись
vfs objects = catia fruit streams_xattr
fruit:aapl = yes
fruit:time machine = yes

var/log/messages имеет следующую запись:

Jan  8 19:21:05 pi daemon.err smbd[13131]: [2025/01/08 19:21:05.611930,  0] ../../source3/modules/vfs_fruit.c:2684(fruit_pwrite_meta_stream)
Jan  8 19:21:05 pi daemon.err smbd[13131]:   fruit_pwrite_meta_stream: On-demand create [iDeaVim.txt:AFP_AfpInfo] in write failed: No such file or directory

Похоже, здесь происходит ошибка, ссылка на код GitHub.


Детали файловой системы для записи [timemachine]

/dev/sda1 on /media/timemachine type exfat (rw,relatime,uid=1000,gid=1000,fmask=0002,dmask=0002,allow_utime=0020,iocharset=utf8,errors=remount-ro)

uid 1000 и gid 1000 — это мой пользовательский идентификатор.


Вот global конфиг:

[global]
create mask = 0664
directory mask = 0775
veto files = /.DS_Store/lost+found/
delete veto files = true
nt acl support = no
inherit acls = yes
ea support = yes
security = user
passdb backend = tdbsam
map to guest = Bad User

vfs objects = catia fruit streams_xattr recycle

acl_xattr:ignore system acls = yes
recycle:repository = .recycle
recycle:keeptree = yes
recycle:versions = yes

fruit:aapl = yes
fruit:metadata = stream
fruit:model = MacSamba
fruit:veto_appledouble = yes
fruit:posix_rename = yes
fruit:zero_file_id = yes
fruit:wipe_intentionally_left_blank_rfork = yes
fruit:delete_empty_adfiles = yes

server max protocol = SMB3
server min protocol = SMB3
workgroup = WORKGROUP
server string = NAS
server role = standalone server
dns proxy = no

Команды, которые я использовал для изменения файловой системы, после чего все заработало.

rc-service samba stop
mkfs.ext4 /dev/sda1
vim /etc/fstab
/dev/sda1   /media/timemachine  ext4    rw,defaults 0 0
mount -a
cd /media && chown -R <user_name>:<group> ./timemachine
rc-service samba start

У вас есть streams_xattr, но вы используете файловую систему, которая не поддерживает xattr – exFAT не имеет возможности хранить расширенные атрибуты, которые Samba пытается использовать для эмуляции альтернативных потоков (как и не может хранить фактические альтернативные потоки, как это делает NTFS в Windows).

Вы можете попробовать использовать streams_depot вместо этого, но на самом деле вам следует сразу перейти на более надежную файловую систему, такую как Ext4 или XFS, для вашего резервного хранилища. (Обе эти системы поддерживают расширенные атрибуты по умолчанию.)

Ответ или решение

Использование Samba для резервного копирования macOS Time Machine и обмена файлами через Finder возможно, однако, для решения возникших ошибок необходимо учесть несколько важных моментов.

Проблема и её контекст

Вы столкнулись с проблемой при копировании файлов на общий диск Time Machine через Finder, получая ошибку: "(error code 100093)". Анализируя ваши логи:

fruit_pwrite_meta_stream: On-demand create [iDeaVim.txt:AFP_AfpInfo] in write failed: No such file or directory

становится ясно, что основной причиной является файловая система exFAT. Она не поддерживает расширенные атрибуты (xattr), что приводит к ошибкам при использовании Samba с модулем streams_xattr.

Решение проблемы

Для успешного использования Samba в вашем сценарии, необходимо перейти на файловую систему, которая поддерживает расширенные атрибуты, такие как Ext4 или XFS. Это обеспечит корректную работу с метаданными и потоками, необходимыми для macOS Time Machine.

Шаги для исправления

  1. Переключение файловой системы:

    • Остановите службу Samba:
      rc-service samba stop
    • Форматируйте диск в Ext4:
      mkfs.ext4 /dev/sda1
    • Обновите файл /etc/fstab для правильного монтирования:
      /dev/sda1 /media/timemachine ext4 rw,defaults 0 0
    • Примонтируйте файловую систему:
      mount -a
    • Установите правильного владельца и группу для каталога:
      cd /media && chown -R <user_name>:<group> ./timemachine
  2. Настройка и перезапуск Samba:

    • После тех изменений, перезапустите службу:
      rc-service samba start
    • Убедитесь, что ваша конфигурация Samba включает необходимые vfs-объекты и настройки, установленные для Ext4.
  3. Обратите внимание на настройки:

    • Убедитесь, что параметры fruit:metadata = stream и vfs objects = catia fruit streams_xattr соответствуют потребностям системы, так как для Ext4 это работоспособно.
    • Ваша конфигурация должна также обеспечить права на запись и чтение для указанного пользователя в [timemachine].

Рекомендации

Обратите внимание, что переключение на Ext4 не только решит текущие ошибки, но и повысит надежность хранения данных. Кроме того, использование Ext4 поддерживает широкий набор POSIX атрибутов, что повлияло положительно на общую производительность и устойчивость системы.

Следуя этим советам, вы сможете использовать Samba для Time Machine и обмена файлами через Finder эффективно, без возникновения ошибок.

Оцените материал
Добавить комментарий

Капча загружается...