世界を動かす技術を、日本語で。

Apple Photosアプリが画像を破損する

概要

Apple Photosアプリでカメラから画像をインポートする際にファイルが破損する問題を経験。 「インポート後に削除」機能の使用が大きなリスクであると判明。 ハードウェアをすべて交換しても問題は解決せず、ソフトウェア側の不具合と推定。 現在はDarktableを用いた新しいワークフローに移行し、問題を回避。 同じ問題に悩む方の参考になればと、詳細な調査と対策を共有。

Apple Photosアプリでの画像破損問題の発生と調査

  • Apple Photosアプリ でカメラから画像をインポートする際に 画像破損 が発生する事象
  • OM System OM-1 カメラでRAW + jpg撮影、インポート時に「 インポート後に削除」を選択
  • 数千枚中1〜2枚の破損は見逃していたが、家族の結婚式で約 30%の画像が破損 し重大な問題と認識
  • PhotosアプリはRAW + jpgを自動でまとめて表示、破損はjpgのみ・RAWのみ・両方と パターンが様々
  • SDカードのデータ削除後 に破損が発覚したため、元データの状態確認が不可能

問題切り分けのための検証

  • ハードウェア故障を疑い、以下の手順で 一つずつ検証
    • USB-Cケーブル交換
    • メーカー純正新品SDカード購入
    • RAWのみ撮影に切り替え
    • 新しいノートPC購入
    • 新型カメラ(OM System OM-1 MKii)購入
  • 機材を全て交換しても 画像破損が継続
  • インポート後に削除」をやめ、インポート後に破損有無を確認し、問題なければSDカードをフォーマットする運用に変更
  • 数ヶ月間この運用で破損は発生せず、 Photosアプリのコピー&削除処理の競合 (レースコンディション)を疑う

再発と最終的な結論

  • RailsConfから帰宅後のインポートで 再度破損画像が発生
  • SDカード上の元画像は破損しておらず、カメラの問題ではないと確定
  • 破損ファイルを削除し再インポートすると正常に読み込める場合もあり、 Photosアプリ側のランダムな破損 と推測
  • OM Systemカメラ特有かは不明だが、他のカメラシステムを試す予定なし

破損ファイルの比較

  • md5sum コマンドで破損前後のファイルを比較、ファイルサイズは同じだが バイト列が異なる
  • xxddiff でバイナリ比較、明確な違いを確認

新しいワークフローへの移行

  • Photosアプリの信頼性に見切り をつけ、 Darktable を使ったワークフローに完全移行
    • Darktableで画像をインポート
    • 不要な写真を削除(カリング作業)
    • 必要な写真を現像
    • jpgと元のRAWファイルをエクスポート
    • それらをPhotosアプリにインポートし閲覧・共有
    • 定期的にSDカードをフォーマット
  • Darktableでのインポートでは 画像破損が一度も発生せず、Photosアプリ側の問題と確信
  • 機材・時間・手間を費やしたが、 最終的に安定した運用 を確立

まとめ・注意点

  • Photosアプリの「インポート後に削除」機能は要注意
  • 画像管理の信頼性重視なら 他のワークフロー検討 を推奨
  • 同様の問題で悩む方の 一助となる情報提供

Darktable や他の写真管理アプリの利用も視野に入れ、 大切な写真のバックアップと運用方法の見直し をおすすめ。

Hackerたちの意見

インポートパイプラインのバグっぽいね。Photosはインポート時にいろいろ余計な処理をするから(RAWとJPEGのペアをマージしたり、プレビューを生成したり、データベースのインデックスを作ったり、オプションで削除したり)、多分、バッファが再利用されたり、コピーが終わる前にファイルハンドルが閉じられちゃうような競合バグだと思う。たまに起こる予測できない破損って感じだね。

これも僕の推測だよ。本当に残念だし、Appleに報告したいけど、再現手順をどうやって提供すればいいかわからないから困ってる。

30%の失敗率から、全部交換した後は1つの失敗を見つけるのに時間がかかるってのは面白いね。ランダムってのはランダムで、塊になってることもあるから、パーツを交換するのは関係ないかもしれないけど… 彼の交換の旅で、どれくらいの頻度で破損が起きたのか、もっと詳しく知りたかったな。編集:あと、なんか気づいたんだけど、仕事中に「tenderlovemaking.com」に行ってた。最悪。笑。

これってインポート元に関係してるのかな?それともそのハードウェアの速度かも。写真アプリには成功裏に写真をインポートしてるけど、カメラからはダメなんだよね。

これはAppleが新しい高レベルのメディアインポートフレームワークを提供する理由になるかも?

これは履歴に残したくないURLな気がする。

このサイトはアーロン・パターソンのもので、世界で最も多作なRuby開発者の一人だよ。

なんで?素晴らしいじゃん。

90年代後半、当時の妻が僕の肩越しに見ていて、アドレスバーに「freshmeat.net」ってドメインがオートコンプリートで出てきたのを見たんだ。彼女は当然疑ってたけど、ただのソフトウェア配布サイトだって見せたら納得してくれた。

「優しい愛撫」がそんなに衝撃的なの?

Gearspaceっていうすごく人気のあるプロオーディオのウェブサイトがあって、昔はもっとスパイシーな名前だったんだよね。 https://gearspace.com/ https://www.reddit.com/r/audioengineering/comments/mftc0g/ge...

えっ、君はテンダー・ラブメイキングが好きじゃないの?

僕もOMシステムのカメラ(OM-5)を持ってるけど、こんなひどい破損は経験したことないよ。ただ、インポート中に写真の下の方に緑のピクセルが一列出ることがたまにあった。自分が狂ってるのかと思ったけど、これをきっかけにルーチンを見直して、Photosが原因だったのか確かめてみようと思う。

オリンパスユーザーとしては、これは知っておくべき情報だね。でも、トラブルシューティングの道がすぐに高くつくのは驚きだわ。ノートパソコンとカメラを交換するって?まずはPhotos以外の何かを試してみればいいのに。お金を払う必要もないし、オリンパスのソフトウェアは無料だし、写真を破損せずにインポートできるはずだから、良いベースラインになるよ。編集:インポート時に削除するのはかなりリスキーだと思う。私のワークフローは、インポートしてから、1) インポートした写真がバックアップされたら、2) 初回の選別を終えたらカメラから削除するって感じ。

俺も時々、トラブルシューティングを口実にして、ずっとアップグレードしたかったハードウェアを買うことにしてる。

最初に思ったのは「ソフトウェアのトラブルシューティングはハードウェアのトラブルシューティングよりずっと安上がりだ!」ってこと。もしかしたら、著者は俺たちが慣れてる経済的現実に縛られてないのかも。

この挙動を示すPhotosアプリのバージョン番号を記録しておくと、他の影響を受けた人がこの情報を使って潜在的な修正を追跡できるから、すごく助かると思う。

Appleのエコシステム全体が好きだけど、ここにはパターンがあるって言わざるを得ないね。Appleは他人からデータを守るのはそこそこ上手いけど、データをそのまま保つのはひどい。曲名が長い整数に変わった音楽ライブラリから、これ(他にも思い出せない問題があると思うけど)まで、もっと頑張ってほしい。セキュリティも大事だけど、整合性も大事だよね。

手書きのノートを同期しようとしたら、20分分のメモが消えちゃったから、iPadペンでAppleのノートアプリを使うのをやめた。(これもAppleが人のデータを失うテーマに合ってるよね。)

古い写真がちゃんとインポートされてるのに、こんなことが起きてるのを見かけるようになった。iPhoneで写真を見たり、Macでも見たりしてるんだけど、振り返ってみると、写真ライブラリの大部分を失ってしまった。思ってたよりも大きな問題だよ。バックアップも取ってないし。

iCloudフォトライブラリをオンにしてた時に、これを経験したことがある。正しい古い写真がランダムに壊れちゃったんだ。iPhoneで撮った写真も、実際のカメラからインポートした写真も両方とも壊れた。それ以来、iCloudフォトライブラリをオフにして、iCloudもダウングレードした(そんなにストレージはいらなくなったから)。今は、ディスク上のフラットファイルで完全にオープンソースの写真管理を使ってる。

IT関係で働いてるんだよね?常にバックアップは取っておけ。

これは本当に知っておいてよかった。自分は同じハードウェアを使ってても、これまでこの問題に遭遇したことがないんだ。なぜなら、最終的なJPEGだけをApple Photosに入れて、カメラの出力は完全にAppleのエコシステム外のハードドライブに保管してるから。

2011年にiPadをiOSのベータ版にアップデートするという大失敗をしたことがある。確かiOS 4だったと思う。ハネムーンでアメリカに持って行ったんだけど、使い方はSDアダプタでiPhotosアプリに画像を移すことだった。Appleのドックを買ったんだ。7日目くらいにインポートが失敗して、iPadのファイルが全部壊れちゃった。でも、SDカードも壊れたんだ。全部が失われたわけじゃないと分かってたから、そのデバイスとカードの使用をやめた。SFで代わりの新しいカードを買わなきゃいけなかった。帰宅後、リカバリーソフトを使ってカードにデータがまだ残ってるか確認した(以前、他の人に削除されたカードでも同じソフトを使って、全ての画像を取り戻せたことがある)。ほとんどの画像を復元できて、iPadからもいくつか取り戻せた。結局、数百枚の中で10枚くらい失ったかな。今は複数のカードを持って旅行して、ホテルにいる間は毎晩バックアップを取ってる。そして、SDカードの画像は削除しない。全てコピーして安全だと確信できるまでフォーマットはしない。

画像が入ったカードのデフォルトの扱いは、読み取り専用のマウントで、画像をそのままコピーするだけなんだ。フラッシュが壊れると、データの代わりにゴミやゼロが返ってくることもある。これは一時的なものかもしれないし、持続的なものかもしれない。ストレージデバイスやファイルシステムからエラーコードが出ない場合、ファイルシステムのメタデータがゴミになると、OSのファイルシステムドライバがどう動くかは全くわからない。再フォーマットはカメラでやるべきだし、そのカードはそのカメラ専用で使うべきだよ。そして、そのカメラだけがそのカードに書き込むことができる。個別の画像を削除するのもやめた方がいいね。

iOSのImage Captureアプリを使って、Photosアプリじゃなくてインポートしてみた?カメラやSDカードからMacのフォルダに画像を移せるから、その後Photos.appにドラッグすればいい感じだよ。試してみる価値あり!