久しぶりに Mac の設定の話です。ちょっとディープです。
Mac に限らず、自分のパソコンのディスクが壊れてブートしなくなったことを考えると恐怖ですよね?それを避けるのにどうしてますか?バックアップ?でも、壊れたときにすぐにしなくてはならない仕事があったらどうします?
僕はハードディスクのパーティションを三つに分けてます。それぞれのパーティションの名前を Macintosh HD (64GB), Backup (64GB), Internal (570GB) としましょう。Macintosh HD がブート用のパーティションで、Mac OS X とそのアプリケーションが含まれています。Backup は Macintosh HD のバックアップ領域です。そして、Internal に私のデータのほとんどが含まれています。
二つのパーティションにレプリカができると Time Machine がうまく働かないこと、そしてそれを解決するための方法について紹介します。
* ブート可能な Backup の作成方法
まずは Backup の作り方です。Mac OS X には、定期的にバックアップを作成する Time Machine と呼ばれている機能があります。そこで、Macintosh HD のバックアップを Internal に作成しています。
あまり知られていないかもしれませんけれども、Mac OS X のインストール用ディスクを使うと、Time Machine のバックアップからディスクボリュームを回復する機能があります。インストール用ディスクからブートし、OS のインストールをする代わりにメニューからディスクユーティリティを選択することでボリュームの回復をすることができます。私はこの機能を使って、Time Machine に保存された最新のバックアップを Backup に回復しています。以上で、Macintosh HD と Backup の同期が完了します。
ただ、ここで一つ困った問題があります。Macintosh HD と Backup が完全に同期するためにボリューム名が衝突するのです。つまり、元々 Backup だったボリュームの名称が、ボリュームの回復で Macintosh HD に化けてしまうのです。このため Time Machine がバックアップを作成すべきボリュームがいずれなのか混乱してエラーを起こすようになってしまい、上で紹介したバックアップ計画が破綻してしまいます。
* 自動マウントの抑制
こういうことになって、標記の特定のディスクをマウントしない設定について探し始めました。やり方はいくつかあるようですけれども、結局採用したのは /etc/fstab で元々 Backup だったディスクボリュームの自動マウントを禁止する方法です。
/etc/fstab は、ハーディスクのボリュームをマウントする方法をカスタマイズするための設定ファイルです。デフォルトでは空っぽで、Mac OS X が認識するすべてのディスクボリュームを /Volumes に自動的にマウントするようです。
結論から先に書くと、以下のような設定を施しました。
UUID=A7D6E3FE-BDD5-3D2B-80E8-A095D0B87813 none hfs rw,noauto
UUID=8C2CB23A-451C-39E8-864D-582E6607E868 /Users/nozomi ufs rw,auto
LABEL=WINDOWS none msdos rw,noauto
UUID で始まる行は、Mac OS X のフォーマットされたボリュームに対する指定です。UUID=… がディスクボリュームに相当する識別子にあたります。これを見つけるには、ターミナルから diskutil コマンドを用います。まず、diskutil list ですべてのディスクボリュームの情報を得ます。
/dev/disk0
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *640.1 GB disk0
1: EFI 209.7 MB disk0s1
2: Apple_HFS Internal 485.8 GB disk0s2
3: Apple_HFS Nozomi 81.7 GB disk0s5
4: Apple_HFS Macintosh HD 70.0 GB disk0s3
/dev/disk1
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *64.6 GB disk1
1: EFI 209.7 MB disk1s1
2: Apple_HFS Macintosh HD 64.3 GB disk1s2
バックアップに相当するのは /dev/disk0 のドライブの4番目のボリューム (disk0s3) ですので、この情報を詳しく眺めることにします。
rudolf:~$ diskutil info disk0s3
Device Identifier: disk0s3
Device Node: /dev/disk0s3
Part Of Whole: disk0
Device / Media Name: Untitled
(中略)
Volume UUID: A7D6E3FE-BDD5-3D2B-80E8-A095D0B87813
(後略)
これにより、内蔵ディスクに保存されたバックアップがの UUID が A7D6E3FE-BDD5-3D2B-80E8-A095D0B87813 であることがわかります。
このボリュームは普段はマウントしたくないので、/etc/fstab に none hfs rw,noauto と設定します。ここで重要なのは最後の noauto です。この設定によって、Mac OS X は指定された UUID を持つボリュームを認識しても、自動的にはマウントしなくなります。
今日の話題とは直接は関係ないのですが、/etc/fstab の残りの設定項目の二番目は内蔵ディスクに作成した妻のためのディスクボリュームを /Users/nozomi に自動マウントするための設定です。設定のミソは二番目の項目にマウントするパスを指定していることです。三番目は私の USB Flash メモリの Windows と名付けられたボリュームを自動的にはマウントしないための設定です。
* 明示的なマウントとアンマウント
さきほどの設定で自動マウントを抑制しました。では、それらをマウントするときにはどうすればいいのでしょう?
少し面倒ですけれども、diskutil コマンドに UUID を指定して以下のようにやります。
diskutil mount A7D6E3FE-BDD5-3D2B-80E8-A095D0B87813
アンマウントは同様に以下のとおりです。
diskutil unmount A7D6E3FE-BDD5-3D2B-80E8-A095D0B87813
* さらに簡単な Backup の作成方法
ここまでは、Mac OS X の標準的な機能で Backup を作成することを紹介してきましたけれども、OS X のインストール DVD が必要になったり、ボリュームの回復に時間がかかるなど、やや問題があります。ディスクボリュームのバックアップを作成するためのソフトウェアを用いるとこの手間がかなり楽になります。ぼくが使い始めたのは [[ChronoSync:http://www.econtechnologies.com/pages/cs/chrono_overview.html%5D%5D という $40 のソフトです。以前、MIT の石井先生の記事を読んでいて、知りました。世の中にはフリーソフトもあるそうですけれども、石井先生が長年、お使いになっているという信頼感でこのソフトにしました。
ブート可能なディスクボリュームを作成するのは応用編かと思ったのですが、ドキュメントにきちんと書かれていました。特にトラブルもなく以下のように設定するだけでした。
[[http://kwakita.sakura.ne.jp/img/snap/0929e46c4c0e12f4d6ff6e4f4a56f326.png]]
Time Machine と異なり、ChronoSync は同名のディスクボリュームが存在しても動作するようです。私の場合、35GB くらいのディスクボリュームのバックアップが 10 分足らずで終りました。
ただ、このままバックアップ用のボリュームをマウントし続けると Time Machine が文句を言うので、ChronoSync を起動するときだけバックアップ用のボリュームをマウントするようにしています。
* まとめ
普段の起動ボリュームを Time Machine でバックアップするとともに、ChronoSync を用いて別のパーティションにブート可能なボリュームとして複製しています。
** パーティション
内蔵ディスクをいくつかのパーティションに分けます。たとえば、ブート用のパーティション (disk0s1: Macintosh HD)、それを複製するパーティション(disk0s2: Macintosh HD)、ディスクの残りの部分 (disk0s2: Data)みたいに。disk0s2 は disk0s1 の複製ですので、両者の名称は同じになります。
つぎに disk0s1 に Mac OS X をインストールします。
** 複製領域の自動マウントを抑制
/etc/fstab に自動マウントを抑制する設定をします。たとえば、disk0s2 に対応する UUID が A7D6E3FE-BDD5-3D2B-80E8-A095D0B8781 ならば、/etc/fstab に以下の行を追加します。
UUID=A7D6E3FE-BDD5-3D2B-80E8-A095D0B87813 none hfs rw,noauto
ここで再起動して disk0s2 がマウントされないことを確認して下さい。
** Time Machine の設定
普通に Time Machine を設定します。ブート用のパーティション (disk0s1) の内容を ディスクの残りの部分 (disk0s2: Data) に保存します。
** ChronoSync の設定
Time Machine が終了したことを確認して、ChronoSync の設定作業をします。ChronoSync を動かすためには、さきほど抑制した複製のためのパーティションをマウントしなくてはいけません。そのままにすると、今度は TimeMachine が文句を言うので作業後にアンマウントしなくてはいけません。これは気をつけないと間違えそうなので、簡単なスクリプトを作成しました。テキストエディタを用いて以下のスクリプト (MakeBootableBackup.command) を作成します。
#!/bin/sh
uuid=A7D6E3FE-BDD5-3D2B-80E8-A095D0B87813
diskutil mount $uuid
open –wait-apps $HOME/lib/ChronoSync/MakeBootableBackup.sync
diskutil unmount $uuid
ここで3行目に指定したのは、複製のためのパーティションに相当する UUID です。このスクリプトに実行権限を与えるのを忘れないで下さい。
ChronoSync.app の代わりに、このスクリプトを利用すれば、ChronoSync を起動する直前に複製のためのディスクボリュームをマウントし、複製作業が終わればそれをアンマウントします。