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 で
- ケーブルをつなぎます。
- システム設定でネットワーク、Thunderbolt ブリッジの順に選びます。
- 詳細…をクリックし、IP アドレスを控えます。ケーブルにほかに何もつながっていなければ、169.254 で始まります。
Linux コンピュータで
ターミナルで次のコマンドを実行します。設定を読み取るだけです:
ip -4 addr show thunderbolt0inet 169.254… の行がケーブルのアドレスです。inet の行がない場合、NetworkManager はまだ DHCP を待っています。ケーブルに自己割り当てアドレスを設定します:
- 設定でネットワークを選び、ケーブルの有線接続の横にある設定ボタンをクリックします。
- IPv4 タブでリンクローカルのみを選び、適用をクリックします。
- 接続をオフにしてからオンに戻し、もう一度
ipコマンドを実行します。
コンピュータの名前ではなく、必ず 169.254 のアドレスで接続します。名前だとコンピュータの Wi-Fi アドレスが見つかることがあり、その場合コピーは Wi-Fi を通ります。
方法 1:ターミナルから SSH 経由で rsync を使う
rsync はターミナルに慣れている人に向いています。フォルダを丸ごとコピーでき、コピーが止まっても、もう一度実行すればコピー済みのファイルは飛ばされます。すべてのコマンドは Linux コンピュータで実行するため、設定が必要なのは Mac だけです。
Mac で
- システム設定で一般、共有の順に選び、リモートログインをオンにします。
- リモートログインの横の情報ボタンをクリックし、自分のアカウントが許可されているか確認します。
- デスクトップ、書類、ダウンロードからコピーするには、同じパネルでリモートユーザに対してフルディスクアクセスを許可をオンにします。これがないと、macOS はそれらのフォルダを「Operation not permitted」で拒否します。
Linux コンピュータで
- ターミナルで
rsync -a --progress user@address:/Users/user/Projects/ ~/Projects/を実行します。userは Mac のアカウントの短い名前(ホームフォルダの名前)に、addressは Mac の 169.254 のアドレスに置き換えます。 - 初回は、Mac を信頼するか SSH が尋ねます。
yesと入力します。 - Mac のアカウントのパスワードを入力します。rsync はコピーしながら各ファイルを一覧表示します。
逆方向にコピーするには 2 つのパスを入れ替えます。末尾の / には意味があります。付けるとフォルダの中身を、付けないとフォルダ自体をコピーします。スペースを含むパスは引用符で囲みます。閲覧する画面はないため、始める前に正確なパスを把握しておく必要があります。
方法 2:Mac のフォルダを共有して Linux で開く
Mac のファイル共有なら Linux 側にソフトは不要です。GNOME の「ファイル」をはじめ、ほとんどの Linux のファイルマネージャーは SMB 共有を開けます。
Mac で
- システム設定で一般、共有の順に選び、ファイル共有をオンにします。
- ファイル共有の横の情報ボタンをクリックします。共有フォルダで + をクリックし、フォルダを選びます。
- Linux からファイルをコピーして入れる必要がある場合は、ユーザで自分のアカウントを読み/書きに設定します。
- オプション…をクリックし、Windowsファイル共有で自分のアカウントを選び、パスワードを入力して完了をクリックします。この手順をしないと、Linux はサインインできません。
Linux コンピュータで
- 「ファイル」で Ctrl+L を押し、
smb://と Mac のアドレス(例:smb://169.254.20.30)を入力して Enter キーを押します。 - 登録ユーザーを選び、Mac のアカウントの短い名前とパスワードを入力して接続をクリックします。
- 共有フォルダを開きます。ファイルをドラッグして出し入れします。
この方法では大きなファイルはうまくコピーできます。ファイル共有はファイルを 1 つずつ開き、書き込み、閉じるため、小さなファイルのフォルダは遅くなります。
方法 3:Samba で Linux のフォルダを共有する
Linux コンピュータのファイルを Finder で閲覧したい場合は、Linux から共有します。下の各コマンドはシステムを変更し、sudo 用にパスワードが必要です。you は自分の Linux のユーザー名に置き換えます。
Linux コンピュータで
- Samba をインストールします。Fedora では
sudo dnf install samba、Ubuntu ではsudo apt install sambaです。 - 下に示すように、
/etc/samba/smb.confの末尾に共有を追加します。fruitの行で Apple 互換のオプションが追加されます。 sudo smbpasswd -a youでユーザーに Samba のパスワードを設定します。ログインパスワードとは別のものです。- ファイアウォールを開きます。Fedora では
sudo firewall-cmd --permanent --add-service=sambaを実行してからsudo firewall-cmd --reloadを実行します。Ubuntu では、自分でオンにしていない限りファイアウォールはオフです。オンになっている場合はsudo ufw allow sambaを実行します。 - Fedora では、SELinux でフォルダの共有を許可します:
sudo semanage fcontext -a -t samba_share_t "/home/you/Projects(/.*)?"を実行してから、sudo restorecon -R /home/you/Projectsを実行します。 - 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_xattrMac で
- Finder で移動 > サーバへ接続…を選びます。
smb://と Linux コンピュータのアドレス(例:smb://169.254.40.50)を入力し、接続をクリックします。- 登録ユーザを選び、Linux のユーザー名と Samba のパスワードを入力して接続をクリックします。
- 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 回コピーし、ドライブには十分な空き容量が必要です。