- iCloud Driveの隠れたファイル競合のため、最近書いた段落やコードの変更分が消え、バックアップに保存される前に損失が発生
- 競合はMacとiPhoneに同じファイルの別バージョンがあると判断された状況だったが、問題のファイルはiPhoneで開かれたことがなかった
- Dropboxは競合ファイルを別に残すが、iCloud Driveはファイルシステム上に表示しないため、競合処理対応エディタでのみ選択ポップアップを見られる
- Textifier、Xcode、Obsidianのように競合処理がないエディタでは、iCloudが保存するバージョンを選び、時間が経つと正しいバージョンがバックアップで上書きされる可能性がある
- 重要なデータはiCloud Driveの外に置き、重要ファイルはGitリポジトリで変更を監視するほうが安全であり、iCloudに残さなければならないファイル向けのCloud Cubも開発中
iCloud Driveの隠れたファイル競合
- 文書作成中に今入力したばかりの段落が消え、アプリ開発中にはXcodeがそれまで問題なかったコードに複数のエラーを表示
- 複数ファイルの最近の変更が消えた状態だった
- 損失はTime MachineやBackblazeが保存する前に発生した
- 原因はiCloud Driveが検出したファイル競合だった
- iCloud DriveはMacとiPhoneに同じファイルの別バージョンがあり、自動マージできないと判断
- しかし影響を受けたファイルはiPhoneで開かれたことがなかった
- MacのDocumentsフォルダをiCloudに移していたため、そのファイル群がiCloud上にあった
- Dropboxではバージョン競合が起きると、“(John Doe’s conflicted copy)”のような名前を付けた競合ファイルも一緒に保存する
- iCloud Driveは同じ競合をファイルシステム上に表示しない
- 競合処理をサポートするエディタでファイルを開くと、どのバージョンを保持するかを尋ねるポップアップが表示される
- Textifier、Xcode、Obsidianのように競合処理がないエディタでは、iCloudがディスクとバックアップに保存するバージョンを決める
復旧条件と対処方法
- 時間が経って新しいバックアップが、正しいバージョンを含んでいた以前のバックアップを上書きすると、コンテンツが永久に失われる可能性がある
- 復旧するには、競合解決をサポートするエディタでそのファイルを開く必要がある
- 例として使われたエディタはiA Writer
- ファイルをiCloud Driveの外へ移した後は、この方法も役に立たない
- テストでは、変更していないファイルを再びiCloudへ移すと競合バージョンのポップアップが再表示されたが、ファイルが編集されていたりコピーで作業を続けていた場合は、そうならない可能性がある
- バージョン競合を隠す方式はユーザーフレンドリーに見えるかもしれないが、重要な文書を何年後かに再び開くまでデータ損失に気付かない可能性がある
- iCloud Driveがファイルシステム上、またはアクセスしやすい中央の場所にバージョン競合を公開するようになるまでは、重要なデータをiCloud Driveの外へ移すほうが安全
- iCloud Driveに残さなければならないファイル向けに、隠れた同期競合を検出して解決するCloud Cubを作成中
1件のコメント
Hacker Newsの意見
似たようなことを経験した。妻のiPhoneのNotesでクラウド同期がオンになっていて、必要なさそうだと思ってオフにしたら、妻に「私のノートは全部どこに行ったの? 何をしたの?」と言われた
冷や汗をかいたが、同期済みのNotesアプリが入っているiPadのことを思い出し、すぐに開いてWiFiを切り、ノートを「保全」した
Appleに電話したところ、サポート担当者が、各ノートを新しいフォルダにコピー&ペーストすれば削除されないようにできる、という方法を見つけてくれた
数時間かなりストレスだったし、Appleはこうした操作の全体的な影響について、もっと警告やポップアップを出すべきだったと思う
ついでに、Appleのテクニカルサポートが、実質的にスマートフォンへ「VNC」のように接続して、見たり設定を変えたりできることも知った。権限リクエストが出て「承認」を押したのだと思うが、実際に見るまではそんな機能があるとは知らなかった
しかも原因は本人のミスに見えたのに手伝ってくれた。うちの会社はGoogle製品にかなりのお金を払っているが、Googleがこういうことを電話で手伝ってくれる可能性はほとんどない
以前、アクセス制御のような件では担当者と話したことがあるが、Keepのノートが消えたときに助けを求めたら、丁寧に失せろと言われそうだ。実際、Keepのノートも時々消える
奥さんの問題はAppleよりも、iOSデバイスを管理した人の側にあったように思う
本当に百万回同意する。ただ、これはiCloudだけの問題ではなく、Appleソフトウェア全般の根本的な性向のように見える
BooksでPDFにハイライトを付けるときにも繰り返し経験している。時々PDFを開き直すと、最近マークした複数ページが消えている
作業中はずっと保存されているように見えるのに、理由は不明だが11:45の版ではなく11:35の版を最新の主版だと判断する
Appleが新しい内容を古いバージョンで黙って上書きしてしまう問題は、少なくとも10年は続いている
こうした致命的な欠陥がそもそもどうやってシステムに入り込み、いまだに修正されていないのか理解できない
無料でBSDライセンスだが、他のアプリでも変更内容を見たいなら注釈入りPDFとして書き出す必要がある点は覚えておくべきだ
Appleのコントラストを殺すオレンジがかった背景や、本物の黄色いハイライトがないことに疲れた人なら試す価値がある。関係者ではなく、存在してくれてありがたいだけだ
https://skim-app.sourceforge.io/
ハードウェア側でも、フロッピーディスク、光学ドライブ、CPUアーキテクチャ全体を3度もかなり容赦なく切り捨てたことを覚えている
iCloudでは、その態度がファイルにも適用されているように思う。全部が悪いとは言わないが、年を取るほど自分の好みからはだんだん離れていく
投稿者はgitの利用を提案しているが、gitはiCloud Driveと相性がよくない
以前、iCloud Driveに数百個のgitリポジトリを置いていたが、大きなコミットをすると、数百GBあるiCloud Drive全体がAppleのサーバーと再同期されることがあり、1日かかった
Appleサポートでかなり上位までエスカレーションして解決しようとしたが、結局解決しなかった。今はgitリポジトリをiCloud Driveの外に置いている
最後の大きな変更の同期が終わる前に、数百個のファイルを素早く同時に変更すると、この現象が引き起こされるようだ
両者は相性が悪く、特に複数のデバイスが同じクラウドドライブに同期されていると、あらゆる奇妙で予想外の動作が起きる余地がある
問題は、必ず使わなければならないアプリが他の同期方法をサポートしていないため、重要なファイルの一部ではiCloud Driveを使う必要があることだ
gitがなければ、どのファイルが変わったのかすら突き止められなかっただろう。gitがあっても全部捕捉できたとは確信できない。iCloudの同期競合でgitの内容も変わりうる気がする
非常に大きなデータには向かないだろうが、iCloud Drive上にありつつ積極的にバージョン管理したいものはほとんどがテキストか小さいものなので、2セット持つ負担はほぼない
[1] https://github.com/anishathalye/git-remote-dropbox
iCloud Driveを使うべきでない、より大きな理由は、エンドツーエンド暗号化がデフォルトではない点だと思う。
そこに保存したものはすべて、Appleのシステム管理者、サポート担当者、そしてAppleに要求できる人々、たとえば現在は令状なしでも可能な米国政府が読める。
エンドツーエンド暗号化でないサービスは使わないほうがいい。
現在iCloudには任意のエンドツーエンド暗号化があるにはあるが、デフォルトではオフで、設定の奥深くに埋もれているため、ほとんど誰も使っていない。
私はSyncthingを使って、すべてのデバイスでファイルを維持している。エンドツーエンド暗号化され、自由ソフトウェアで、競合処理とバージョンバックアップも合理的だ。
平文を決して見られない、信頼しない同期専用デバイスにも対応しているので、VPSや外部の場所にノードを安全に置ける。
友人や家族にメニューを2回押して有効にするよう説得するのは簡単だが、複数のデバイスにSyncthingをインストールして設定するよう説得するのは簡単ではない。
Syncthingを擁護するのはいいが、平均的なユーザーがキーを失うとすべてのデータを失いかねない設定をデフォルトで有効にしていないからといって、iCloud Driveが悪いと言うのは少し滑稽だ。
おばあちゃんなら、デフォルトでより安全であることより、パスワードを忘れたときにAppleに電話して幼いJohnnyの写真を取り戻せることを、はるかに望むはずだと断言できる。
私もエンドツーエンド暗号化を有効にしたいが、キーを失くさないほど自分を信用できない。
メッセージングのように、相手側もエンドツーエンド暗号化を有効にしなければならない状況でもない。
https://support.apple.com/en-ca/HT212520
私もこの件でかなり腹が立っている。CalibreライブラリをDocumentsフォルダに置いていた。ほかにどこに置くというのか、無料バックアップも含まれているのだから。
ところが少し前、ライブラリ内のいくつかの本フォルダが、本来なら実際のepubファイルを含んでいるはずなのに空になっているのを見つけた。
ディレクトリ構造とデータベース項目はあるのに、本のファイルだけが消えていた。全部ではなく、ランダムに約40%ほどだった。
結論としては、大事なものをiCloud Driveに保存するな、特に本はなおさらダメだということだ。
「競合処理に対応したエディタでファイルを開くと、どのバージョンを保持するか尋ねるポップアップが表示される。Textifier、Xcode、Obsidianのように競合処理のないエディタでは、iCloudがディスクとバックアップにどのバージョンを保存するかを決める」という部分については、iCloud対応を入れながら競合処理メカニズムを追加しなかったアプリ開発者にも一部責任があると思う。
しかしApple自身のアプリであるXcodeが、なぜ競合処理をサポートしていないのか。Appleのソフトウェアがサードパーティ開発者の基準を示すべきだ。
Appleでさえバージョン競合を処理しないなら、当然ほかの開発者もしないだろう。
競合処理に対応したエディタを使っても、内容を失う可能性がある。
何かを書いて保存したあと、エディタを閉じて再度開かないと仮定すると、iCloudがそのファイル内容を差し替えることがあり、ユーザーには知る方法がない。
データを失わない唯一の方法は、Gitリポジトリを作るか、重要なすべてのファイルを競合処理に対応したエディタで定期的に開くことだ。
これはXcodeのバグではなく、iCloudのバグだ。
iCloud Driveにファイルを置くと、iPhoneはいつでもローカルコピーを削除できる。
ファイルを同期しつつ、ローカルコピーが100%存在すると確信したいなら、同じファイルをiCloud Driveと「このiPhone内」フォルダの両方に置く必要がある。
Apple Books、Numbers、そしてiCloud Driveを使うすべてのアプリがローカルコピーを削除し続ける理由がこれだ。
iCloud Driveを利用する簡単なメモアプリを作ったことがあるが、アプリを閉じるとiCloudは2KBのtxtファイルでさえ貪欲に削除した。たまに削除しないこともあり、かなりランダムだった。
ストレージ容量が大量に残っていても関係なく、iCloudは使い続けているファイルのローカル版も削除できる。
Appleの開発者サポートは、できることはないと言っていた。開発者側にも、ファイルを絶対に削除しないよう指定する方法はない。
公式ドキュメントでAppleは実際、ユーザーのすべてのファイルをiCloud Driveに保存し、「このiPhone内」にはコピーを置かないよう推奨している。
Contactsが消える似たような問題を経験した。しばらく発生していたが、最初は自分のミスだと思っていた。
ある朝、前夜にメッセージをやり取りしていた友人の連絡先が消えているのを見て、問題はiCloudだと気づいた。
Appleサポートに連絡し、基本的な案内をすべて試したあと、担当者はこれが既知の問題だが根本原因は分かっておらず、解決策もないと認めた。
削除がいつ起きるか分かるよう連絡先を監視してほしいと言われたが、数分単位の範囲で知らせる必要があるとのことだった。
「iPhoneは大量のログを作るため、正確にいつ起きたかを特定できないとエンジニアが確認できない」という理由だった。
8時間の範囲までバグを絞れたのでも十分だと思ったが、担当者はエンジニアがそう言っているとして、数分単位の精度を求めた。
結局、Appleサポートに難しい問題を任せるたびにそうだったように、担当者は折り返し連絡すると言ったものの二度と電話してこず、何も起きなかった。
連絡先をGoogleに移して、そのまま忘れることにした。
この問題を調べてみた。Appleはユーザーを競合であまり煩わせないように、特定の条件下でユーザーデータを失う同期戦略を選んでいた
競合したリビジョンを保存できたはずの、はるか昔からある手法を使わないことにしたということ
まとめはこちら
https://www.youtube.com/watch?v=q8k1q6kf1W0
そうすれば人々は「Appleは私のファイルに何をしたのか?」と検索して、復旧方法を見つけられたかもしれない
邪魔しないという話で言えば、iOSがあるアップデートで私の通話設定をこっそり変更し、一部の発信者からの電話が鳴らないようにしていた
一種の心を落ち着かせるためのくだらない機能だったが、NHSの性質上、かけ直してもらうのが難しいがん外科医からの電話を逃してしまい、かなり不安になった
私の場合、iCloud Driveはときどき単に同期されず、何かに引っかかっている。FinderのiCloud Driveアイコンで同期状態を確認できる
macOSとiOSのすべてのアプリを閉じて
killall birdを実行すると、ときどき解決する。birdはiCloud同期サービス