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 が Samba 共有へ 20,000 個の小さなファイル(331 MB)をコピーするのにほぼ 4 分かかりました。
  • ドライブを共用できない。Mac は Linux の ext4 や btrfs のドライブに書き込めず、Linux は Mac の APFS ドライブをうまく扱えません。両方で問題なく使えるのは exFAT だけです。
  • ケーブルが半分の速度で動くことがある。テストでは、Linux ノートパソコンと Mac が 40 Gb/s ケーブルの 20 Gb/s レーン 1 本だけでつながりました。

ケーブルをつないで各コンピュータのアドレスを調べる

両方のコンピュータに 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. 初回は、Mac を信頼するか SSH が尋ねます。yes と入力します。
  3. Mac のアカウントのパスワードを入力します。rsync はコピーしながら各ファイルを一覧表示します。

逆方向にコピーするには 2 つのパスを入れ替えます。末尾の / には意味があります。付けるとフォルダの中身を、付けないとフォルダ自体をコピーします。スペースを含むパスは引用符で囲みます。閲覧する画面はないため、始める前に正確なパスを把握しておく必要があります。

方法 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. 共有フォルダを開きます。ファイルをドラッグして出し入れします。

この方法では大きなファイルはうまくコピーできます。ファイル共有はファイルを 1 つずつ開き、書き込み、閉じるため、小さなファイルのフォルダは遅くなります。

方法 3:Samba で Linux のフォルダを共有する

Linux コンピュータのファイルを Finder で閲覧したい場合は、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 がなくても使えますが、すべてのファイルを 2 回コピーし、ドライブには十分な空き容量が必要です。