Вопрос или проблема
Я хочу использовать общий ресурс 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.
Шаги для исправления
-
Переключение файловой системы:
- Остановите службу 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
- Остановите службу Samba:
-
Настройка и перезапуск Samba:
- После тех изменений, перезапустите службу:
rc-service samba start
- Убедитесь, что ваша конфигурация Samba включает необходимые vfs-объекты и настройки, установленные для Ext4.
- После тех изменений, перезапустите службу:
-
Обратите внимание на настройки:
- Убедитесь, что параметры
fruit:metadata = stream
иvfs objects = catia fruit streams_xattr
соответствуют потребностям системы, так как для Ext4 это работоспособно. - Ваша конфигурация должна также обеспечить права на запись и чтение для указанного пользователя в
[timemachine]
.
- Убедитесь, что параметры
Рекомендации
Обратите внимание, что переключение на Ext4 не только решит текущие ошибки, но и повысит надежность хранения данных. Кроме того, использование Ext4 поддерживает широкий набор POSIX атрибутов, что повлияло положительно на общую производительность и устойчивость системы.
Следуя этим советам, вы сможете использовать Samba для Time Machine и обмена файлами через Finder эффективно, без возникновения ошибок.