uBuntu iPhone バックアップ方法

iCloudにバックアップするには5GBを超えると年2万円以上かかってしまうので、別方法を考えてみました。 デスクトップPCでuBuntuを使っているので色々検討してみました。 まだ実行していませんが備忘録で残しておきます。

一番いいのは以下の通りと思います。

iCloudでバックアップ

uBuntuにはバックアップ取れない情報があります。 これらはiPhoneを買い替えたりしたときに自動的に普及してくれます。 これらはiCloudにバックアップしなければなりません。

データの種類保存理由
アプリのデータアプリごとの設定やセーブデータなど、デバイス固有の情報を保持します。
ホーム画面のレイアウトアプリの配置やフォルダの構成など、ホーム画面の状態を記憶します。
デバイス設定ネットワーク設定、通知設定、Touch ID/Face IDの設定など。
iMessage/SMSテキストメッセージの履歴。iCloudに保存されます。
Apple WatchのバックアップApple Watchのペアリング情報や設定。

連絡先とカレンダーは、他のデバイスでも保存出来るのですが、これらを入れて5GBを超えることはめったに無いのでiCloudに入れます。

連絡先基本情報: 名前、会社名、電話番号、メールアドレス
住所情報: 住所、地図情報
誕生日・記念日: 連絡先に登録された誕生日や記念日
ソーシャルメディア情報: TwitterやFacebookなどのアカウント情報
メモ: 連絡先に関連する個人的なメモ
写真: 連絡先の顔写真
カレンダーイベント名: 予定のタイトル
日時: 予定の開始日時と終了日時
場所: 予定の場所(住所や施設名)、地図情報
参加者: 予定に招待された人々の連絡先
アラート: 予定の開始前に通知を送る設定
繰り返しの設定: 毎週、毎月など、定期的な予定の設定
メモ: イベントに関連する個人的なメモ

それ以外のデータ

写真と動画容量を最も圧迫するデータです。Googleフォトに自動同期できます。
ダウンロードしたファイル「ファイル」アプリ内のPDFやドキュメントなど。
ドキュメントPages、Numbers、Keynoteなどのドキュメント。Google ドキュメントやスプレッドシートに移行できます。
音楽ダウンロードした音楽ファイルやライブラリは、Google Driveなどのクラウドストレージに保存できます。
ボイスメモ録音した音声ファイル。

バックアップ手順

libimobiledevice は、iPhone、iPad、iPod TouchなどのiOSデバイスと、Linuxを含むUnix系OSとの間で通信するためのクロスプラットフォームなライブラリです。Appleの非公式なプロトコルをリバースエンジニアリングして開発されており、多くのサードパーティ製ツールがこれを基盤としています。

このライブラリ群に含まれる主要なツールは以下の通りです。

  • usbmuxd: PCとiOSデバイス間のUSB通信を多重化するためのデーモン。これがないと、他のツールは動作しません。
  • libimobiledevice: 基礎となるライブラリ。
  • ifuse: これがあなたの目的に最も直接的に役立つツールです。 これを使うと、iPhoneのファイルシステムをUbuntu上のディレクトリに**マウント(接続)**することができます。これにより、iPhoneがまるでUSBメモリのように扱えるようになり、ファイルマネージャーやシェルスクリプトから簡単にアクセスできるようになります。

ifuse を使ったバックアップの自動化

以前ご説明したrsyncスクリプトと組み合わせることで、以下のワークフローで自動バックアップを実現できます。

ステップ1:必要なソフトウェアをインストールする

以下のコマンドをUbuntuのターミナルで実行し、libimobiledeviceifuseをインストールします。

Bash

sudo apt update
sudo apt install libimobiledevice-utils ifuse

ステップ2:iPhoneをマウントする

iPhoneをUSBケーブルでPCに接続し、デバイス上でPCを「信頼」します。その後、以下のコマンドを実行して、iPhoneのファイルシステムをマウントします。

Bash

mkdir -p ~/iphone_mount
ifuse ~/iphone_mount

これで、~/iphone_mountというディレクトリに、iPhoneのカメラロールや「ファイル」アプリのデータがマウントされます。

ステップ3:rsyncスクリプトでバックアップする

マウントが完了すれば、以下のrsyncスクリプトを実行。スクリプトのSOURCE_DIR~/iphone_mount/に設定すれば、自動的にデータをSSDにコピーできます。

  • 写真と動画は~/iphone_mount/DCIMにあります。
  • 「ファイル」アプリに保存したドキュメントは、~/iphone_mount/Documentsなど、アプリのフォルダ内にあります。
# バックアップ元のディレクトリ
# iPhoneから手動でデータをコピーする一時フォルダを指定します。
# 例: /home/your_username/temporary_iphone_files/
SOURCE_DIR="/home/your_username/temporary_iphone_files/"

# バックアップ先のディレクトリ
# Ubuntuに接続したSSDのバックアップフォルダを指定します。
# 例: /media/your_username/your_ssd_label/iPhone_Backup/
DEST_DIR="/media/your_username/your_ssd_label/iPhone_Backup/"

# メイン処理
# バックアップ元のディレクトリが存在するか確認
# 存在しない場合はエラーメッセージを表示して終了します。
if [ ! -d "$SOURCE_DIR" ]; then
echo "エラー: バックアップ元ディレクトリ '$SOURCE_DIR' が見つかりません。"
exit 1
fi

# バックアップ先のディレクトリが存在しない場合は作成
if [ ! -d "$DEST_DIR" ]; then
echo "バックアップ先ディレクトリ '$DEST_DIR' を作成します..."
mkdir -p "$DEST_DIR"
fi

# rsyncコマンドでバックアップを実行
# -a (--archive): アーカイブモード。ファイルのパーミッション、タイムスタンプ、所有者情報を保持します。
# -v (--verbose): 処理中の詳細情報を表示します。
# --delete: バックアップ元で削除されたファイルを、バックアップ先からも削除します。
# これにより、SSDのバックアップが常に最新の状態になります。
echo "バックアップを開始します..."
rsync -av --delete "$SOURCE_DIR" "$DEST_DIR"

echo "=========================================="
echo "バックアップが完了しました。"
echo "完了日時: $(date)"
echo "=========================================="

# 実行ログをファイルに追記
echo "バックアップが完了しました。日時: $(date)" >> /home/your_username/backup_log.

ステップ4:アンマウントする

バックアップが完了したら、以下のコマンドで安全にアンマウントします。

Bash

fusermount -u ~/iphone_mount

この方法であれば、iPhoneをPCに接続してマウントする作業は手動ですが、その後のバックアップはrsyncスクリプトで自動化でき、非常に効率的です。

iPhone 14以前: USB 3.0ポートに接続しても、バックアップ時間は1時間程度

iPhone 15 Pro/Pro Max: USB 3.0ポートに接続すれば、15分以内でバックアップが完了します。

iCloudの設定変更

ステップ1:iCloudストレージの管理画面を開く

  1. iPhoneの**「設定」**アプリを開きます。
  2. 画面上部にある**自分の名前(Apple ID)**をタップします。
  3. **「iCloud」**をタップします。
  4. **「アカウントのストレージを管理」または「ストレージを管理」**をタップします。

ステップ2:バックアップ対象から外す

この画面で、iCloudにデータを保存しているすべてのアプリとサービスを確認できます。

  • 写真と動画
    • iCloud Photos(iCloud写真)をオフにすると、写真や動画はiPhoneにのみ保存されます。これにより、iCloudの容量を最も大きく節約できます。
  • 音楽、ボイスメモ、ドキュメントなど
    • これらのデータは、特定のアプリ(例:ミュージック、ボイスメモ、ファイル)に関連付けられています。iCloudに保存したくない場合は、各アプリの設定でiCloud同期をオフにするか、アプリのバックアップ設定から除外します。

iPhone

└─ private/var/mobile
   ├─ Media
   │  ├─ DCIM/                      ←【写真・動画】カメラロール(USB接続で見えるのは基本ここ)
   │  │   ├─ 100APPLE/             ← 画像/動画ファイル(JPEG/HEIC/PNG/MP4/HEVC)
   │  │   └─ 10xAPPLE/ ...
   │  ├─ PhotoData/                 ← 写真ライブラリDB等(直接操作不可)
   │  ├─ Recordings/                ←【ボイスメモ】.m4a など
   │  ├─ iTunes_Control/
   │  │   └─ Music/                 ←【音楽】Apple Music/同期曲(F00〜Fxxフォルダに分散)
   │  ├─ Books/                     ← Apple Books 関連
   │  ├─ Downloads/                 ←【ダウンロード】Safariで「iPhone内に保存」を選んだ場合の既定先
   │  └─ Mobile Documents/          ←【iCloud Drive】(Filesの「iCloud Drive」に相当)
   │
   └─ Containers/
      └─ Data/
         └─ Application/
            └─ <各アプリUUID>/
               ├─ Documents/        ←【ドキュメント】各アプリの“オンマイiPhone”内の実体
               ├─ Library/
               └─ tmp/

SSDの2重化

RAID1かRAID5を使ったほうがいいと思います。 H670ボードで使う場合はBIOS設定が必要。

RAIDを使わず、2つのSSDにバックアップを撮るには、以下ミラーリングスクリプトで可能になります。

# ==============================================================================
# 設定変数
# ==============================================================================
# バックアップ元のディレクトリ (1台目のSSD)
# 既にrsyncでiPhoneからバックアップしているSSDのパスを指定します。
# 例: /media/your_username/your_ssd_label/iPhone_Backup/
SOURCE_DIR="/media/your_username/your_ssd_label/iPhone_Backup/"

# バックアップ先のディレクトリ (2台目のSSD)
# こちらに1台目のSSDのデータをミラーリングします。
# 例: /media/your_username/your_2nd_ssd_label/iPhone_Backup/
DEST_DIR="/media/your_username/your_2nd_ssd_label/iPhone_Backup/"

# ==============================================================================
# メイン処理
# ==============================================================================
# バックアップ元ディレクトリの存在確認
if [ ! -d "$SOURCE_DIR" ]; then
echo "エラー: バックアップ元ディレクトリ '$SOURCE_DIR' が見つかりません。"
exit 1
fi

# バックアップ先ディレクトリが存在しない場合は作成
if [ ! -d "$DEST_DIR" ]; then
echo "バックアップ先ディレクトリ '$DEST_DIR' を作成します..."
mkdir -p "$DEST_DIR"
fi

# rsyncコマンドでミラーリングを実行
# -a (--archive): アーカイブモードで、属性(パーミッション、タイムスタンプなど)を保持してコピー
# -v (--verbose): 処理中の詳細情報を表示
# --delete: バックアップ元にないファイルをバックアップ先からも削除し、完全なミラーリングを実現
echo "バックアップ元SSDのデータを2台目のSSDに同期します..."
rsync -av --delete "$SOURCE_DIR" "$DEST_DIR"

echo "=========================================="
echo "2台目のSSDへの同期が完了しました。"
echo "完了日時: $(date)"
echo "=========================================="

# 実行ログをファイルに追記
echo "2台目のSSDへの同期が完了しました。日時: $(date)" >> /home/your_username/backup_log.txt

コメント