web-dev-qa-db-ja.com

新しいドライブにコピーすると、TimeMachineのサイズが爆発します

TimeMachineバックアップデバイスとして使用している640GBUSB2ドライブを、現在のバックアップ履歴を失うことなく1TB FireWire400ドライブに交換しようとしています。 640GBドライブがほぼいっぱいで、この組み合わせの転送制限が400Mbpsであることを考えると、このプロセスにはかなりの時間がかかり、途中で中断される可能性があることに気付きました。その結果、Finderの代わりにrsyncを使用して試してみることにしました( Appleが提案 のように)。いくつかの不正スタートといくつかのオンライン検索の後、私は次のrsyncコマンドに落ち着きました。

rsync -aHXSvPh --hfs-compression --protect-decmpfs /Volumes/Macintosh\ BK/Backups.backupdb /Volumes/Untitled

ただし、このコマンドは、宛先ドライブで重大な肥大化を引き起こしています(新しいドライブが約1.5倍大きいにもかかわらず、古いドライブの内容が新しいドライブに収まるとは思わないほどです)。この肥大化を解消するために不足しているrsyncオプションはありますか(v3.1.2プロトコルバージョン31を使用しています)?

また、仕事に間違ったツールを使用している可能性もあります。 ddのようなブロックコピーツールの方が適切でしょうか?もしそうなら、中断(完全なシステムクラッシュによって引き起こされたもの、rsyncコマンドの実行中に2回発生したものなど)が発生した場合にプロセスを再開できるように設定するにはどうすればよいですか? ?私はこれまでddを使ったことがないので、その機能に慣れていません(ただし、MacOSXに同梱されているバージョンとGNUバージョン8.25)の両方にアクセスできます)。

1
rpspringuel

ddは、ターゲットボリュームサイズに基づいてさまざまなボリュームデータ構造を調整しないため、ソースボリュームと宛先ボリュームが正確にである場合にのみ適切です。 -)同じサイズ。通常、代わりにasrをお勧めしますが、クラッシュ後に続行するための良い方法はありません。

したがって、1つの可能性は、ソースに一致するようにターゲットボリュームを縮小し、ddを使用して生のボリュームをコピーしてから、ターゲットを完全な1TBに拡張することです。私はこれをテストしていませんが、これはあなたが必要とするプロセスだと思います:

  1. diskutil listは、ボリュームのデバイス識別子を一覧表示します(たとえば、disk2s3は物理ディスク#2の3番目のスライス(パーティション)です)
  2. diskutil info <sourcevolumeid>は、ソースボリュームサイズをバイト単位で一覧表示します(他の多くの情報とともに)
  3. diskutil resizeVolume <targetvolumeid> <sourcevolumesize>B(「B」は「バイト」を意味します。diskutilmanページの「SIZES」セクションを参照してください)。
  4. diskutil unmount <sourcevolumeid>およびdiskutil unmount <targetvolumeid>-マウントされたボリュームでddを使用しないでください!
  5. Sudo dd if=/dev/r<sourcevolumeid> of=/dev/r<targetvolumeid>コピーを実行します。デバイス名の「r」プレフィックスに注意してください。これはOSディスクバッファをバイパスし、私の経験ではddの実行がはるかに高速になります。 ボリュームIDを正しく取得するように十分注意してください。そうしないと、バックアップに空のボリュームをコピーする可能性があります!
  6. 最後に、diskutil resizeVolumeまたはディスクユーティリティを使用して、ターゲットボリュームをディスク全体のサイズに拡張します。

ああ、警告:このプロセスは、ソースも宛先もCoreStorageによって管理されていないことを前提としています。それらが暗号化されている場合(たとえば、暗号化されている場合)、状況は少し複雑になります。

2
Gordon Davisson

簡単に言うと、Time Machineはハードリンクを多用します。ハードリンクでは、1つの基になるファイル(1バイトのストリーム)がファイルシステムの複数のディレクトリに複数のファイル名として表示されます。ハードリンクに精通していないコピーを行うと、その基になるファイルは複数回コピーされます(ハードリンクされるたびに1回)。

たとえば、最初から存在している1GBのディスクイメージファイルがあるとしましょう。これは、すべての定期的なTime Machineバックアップにハードリンクとして表示され、100個のTimeMachineバックアップがあります。ハードリンクについて賢くせずにそれをコピーすると、100個のハードリンクがそれを指している1GBではなく、その1GBファイルの100個のコピーが合計100GBになります。

Appleは、Finderコピーのアドバイスがハードリンクを適切に保存していることを知っていると確信しています。ディスクユーティリティの「復元」機能も同様に機能すると思います。「復元」という名前に惑わされないでください。これは、バックアップから復元するためだけのものではありません。ディスクユーティリティを使用して、あるボリューム(またはディスクイメージ)から別のボリュームにブロックコピーを実行します。

追加するために更新:
うーん、 rsync -Hハードリンクを保持する必要があります。宛先ボリュームがHFS +、またはOS Xがハードリンクで信頼する別のファイルシステムであると確信していますか?

2
Spiff