DirectConnect

指南

如何在 Mac 和 Linux 之間傳輸檔案

要在 Mac 和 Linux 之間移動檔案,可以透過 SSH 用 rsync 拷貝、分享 Mac 檔案夾並在 Linux 檔案管理程式中開啟,或用 Samba 分享 Linux 檔案夾。每種方法都需要在兩台電腦上設定,而且檔案分享處理小檔案檔案夾很慢。

為什麼比想像中難

  • 沒有共同的快速傳送功能。AirDrop 是 Apple 專屬,Linux 桌面上也沒有 Mac 能理解的功能。
  • 每種方法都需要帳號和密碼。SSH 和 Mac 檔案共享使用 Mac 帳號登入。Samba 則需要另外的密碼。
  • Linux 預設不會與 Mac 分享檔案夾。你得安裝並設定 Samba,並開啟防火牆。在 Fedora 等發行版上,SELinux 也必須允許分享的檔案夾。
  • Samba 需要針對 Mac 的設定。沒有 Apple 相容選項時,Finder 會在你的檔案旁留下額外的隱藏 ._ 檔案。
  • 線材連線需要位址。Mac 會在線材上自己指定一個 169.254 位址。Linux 則常常在等一個不存在的 DHCP 伺服器,結果完全拿不到 IPv4 位址。
  • 小檔案慢得像在爬。在我們的測試中,透過 10 Gb/s Thunderbolt 連線,Mac 把 20,000 個小檔案(331 MB)拷貝到 Samba 分享花了將近四分鐘。
  • 磁碟機無法通用。Mac 無法寫入 Linux 的 ext4 或 btrfs 磁碟機,Linux 對 Mac 的 APFS 磁碟機支援也很差。只有 exFAT 在兩邊都好用。
  • 線材可能只跑一半速度。在我們的測試中,一台 Linux 筆電和一台 Mac 只用 40 Gb/s 線材的一條 20 Gb/s 通道連接。

接上線材並找出每台電腦的位址

如果兩台電腦都有 Thunderbolt 或 USB4,用線材連接就能建立一條直接的網路連線。Mac 稱它為 Thunderbolt 橋接器,Linux 則命名為 thunderbolt0。沒有這些連接埠時,請改用家用網路及其位址。請參閱用 Thunderbolt 傳輸檔案。

在 Mac 上

  1. 接上線材。
  2. 在系統設定中選擇網路,然後選擇 Thunderbolt 橋接器。
  3. 按一下詳細資訊⋯並記下 IP 位址。線材上沒有其他裝置時,它以 169.254 開頭。

在 Linux 電腦上

在終端機中執行這個指令。它只會讀取設定:

ip -4 addr show thunderbolt0

inet 169.254… 這一行就是線材的位址。如果沒有 inet 這一行,表示 NetworkManager 還在等 DHCP。請為線材設定自行指定的位址:

  1. 在設定中選擇網路,然後按一下線材有線連線旁的設定按鈕。
  2. 在 IPv4 分頁中選擇僅限鏈路本地,然後按一下套用。
  3. 把連線關閉再開啟,然後再執行一次 ip 指令。

請一律用 169.254 位址連線,而不是電腦名稱。名稱可能會找到電腦的 Wi-Fi 位址,拷貝就會走 Wi-Fi。

方法 1:從終端機透過 SSH 使用 rsync

rsync 適合習慣使用終端機的人。它會拷貝整個檔案夾,如果拷貝中斷,再執行一次會略過已經拷貝過的檔案。所有指令都在 Linux 電腦上執行,所以只需要設定 Mac。

在 Mac 上

  1. 在系統設定中選擇一般,接著選擇共享,然後開啟遠端登入。
  2. 按一下遠端登入旁的資訊按鈕,確認你的帳號已被允許。
  3. 要從桌面、文件或下載項目拷貝,請在同一個面板中開啟允許遠端使用者完整取用磁碟。否則 macOS 會以「Operation not permitted」拒絕存取這些檔案夾。

在 Linux 電腦上

  1. 在終端機中執行 rsync -a --progress user@address:/Users/user/Projects/ ~/Projects/。把 user 換成 Mac 帳號的簡稱(即其個人專屬檔案夾的名稱),把 address 換成 Mac 的 169.254 位址。
  2. 第一次連線時,SSH 會詢問是否信任這台 Mac。請輸入 yes。
  3. 輸入 Mac 帳號的密碼。rsync 會在拷貝時列出每個檔案。

把兩個路徑對調即可反方向拷貝。結尾的 / 很重要:有它時,rsync 拷貝檔案夾的內容,沒有它時則拷貝檔案夾本身。含有空格的路徑請加上引號。這裡沒有可以瀏覽的介面,所以開始前你需要知道確切的路徑。

方法 2:分享 Mac 檔案夾並在 Linux 中開啟

Mac 檔案共享不需要在 Linux 上安裝任何軟體。GNOME「檔案」和大多數其他 Linux 檔案管理程式都能開啟 SMB 分享。

在 Mac 上

  1. 在系統設定中選擇一般,接著選擇共享,然後開啟檔案共享。
  2. 按一下檔案共享旁的資訊按鈕。在共享的檔案夾下按一下 +,然後選擇檔案夾。
  3. 如果 Linux 需要把檔案拷貝進來,請在使用者下把你的帳號設為讀取和寫入。
  4. 按一下選項⋯,在 Windows 檔案共享下選取你的帳號,輸入它的密碼,然後按一下完成。少了這個步驟,Linux 就無法登入。

在 Linux 電腦上

  1. 在「檔案」中按 Ctrl+L,輸入 smb:// 和 Mac 的位址,例如 smb://169.254.20.30,然後按 Enter。
  2. 選擇註冊使用者,輸入 Mac 帳號的簡稱和密碼,然後按一下連線。
  3. 開啟分享的檔案夾。把檔案拖進或拖出。

用這種方式拷貝大型檔案效果很好。小檔案檔案夾則很慢,因為檔案分享會依序開啟、寫入並關閉每個檔案。

方法 3:用 Samba 分享 Linux 檔案夾

想在 Finder 中瀏覽 Linux 電腦的檔案時,請從 Linux 分享。下面的每個指令都會變更系統,並需要你的 sudo 密碼。把 you 換成你的 Linux 使用者名稱。

在 Linux 電腦上

  1. 安裝 Samba:在 Fedora 上執行 sudo dnf install samba,在 Ubuntu 上執行 sudo apt install samba。
  2. 把分享加到 /etc/samba/smb.conf 的結尾,如下所示。fruit 這一行會加入 Apple 相容選項。
  3. 用 sudo smbpasswd -a you 為你的使用者設定 Samba 密碼。它和你的登入密碼是分開的。
  4. 開啟防火牆。在 Fedora 上執行 sudo firewall-cmd --permanent --add-service=samba,然後執行 sudo firewall-cmd --reload。在 Ubuntu 上,除非你自己開啟過,否則防火牆是關閉的。如果已開啟,請執行 sudo ufw allow samba。
  5. 在 Fedora 上,讓 SELinux 允許分享該檔案夾:執行 sudo semanage fcontext -a -t samba_share_t "/home/you/Projects(/.*)?",然後執行 sudo restorecon -R /home/you/Projects。
  6. 啟動 Samba:在 Fedora 上執行 sudo systemctl enable --now smb,在 Ubuntu 上執行 sudo systemctl restart smbd。
[Projects]
   path = /home/you/Projects
   valid users = you
   read only = no
   vfs objects = catia fruit streams_xattr

在 Mac 上

  1. 在 Finder 中選擇前往 > 連接伺服器⋯。
  2. 輸入 smb:// 和 Linux 電腦的位址,例如 smb://169.254.40.50,然後按一下連線。
  3. 選擇註冊使用者,輸入你的 Linux 使用者名稱和 Samba 密碼,然後按一下連線。
  4. 選擇 Projects 分享。它會在 Finder 中開啟。

在我們透過 10 Gb/s Thunderbolt 連線的測試中,Mac 從 Samba 分享拷貝 20,000 個小檔案(331 MB)花了 114 秒,拷貝到分享則花了 238 秒。一個 4 GiB 檔案在兩個方向的拷貝速度都約為 7.6 Gb/s。

睡眠、重新開機或拔掉線材後

這裡的每種方法都只有在線材連線建立時才能運作。任一台電腦睡眠或你拔掉線材時,連線就會中斷。

  • rsync 因連線錯誤而停止。再執行一次同樣的指令。它會略過已經抵達的檔案。
  • 分享的檔案夾中斷連線。Finder 會警告與伺服器的連線已中斷,「檔案」則會關閉分享。請重新連線並登入。
  • 位址可能會改變。拔掉線材後,自行指定的位址可能會改變,所以重新連線前請再查一次。
  • 重新開機後,分享仍然開啟。遠端登入、檔案共享和已啟用的 Samba 服務都會自己重新啟動。你仍然需要從另一台電腦重新連線。

請參閱為什麼網路分享在睡眠後會中斷。

方法 4:exFAT 磁碟機

把磁碟機格式化為 exFAT,再把檔案拷貝進去和拷貝出來。兩台電腦都不需要設定,沒有 Thunderbolt 或 USB4 也能用,但每個檔案都要拷貝兩次,而且磁碟機需要有足夠的可用空間。