LinuxでiPhoneとデータ転送を行う
今回はLinuxでiPhoneをUSB接続してデータ転送(差分バックアップ)を行います。
用意するもの
- iPhone
- Linuxマシン (今回はArch Linuxを使用します。): 追記 Ubuntuでも問題なく可能でした。
- USB A => Lightningケーブル
- パッケージ libimobiledevice
マシン詳細
- Arch Linux
Terminal
$ uname -a
Linux haruki 6.1.7-hardened1-1-hardened #1 SMP PREEMPT_DYNAMIC Thu, 19 Jan 2023 00:16:46 +0000 x86_64 GNU/Linux
$ cat /etc/os-release
NAME="Arch Linux"
PRETTY_NAME="Arch Linux"
ID=arch
BUILD_ID=rolling
ANSI_COLOR="38;2;23;147;209"
HOME_URL="https://archlinux.org/"
DOCUMENTATION_URL="https://wiki.archlinux.org/"
SUPPORT_URL="https://bbs.archlinux.org/"
BUG_REPORT_URL="https://bugs.archlinux.org/"
PRIVACY_POLICY_URL="https://terms.archlinux.org/docs/privacy-policy/"
LOGO=archlinux-logo
- Ubuntu
Terminal
$ uname -a
Linux haruki 6.5.0-27-generic #28~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Fri Mar 15 10:51:06 UTC 2 x86_64 x86_64 x86_64 GNU/Linux
$ cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.4 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.4 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
パッケージのインストール
Terminal
sudo pacman -S libimobiledevice ifuse
- Ubuntuの人は
Terminal
sudo apt-get install -y libimobiledevice6 libimobiledevice-dev ifuse libimobiledevice-utils
を実行してください。
iPhoneとの接続
USBでマシンと接続してください。
先程インストールしたパッケージのlibimobiledeviceはusbmuxdに依存していて、低レベルにiOSとの接続を行うことができます。
iPhoneとの接続後usbmuxd.service
が立ち上がっているか確認しましょう。
Terminal
$ systemctl status usbmuxd.service
● usbmuxd.service - Socket daemon for the usbmux protocol used by Apple devices
Loaded: loaded (/usr/lib/systemd/system/usbmuxd.service; static)
Active: active (running) since Sat 2023-02-04 18:32:29 JST; 2min 27s ago
Docs: man:usbmuxd(8)
Main PID: 1478 (usbmuxd)
Tasks: 2 (limit: 19107)
Memory: 2.1M
CPU: 16ms
CGroup: /system.slice/usbmuxd.service
└─1478 /usr/bin/usbmuxd --user usbmux --systemd
Feb 04 18:32:29 haruki systemd[1]: Started Socket daemon for the usbmux protocol used by Apple devices.
Feb 04 18:32:29 haruki usbmuxd[1478]: [18:32:29.248][3] usbmuxd v1.1.1 starting up
Feb 04 18:32:29 haruki usbmuxd[1478]: [18:32:29.249][3] Successfully dropped privileges to 'usbmux'
Feb 04 18:32:29 haruki usbmuxd[1478]: [18:32:29.249][3] Using libusb 1.0.26
Feb 04 18:32:29 haruki usbmuxd[1478]: [18:32:29.260][3] Initialization complete
Feb 04 18:32:29 haruki usbmuxd[1478]: [18:32:29.260][3] Enabled exit on SIGUSR1 if no devices are attached. Start a new instance with "--exit" to>
Feb 04 18:32:29 haruki usbmuxd[1478]: [18:32:29.260][3] Connecting to new device on location 0x30009 as ID 1
Feb 04 18:32:29 haruki usbmuxd[1478]: [18:32:29.260][3] Connected to v2.0 device 1 on location 0x30009 with serial number ***************************>
ペアリング
Terminal
$ idevicepair pair
を実行してください。するとiPhoneから信頼するか聞かれるので信頼してパスコードを入力してください。
SUCCESS: Paired with device
が出たら完了です。何度かエラーが出るかもしれませんが、信頼ができていればSUCCESSになります。
マウント
iPhoneとの接続は終わったのですがマウントをしないとデータ転送ができません。
どこでもいいのですが、/mnt/iphone
にマウントしたいと思います。
- ディレクトリ作成と権限の付与
Terminal
sudo mkdir /mnt/iphone
sudo chmod 755 /mnt/iphone
Terminal
ifuse /mnt/iphone
ここでWindowsだとDCIM
しか出現しませんが、Linuxだとさらに多くのディレクトリにアクセス可能です。
Terminal
$ ls
AirFair DCIM Downloads iTunes_Control MediaAnalysis Photos Podcasts Purchases Recordings
あとはcpなどでコピーするだけです!
差分バックアップ
rsync
を使って更新された分だけコピーします。
--dry-run
オプションをつけることで、送信されるファイルが出力されるので差分バックアップになっているかまずはこのオプションで試すことをおすすめします。
Terminal
rsync -auv --progress DCIM/ ~/DCIM --dry-run
- 差分バックアップ
Terminal
rsync -auv --progress DCIM/ ~/DCIM
sending incremental file list
.MISC/Incoming/
112APPLE/
112APPLE/IMG_2885.HEIC
2,799,629 100% 26.65MB/s 0:00:00 (xfr#1, to-chk=157/14541)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
112APPLE/IMG_2987.HEIC
1,702,779 100% 6.25MB/s 0:00:00 (xfr#158, to-chk=0/14541)
sent 1,090,678,523 bytes received 3,080 bytes 15,254,288.15 bytes/sec
total size is 64,147,123,048 speedup is 58.81
これで差分バックアップができました。
以上です。お疲れ様でした。