Time Machine 的 Samba4 問題:無法在 Samba 共享上創建新備份
注意:最初發佈在 StackExchange 上。我不確定哪個位置更合適,如果重複導致問題,我深表歉意。
TL;DR:Time Machine 無法在我的共享驅動器上創建新備份,但可以添加到現有備份。
我正在執行 macOS Catalina,我的 Time Machine 使用 NetAtalk 和 Avahi 備份到 Debian 10 伺服器。由於 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
我正在使用這個 GitHub 中建議的一些 smb.conf 選項: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
以為我會為人們發布一些額外的資訊。我目前工作的 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
**編輯:只要
/etc/avahi/services
. 我的系統沒有宣傳 TimeMachine 共享,因為我還為 avahi 手動設置了 smb 共享。當我禁用 BOTH 時,Samba 正確地宣傳了兩者。*** 舊見上文 另請注意,使用 Debian 10 建構的 Samba 目前沒有內置支持廣告 Time Machine 共享。通常指定
fruit:time machine = yes
將觸發 Samba 通過 Avahi 通告 Time Machine 目標,但此特定支持不是使用 Debian 10 中包含的 Samba 建構的。您需要在 .service 中配置一個 .service 定義/etc/avahi/services/
。我在該文件夾中創建了 time_machine_advert.service。您需要重新啟動 avahi 以確保它與sudo systemctl restart avahi
. 我有兩個 Time Machine 目的地。通過簡單地複制 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>
這裡還有一些關於 Time Machine 的 Samba 配置有用的站點:
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(Samba 的 Apple 兼容性模組)參考https://www.samba.org/samba/docs/current/man-html/vfs_fruit.8.html
Ken Murphy 在 GitHub 上的 smb.conf 最終將我推到了邊緣並讓我的設置正常工作:https ://github.com/KenMurphy/SambaConfigs/blob/master/smb.conf
Debian 上的一般 Samba 指南:https ://www.antoneliasson.se/journal/time-machine-compatible-samba-on-debian-buster/
我遇到了同樣的問題,我的 Mac 拒絕在我的 samba 伺服器上創建初始稀疏捆綁文件。在合併https://wiki.samba.org/index.php/Configure_Samba_to_Work_Better_with_Mac_OS_X上的提示後,它終於開始了備份。
雖然我只能假設,但以下評論引起了我的注意:如何儲存 OS X 元數據:fruit:metadata = stream
您可以嘗試從 netatalk 切換到流。也許使用 netatalk 會阻止時間機器儲存其元數據。
祝你好運,凱