つい先日 APFS(Apple File System)でフォーマットした HDD から、HFS+ でフォーマットした HDD に rsync で差分バックアップができないことがありました。APFS は、macOS の新しいフォーマット形式なのですが、macOS で長らく使われてきた HFS+ と仕様が異なるためこのようなことが稀に発生するようです。そこで今回は、APFS から HFS+ に rsync で差分バックアップができない場合の対処法とその原因をまとめてみました。
対処法
コピー元の HDD が APFS フォーマット、コピー先の HDD が HFS+ フォーマットの場合は、iconv オプションを追加して文字エンコードを、コピー元(APFS)が「utf8」、コピー先(HFS+)が「utf8-mac」になるように指定すればOKです。
rsync -av --delete --iconv=utf8,utf8-mac /Volumes/APFS/ /Volumes/HFS-plus/
原因
この症状が発生する原因は APFS と HFS+ で取り扱うファイル名やディレクトリ名の文字エンコードの違いによるものです。
フォーマット形式 | 文字エンコード |
---|---|
APFS | UTF-8(Unicode 9.0) |
HFS+ | 通称「UTF-8-MAC」(UTF-16 + Apple独自のUnicode正規化形式) |
ファイル名やディレクトリ名が英数文字のみであれば問題はないのですが、日本語などの場合は同じ文字でも APFS と HFS+ では違う文字(ファイル名が変更された)と rsync が認識する場合があり、まったく更新していないファイルもコピーしてしまうことがあります。
おわりに
そもそもの原因は HFS+ でApple独自のUnicode正規化形式を使ったことにあります。(詳しくは「mac の濁点問題」で検索してみてください)これが APFS で改善されたのは喜ばしいことですね。
コメント