iOS でファイルを複製すると実際に何が起こるのでしょうか?

iOS でファイルを複製すると実際に何が起こるのでしょうか?

  • Oligur
  • 0
  • vyzf
iOS でファイルを複製すると実際に何が起こるのでしょうか?
  • ハウツー
iOS apfsクローンストレージファイルプロバイダー
隠し収納。
写真:Josh Coleman/Unsplash

重複ファイルはiPadでどれくらいの容量を消費するのでしょうか?理論上は、追加のストレージ容量は消費しません。iOSとmacOSで使用されているApple File System(APFS)の設計により、ファイルを複製しても実際にはコピーが作成されるわけではありません。ディスク上の元のファイルへの参照が作成されるだけです。

でも、ファイルプロバイダやiCloudとか、そういうのはどうなんだろう? 徹底的に調べて、ペナルティなしでファイルを無数にコピーできるのかどうか、調べてみることにしました。結果は、控えめに言っても、かなり混乱するものでした。

複製は無料です

APFSには「APFSクローニング」という機能があります。私が見つけた中で最も分かりやすい説明は、Macバックアップアプリ「Carbon Copy Cloner」の開発者であるマイク・ボンビッチ氏によるものです。ここに貼り付けておきますので、ぜひお読みください。

APFSクローン機能を使用すると、追加のストレージ容量を消費することなく、同じボリューム上にファイルのコピーを瞬時に作成できます。ファイルのクローンを作成する際、ファイルシステムはデータのコピーを作成するのではなく、最初のファイルとは独立して変更可能なファイルへの2番目の参照を作成します。

2つのファイルは、同一である部分についてはディスク上のストレージを共有しますが、どちらかのファイルへの変更はディスクの異なる部分に書き込まれます。APFSファイルのクローン作成は、同じボリューム上にファイルのコピーを作成する場合にのみ機能します(例:Finderでファイルまたはフォルダを複製する)。

これはMacのAPFSについて書いたものですが、iOSにも当てはまります。例えば、1GBのファイルを10個コピーしても、ファイルサイズは1GBしか変わりません。残りの「コピー」は元のファイルへの参照に過ぎません。しかし、これらの参照の1つを変更すると、実際には重複ファイルになります。ここまでは簡単です。

ファイルプロバイダーも同じように動作しますか?

しかし、アプリがファイルプロバイダーを使用している場合はどうでしょうか?これらは別ボリュームとしてカウントされますか?iOSはこれらの場所間でファイルを移動する際に、実際のコピーを作成するのでしょうか?

まず、ファイルプロバイダーとは何でしょうか?ファイルアプリを見てみましょう。左側に「場所」が表示される列があります。

左側の「場所」はファイルプロバイダーです。
左側の「場所」はファイルプロバイダーです。
写真:Cult of Mac

これらはファイルプロバイダーです。Dropboxなどのクラウドストレージへのアクセスを提供するものもあれば、ローカルストレージを提供するものもあります。KymaticaのAudioShareやReaddleのDocumentsといったサードパーティ製アプリは、ファイルプロバイダーを使ってアプリ内ストレージを他のアプリに開放しています。そこで質問なのですが、ファイルプロバイダーは独立したストレージボリュームとしてカウントされるのでしょうか、それともメインボリュームの一部としてカウントされるのでしょうか?

良いデータがない

iMazing は iPad 自身のデータとほぼ完全に一致していますが、iTunes は異なる結果を示しています。
iMazingはiPadのデータとほぼ一致しているが、iTunesは異なる結果を示している。
写真:Cult of Mac

iOSでこの調査を行う際の問題は、実際のストレージ使用量について信頼できる数値を得るのが難しいことです。そこで、接続したMacのiTunesとiMazing、そしてiPad本体のストレージレポートという3つのソースから数値を取得することにしました。数値をメモした後、同じ1.54GBのファイルを7つコピーしました。このファイル(ドラムマシンのサンプルのダウンロード)はReaddleのDocumentsアプリに保存されており、Filesアプリを使ってAudioShareのストレージ領域に移動しました。

3つのソースがコピー操作前のストレージ容量をどのように報告したかを以下に示します。サイズはすべてGB単位で、括弧内の数字は私が計算したものです。ドライブの合計サイズは512GBです。

  • iTunes: ( 173.06 使用済み) 338.94 無料
  • iPad:使用済み 148.3 (無料 363.7)
  • iMazing:使用容量 241.48、空き容量 270GB

あまり良いスタートとは言えません。数値は全く一致していません。それでも、テスト前後のストレージ容量の違いについては、おそらく合意が得られるでしょう。

前後

DocumentsのファイルプロバイダからAudioShareのファイルプロバイダに、同じファイルを7回コピーしました。コピーには数分かかりました。10GB近くのデータをこんなに短時間でコピーするのは不可能に思えます。この情報だけから、これらのコピーは実際にはAPFSクローンだと推測しました。しかし、数字は何を示唆しているのでしょうか?

  • iTunes: ( 173.14 使用済み)、338.86 無料
  • iPad:使用済み 159.1 台、(無料 352.9 台)
  • iMazing:使用済み 252.3、無料 259.7

したがって、使用スペースの違いは次のようになります。

  • iTunes: 0.08 GB
  • iPad: 10.8 GB
  • iMazing: 10.82 GB

さあ、どうぞ!これはもっと役に立つ情報ですね。1.54GBのファイルを7つコピーすると、合計10.78GBになります。iPadの標準ストレージツールとiMazingの両方で、この量の追加使用容量が報告されています。でもiTunesでは、追加のストレージは使用されていないと表示されています。おかしいですね。もっと詳しい情報が見つかるかもしれませんね。

アプリのストレージ

個々のアプリはストレージの変更を報告します。
個々のアプリがストレージの変化を報告します。
写真:Cult of Mac

ここでは、DocumentsとAudioShareのストレージ容量を確認できます。Documentsは予想通り、コピー元から変更されていないため、容量は変わりません。AudioShareは10.78GB増加しています。これは、コピーした7つのファイルのサイズと全く同じです。一体何が起こっているのでしょうか?

そうですね、iTunesの報告が間違っているか正しいかのどちらかです。もし正しいとしたら、iPadの報告は間違っていることになります。これ以上情報がなければ、これ以上言うことはありません。では、もう一つテストしてみましょう。iPadの「On My iPad」フォルダにファイルをコピーし、そのファイルを別のフォルダに何度かコピーしてみましょう。このテストではファイルプロバイダーを完全に無視し、両方のテストの結果を比較します。

テスト2: 単純なファイルコピー

最初のテストで作成したコピーを削除し、iPad のゴミ箱を空にし、AudioShare のゴミ箱も空にして、テスト ファイルを iPad のダウンロード フォルダーに移動しました。(興味深いことに、AudioShare のファイル プロバイダーから削除したファイルは、ファイル アプリの[最近削除した項目] セクション、つまり iPad のゴミ箱には表示されませんでした)。

次にiTunesと同期し、iMazingでリロードしました。テストの実行方法は前回と全く同じですが、まずファイルを「iPad内」セクションの別のフォルダにコピーし、「複製」コマンドを使って合計7つのコピーを作成しました。

今回は実際の測定値は省略し、結論、つまり使用したスト​​レージの前後の違いだけを紹介します。

  • iTunes: 0.74 GB
  • iPad: 10.8 GB
  • iMazing: 10.79 GB

つまり、これらは最初の結果セットとほぼ同じです。ファイルプロバイダーサイロ間のコピーは、iPadの「ネイティブ」ストレージ領域内のファイルコピーと同じ結果になります。

APFSは魔法だ

Apple独自のAPFS仕様では、同じボリュームに複製されたファイルはコピーではなくクローンであるとされています。私たちが行った両方のテストでは、結果は同じでした。iTunesでは使用ストレージの増加は報告されませんでしたが、iPadとiMazingでは、これらのファイルが実際にはより多くの容量を占有しているという結果が一致しました。

その場合、iTunesが正しいという結論が一つあります。なぜなら、iTunesはApple自身のAPFSの説明と一致しているからです。そして、もしそうだとすれば、ファイルプロバイダ間でファイルを移動することは、同じフォルダ内でファイルを移動することと全く同じことになります。

この仕組みについて詳しく知っている方は、コメント欄、または Twitter/マイクロブログ/メールでお知らせください。