DirectConnect

指南

如何在 Mac 和 Linux 之间传输文件

要在 Mac 和 Linux 之间移动文件,可以通过 SSH 用 rsync 拷贝、共享 Mac 文件夹并在 Linux 文件管理器中打开,或者用 Samba 共享 Linux 文件夹。每种方法都需要在两台电脑上设置,而且文件共享处理小文件文件夹很慢。

为什么比想象中难

  • 没有共同的快速发送功能。隔空投送是 Apple 独有的,Linux 桌面上也没有 Mac 能识别的功能。
  • 每种方法都需要账户和密码。SSH 和 Mac 文件共享用 Mac 账户登录。Samba 需要单独的密码。
  • Linux 默认不会与 Mac 共享文件夹。你需要安装并配置 Samba,并打开防火墙。在 Fedora 等发行版上,还需要让 SELinux 允许共享文件夹。
  • Samba 需要针对 Mac 的设置。没有 Apple 兼容选项时,访达会在你的文件旁边留下额外的隐藏 ._ 文件。
  • 线缆连接需要地址。Mac 会在线缆上给自己分配一个 169.254 地址。Linux 常常会等待一个并不存在的 DHCP 服务器,结果根本得不到 IPv4 地址。
  • 小文件慢得像爬。在我们的测试中,Mac 通过 10 Gb/s 雷雳连接向 Samba 共享拷贝 20,000 个小文件(331 MB)用了将近四分钟。
  • 硬盘不能通用。Mac 无法写入 Linux 的 ext4 或 btrfs 硬盘,Linux 对 Mac 的 APFS 硬盘支持也很差。只有 exFAT 在两边都好用。
  • 线缆可能只跑一半速度。在我们的测试中,一台 Linux 笔记本和一台 Mac 只用 40 Gb/s 线缆中的一条 20 Gb/s 通道连接。

连接线缆并找到每台电脑的地址

如果两台电脑都有雷雳或 USB4,用线缆连接它们就能得到一条直接的网络连接。Mac 称之为雷雳网桥,Linux 将其命名为 thunderbolt0。没有这类端口时,请改用家庭网络及其地址。请参阅用雷雳传输文件。

在 Mac 上

  1. 连接线缆。
  2. 在系统设置中选择网络,然后选择雷雳网桥。
  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 文件夹

如果你想在访达中浏览 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. 在访达中选择前往 > 连接服务器…。
  2. 输入 smb:// 和 Linux 电脑的地址,例如 smb://169.254.40.50,然后点按连接。
  3. 选择注册用户,输入你的 Linux 用户名和 Samba 密码,然后点按连接。
  4. 选择 Projects 共享。它会在访达中打开。

在我们通过 10 Gb/s 雷雳连接进行的测试中,Mac 从 Samba 共享拷贝 20,000 个小文件(331 MB)用了 114 秒,向它拷贝则用了 238 秒。一个 4 GiB 文件在两个方向上的拷贝速度都约为 7.6 Gb/s。

睡眠、重启或拔掉线缆后

这里的每种方法都只在线缆连接正常时有效。任一台电脑睡眠或你拔掉线缆时,连接就会断开。

  • rsync 因连接错误而停止。再次运行同一命令。它会跳过已经到达的文件。
  • 共享文件夹会断开。访达会提示与服务器的连接已中断,“文件”会关闭共享。请重新连接并登录。
  • 地址可能会变。拔掉线缆后,自分配的地址可能会变,所以重新连接前请再次查找。
  • 重启后共享仍然开启。远程登录、文件共享和已启用的 Samba 服务都会自动重新启动。你仍然需要从另一台电脑重新连接。

请参阅网络共享为什么在睡眠后断开。

方法 4:exFAT 硬盘

把硬盘格式化为 exFAT,然后把文件拷上去再拷下来。它不需要在任何一台电脑上设置,没有雷雳或 USB4 也能用,但每个文件都要拷贝两次,而且硬盘需要有足够的可用空间。