Time Machine 用 HDD を移行しようとして時間を無駄にしつつ解決するまで

こんばんは。 Signal compose の leico です。今回はさっきまでハマっていた問題が解決したのでそれを記事にします。
自分用の wiki と化している github pages(
http://leico.github.io/TechnicalNote/)から転載です。


ところで昔は二重カキコって叩かれていましたよね。今ってどうなんでしょう?
複数のSNSやストリーミングサービスに作品を載せている方とかいらっしゃるのでそこまでじゃなくなっているんですかね。

移行が終わらないし容量がおかしい

Time Machine 用ディスクの移行方法は 別のバックアップディスクに Time Machine バックアップを転送する方法 - Apple サポート に詳しく載っています。しかし

この部分の 2. - 3. の部分が延々と終わりませんでした。

延々終わらず、HDD 容量をオーバーする量が転送されています

公式の方法ではうまくいかないので、

  • 原因
  • 試してだめだった方法
  • 成功して解決するまで

をまとめました。

参考:

シンボリックリンクのリンク先がコピーされている

ありえない容量がコピーされている原因は、バックアップのディレクトリ構成内でシンボリックリンクが貼られている = 以前のバックアップから変化していないファイルが多重にコピーされているのが問題のようでした。
つまり、シンボリックリンクがシンボリックリンクとしてコピーされてくれさえすればこの問題は解決します。
この時点で、普通にドラッグ & ドロップではコピーできない = 公式の方法では移行できないことが判明します。

シンボリックリンクをそのままコピーする

cp -a のヘルプを参照してみます。

-a    Same as -pPR options. Preserves structure and attributes of
       files but not directory structure.
 -p    Cause cp to preserve the following attributes of each source
       file in the copy: modification time, access time, file flags,
       file mode, user ID, and group ID, as allowed by permissions.
       Access Control Lists (ACLs) and Extended Attributes (EAs),
       including resource forks, will also be preserved.
 -P    If the -R option is specified, no symbolic links are followed.
       This is the default.
 -R    If source_file designates a directory, cp copies the directory
       and the entire subtree connected at that point.  If the
       source_file ends in a /, the contents of the directory are
       copied rather than the directory itself.  This option also
       causes symbolic links to be copied, rather than indirected
       through, and for cp to create special files rather than copy-
       ing them as normal files.  Created directories have the same
       mode as the corresponding source directory, unmodified by the
       process' umask.

-a の説明どおり、アクセス権、ファイル日時等を全て保った状態でコピーするようです。シンボリックリンクもそのままで追跡しないようです。

cp -a が実行できない

と、いうことで cp -a を試しましたが、 sudo しても権限がないと言われてしまいます。

$ sudo cp -av /Volumes/Backup_late2016/Backups.backupdb /Volumes/Backup_late2016\ 1/.
Password:
cp: /Volumes/Backup_late2016/Backups.backupdb: unable to copy extended attributes to /Volumes/Backup_late2016 1/./Backups.backupdb: Operation not permitted
/Volumes/Backup_late2016/Backups.backupdb -> /Volumes/Backup_late2016 1/./Backups.backupdb
cp: /Volumes/Backup_late2016/Backups.backupdb: Operation not permitted

ここに挙がっている通りで、 Time Machine 用のファイルをターミナルから操作する際は フルディスクアクセス の権限がターミナルに必要なようです。

フルディスクアクセス権限を付与してターミナルを再起動させます。これをしたら無事にコピーがスタートしました。が、すごく時間がかかっていました。しばらく放置していたのですが、画像のところで HDD がスリープするほど長時間止まっていました。これはよくありません。

あまりにも長時間ストップしているので中止しました。別の方法を考えます。

dd 最強

こうなったら dd コマンドで HDD ごとコピーします。完了後にディスクユーティリティでパーティションを 1TB に拡張させることで移行を試みました。 これが正解でした。

まずはハードディスクが /dev/ 以下のどこに割り当てられているかディスクユーティリティで確認します。

disk2 の表記が見えるので、この HDD の場合 /dev/disk2 に割り当てられています。 disk* を確認したらマウントを解除して、間違えないように書き込みます。

今回は dd なので disk* の先頭に r をつけて /dev/rdisk* 、シーケンシャルにしても問題ありません。 ランダムアクセスじゃない分速度があがります。

自分の Mac で計っていないですが、これに従ってブロックサイズを設定しました。通常より早いような気がします。

$ sudo dd if=/dev/rdisk3 of=/dev/rdisk2 bs=16m
Password:
44712+1 records in
44712+1 records out
750156374016 bytes transferred in 10548.198580 secs (71117013 bytes/sec)

この dd を行う際にも フルディスクアクセス 権限が必要でした。移行先の HDD をマウントすると前のドライブ同様、 Time Machine に入ることができます。

Time Machine に入れました。

これが確認できたら容量に合わせてパーティションを拡張します。 ディスクユーティリティのパーティションから空き領域を消去します。

  1. 空き領域を選択し
  2.  円グラフ下部の - をクリックして消去
  3. 右下の適用でパーティションが拡大される

もしエラーが出た場合は First Aid を試してみましょう。パーティションの拡張が終わった後も一度かけておくのがおすすめです。

なにか起きたらまずは First Aid でエラーチェックを。

ここまでで移行が終了しました。長かった。

今回の件から得るべき教訓は、公式を信用しすぎるなということですね。

お仕事のご依頼/相談/お問い合わせ

シグナル・コンポーズでは音楽制作、Max/Max for Liveデバイス制作など、各種テクニカルなコンサルティングやディレクション、R&D、プロトタイピング、制作などお受けしています。何かあればお気軽にお問い合わせください。よろしくお願いします。

  

執筆:大石 桂誉

タグ:
TimeMachine

関連記事

前の記事へ

ORCΛのOperatorsを紐解いていく(V〜Zと*、#)

次の記事へ

ORCΛのオペレーターまとめ