Проблемы Samba4 с Time Machine: невозможно создать новую резервную копию на общей папке Samba

Примечание: изначально размещено на StackExchange. Я не уверен, какое расположение более подходящее, приношу свои извинения, если дублирование вызывает проблемы.

TL; DR: Time Machine не может создать новую резервную копию на моем общем диске, но может добавить к существующая резервная копия .

Я использую macOS Catalina, и моя Time Machine выполняет резервное копирование на сервер Debian 10 с помощью NetAtalk и Avahi. Поскольку Mavericks macOS предпочитает SMB, а SMB немного быстрее, я решил перейти на использование SMB для общих ресурсов Time Machine. На новом общем ресурсе AFP я могу запустить новое резервное копирование Time Machine в системных настройках, и оно без жалоб создаст новый .sparseimage.

Если я использую тот же каталог (/ usr / local / smb), такие же разрешения и т. Д., И создаю общий ресурс samba, когда Time Machine пытается создать новую резервную копию, выдает ошибку: «Time Machine не может завершите резервное копирование на SERVER.local. Не удалось создать резервный образ диска »

Если я сначала подключусь к общему ресурсу с помощью AFP и сделаю начальное резервное копирование, я смогу подключиться с помощью SMB и добавить последующие инкрементные резервные копии без ошибок. Я подумал, что это может быть проблема с разрешениями, но для целей отладки у меня / usr / local / smb установлено значение 0777, и я все еще получаю сообщение об ошибке.

ls -la , показывающий разрешения для точки общего доступа:

drwxrwxrwx  5 root smbusers 4096 Apr  3 12:35 smb

Я нахожу следующая, возможно, полезная ошибка в журнале:

Failed to create '/Volumes/.timemachine/SERVER._smb._tcp.local/DDE06691-7411-41DD-8419-24FEFC21CE29/TimeMachine Set A - SMB/8E394711-7E3F-520B-800C-192D4F680177.sparsebundle', results: {
}, error: 13 Permission denied

afp.conf:

[Global]
; Global server settings
vol preset = default_for_all
log file = /var/log/netatalk.log
uam list = uams_dhx2.so,uams_clrtxt.so
save password = no

[default_for_all]
file perm = 0664
directory perm = 0774
cnid scheme = dbd

[Time Machine Set A - AFP]
path = /usr/local/smb
time machine = yes
vol size limit = 4000000

Я использую некоторые параметры smb.conf, предложенные в этом GitHub: https://gist.github.com/ChloeTigre/4c2022c0d1a281deedba6f7539a2e3ae

smb.conf:

[global]

## Browsing/Identification ###

# Change this to the workgroup/NT-domain name your Samba server will part of
   workgroup = WORKGROUP
   wins support = yes

#### Debugging/Accounting ####

# This tells Samba to use a separate log file for each machine
# that connects
   log file = /var/log/samba/log.%m

# Cap the size of the individual log files (in KiB).
   max log size = 1000

# We want Samba to only log to /var/log/samba/log.{smbd,nmbd}.
# Append syslog@1 if you want important messages to be sent to syslog too.
   logging = file

# Do something sensible when Samba crashes: mail the admin a backtrace
   panic action = /usr/share/samba/panic-action %d

###MacOS compatability stuff
guest account = smbguest
min protocol = SMB2
map acl inherit = yes
vfs objects = catia fruit streams_xattr  
fruit:metadata = netatalk
fruit:model = MacSamba
fruit:posix_rename = yes 
fruit:veto_appledouble = yes

durable handles = yes
kernel oplocks = no
kernel share modes =no
posix locking = no
smb2 leases = yes


#Turned off for testing compatability
#fruit:wipe_intentionally_left_blank_rfork = yes 
#fruit:delete_empty_adfiles = yes 

####### Authentication #######

# Server role. Defines in which mode Samba will operate. Possible
# values are "standalone server", "member server", "classic primary
# domain controller", "classic backup domain controller", "active
# directory domain controller". 
#
# Most people will want "standalone server" or "member server".
# Running as "active directory domain controller" will require first
# running "samba-tool domain provision" to wipe databases and create a
# new domain.
   server role = standalone server

   obey pam restrictions = yes

# This boolean parameter controls whether Samba attempts to sync the Unix
# password with the SMB password when the encrypted SMB password in the
# passdb is changed.
   unix password sync = yes

# For Unix password sync to work on a Debian GNU/Linux system, the following
# parameters must be set (thanks to Ian Kahan <<kahan@informatik.tu-muenchen.de> for
# sending the correct chat script for the passwd program in Debian Sarge).
   passwd program = /usr/bin/passwd %u
   passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .

# This boolean controls whether PAM will be used for password changes
# when requested by an SMB client instead of the program listed in
# 'passwd program'. The default is 'no'.
   pam password change = yes

# This option controls how unsuccessful authentication attempts are mapped
# to anonymous connections
   map to guest = bad user

######Security#######
security = user
valid users = @smbusers
username map = /etc/samba/users.map
guest ok = no

# Allow users who've been granted usershare privileges to create
# public shares, not just authenticated ones
   usershare allow guests = yes

#======================= Share Definitions =======================

[TimeMachine Set A - SMB]
path = /usr/local/smb
comment = SMB Time Machine Destination Set A
browsable = yes
writeable = yes
create mode = 0664     #tried turning this off, no fix
directory mode = 0777  #tried turning this off, no fix
vfs objects = catia fruit streams_xattr
fruit:aapl = yes
fruit:time machine = yes
#guest ok = yes
fruit:time machine max size = 3.9T  #tried turning this off, no fix
inherit acls = yes
2
задан 7 April 2020 в 03:00
2 ответа

Подумал, что выложу для людей дополнительную информацию. Мой рабочий файл smb.conf выглядит следующим образом. Добавление fruit: metadata = stream сработало для меня недолго, поэтому ниже приведены результаты часов дополнительного тестирования.

Обратите внимание, что это на Debian 10 (Buster), поэтому такие вещи, как команда смены пароля будет другим в других дистрибутивах. Также обратите внимание, что порядок модулей в настройке vfs objects = catia fruit streams_xattr важен и важен.

# NOTE: Whenever you modify this file you should run the command
# "testparm" to check that you have not made any basic syntactic 
# errors. 
[global]
   workgroup = WORKGROUP
   min protocol = SMB2


   log file = /var/log/samba/log.%m
   max log size = 5000
   logging = file
   security = USER
   
   panic action = /usr/share/samba/panic-action %d

   server role = standalone server
   obey pam restrictions = yes
   unix password sync = yes

   passwd program = /usr/bin/passwd %u
   passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
   pam password change = yes
   username map = /etc/samba/users.map
   map to guest = bad user
   guest account = XXXYOURGUESTACCOUNT

# Time Machine settings
   vfs objects = catia fruit streams_xattr
   fruit:model = RackMac
   fruit:advertise_fullsync = true
   fruit:metadata = stream
   fruit:veto_appledouble = no
#default is yes, not necessary to specify fruit:posix_rename = no
#default is yes, not necessary to specify fruit:zero_file_id = yes
   fruit:wipe_intentionally_left_blank_rfork = yes
   fruit:delete_empty_adfiles = yes
   ea support = yes


#default is yes, not necessary to specify   fruit:aapl = yes

   # Make share visible to Windows
#Disabled for a Mac-Only network
#   lanman auth = no
#   ntlm auth = yes
#   wins support = yes
#   local master = yes
#   preferred master = yes

   # Allow symlinks
#   follow symlinks = yes
#   wide links = yes
#   unix extensions = no

#======================= Share Definitions =======================
[SHARED DRIVE]

   path = /PATH/TO/YOUR/SHARED/FOLDER
   valid users = @YOURGUESTUSERGROUP
   writable = yes
   durable handles = yes
   kernel oplocks = no
   kernel share modes = no
   posix locking = no
   vfs objects = catia fruit streams_xattr
#default is yes, not necessary to specify   ea support = yes
#default is yes, not necessary to specify browseable = yes
   read only = no
   inherit acls = yes
   fruit:time machine = yes
   fruit:metadata = stream
   fruit:locking = netatalk
   guest ok = yes

[Time Machine]
   path = /PATH/TO/YOUR/SHARED/FOLDER
   valid users = @YOURGUESTUSERGROUP
   writable = yes
   durable handles = yes
   kernel oplocks = no
   kernel share modes = no
   posix locking = no
   vfs objects = catia fruit streams_xattr
#default is yes, not necessary to specify   ea support = yes
   browseable = no
   read only = no
   inherit acls = yes
   fruit:time machine = yes
   fruit:metadata = stream
   fruit:locking = netatalk
   fruit:time machine max size = 1.9T

** РЕДАКТИРОВАТЬ: Оказывается, Samba 4.9 в Debian 10 ДЕЙСТВИТЕЛЬНО автоматически объявляет места назначения TimeMachine, пока в / etc / avahi / services нет рекламы, связанной с Samba. Моя система не рекламировала общий ресурс TimeMachine, потому что у меня также была ручная настройка общего ресурса smb для avahi. Когда я отключил ОБА, Samba должным образом прорекламировала оба.

*** СТАРЫЙ СМ. ВЫШЕ Также обратите внимание, что сборка Samba с Debian 10 в настоящее время не имеет встроенной поддержки для рекламы общих ресурсов Time Machine. Обычно указание fruit: time machine = yes заставляет Samba объявлять место назначения Time Machine через Avahi, но эта конкретная поддержка не реализована в Samba, включенной в Debian 10. Вам необходимо настроить .service определение в / etc / avahi / services / . Я создал time_machine_advert.service в этой папке. Вам нужно будет перезапустить avahi, чтобы убедиться, что он применяется с sudo systemctl restart avahi . У меня два пункта назначения «Машины времени». Множественные объекты могут быть объявлены в одном файле, просто дублируя txt-запись и увеличивая dkX, т.е. dk1, dk2 и т. Д.

<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
 <name replace-wildcards="yes">%h</name>
 <service>
   <type>_adisk._tcp</type>
   <txt-record>sys=waMa=0,adVF=0x100</txt-record>
   <txt-record>dk0=adVN=SAMBA SHARE NAME EXACTLY,adVF=0x82</txt-record>
   <txt-record>dk1=adVN=SAMBA SHARE NAME #2 EXACTLY,adVF=0x82</txt-record>
 </service>
  <service>
    <type>_smb._tcp</type>
    <port>445</port>
  </service>
</service-group>

Здесь есть несколько дополнительных полезных сайтов для настройки Samba в отношении Time Machine:

Официальное руководство команды Samba в конфигурацию Time Machine, хотя сама по себе она не дала мне рабочей конфигурации: https://wiki.samba.org/index.php/Configure_Samba_to_Work_Better_with_Mac_OS_X

Ссылка smb.conf: https: / /www.samba.org/samba/docs/current/man-html/smb.conf.5.html

vfs_fruit (модуль совместимости Apple для Samba) ссылка https://www.samba.org/ samba / docs / current / man-html / vfs_fruit.8.html

Кен Мерфи, ч. л.conf на GitHub, который наконец подтолкнул меня к краю и заставил мою установку работать: https://github.com/KenMurphy/SambaConfigs/blob/master/smb.conf

Общее руководство по Samba в Debian: https://www.antoneliasson.se/journal/time-machine-compatible-samba-on-debian-buster/

2
ответ дан 4 January 2021 в 08:01

Я столкнулся с той же проблемой, когда мой Mac отказывался создавать начальные разреженные файлы пакетов на моем сервере samba. После включения подсказок на https://wiki.samba.org/index.php/Configure_Samba_to_Work_Better_with_Mac_OS_X он наконец начал резервное копирование.

Хотя я могу только предположить, мое внимание привлек следующий комментарий: Как хранить метаданные OS X: Fruit: metadata = stream

Вы можете попробовать переключиться с netatalk на stream. Возможно, использование netatalk не позволяет машине времени хранить свои метаданные.

Удачи, Кей

1
ответ дан 4 January 2021 в 08:01

Теги

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