2015年7月21日火曜日

スパースバンドルの夢、再び

本ブログの最初の方にスパースバンドルの見果てぬ夢というエントリがある。Time Machineバックアップを、ローカルハードディスクに置いたスパースバンドル・ディスクイメージに保存できるかについて書いたものだ。

そういうことはできないというのが、当時の結論だった。

だが、最近、Time Capsuleに置いたスパースバンドル・ディスクイメージの振る舞いそのもの ー 必要な時にMacにマウントされ、バックアップが終わったら、マウント解除される ー は、無理な(ややこしい)ものの、似たような事はできる事が分かった。

本エントリでは、2年半強の時を経てたどり着いた、ローカルハードディスクに置いたスパースバンドル・ディスクイメージにTime Machineバックアップを保存する方法を説明したい。
なお、スパースバンドルについては、こちらに分かりやすい説明があったのでリンクしておく。

  1. スパースバンドル・ディスクイメージの作成
    イメージの作成自体はディスクユーティリティで次の図のようにすれば良い。イメージのサイズと名前はお好みである。図の例では、サイズを128GB、名前をTM_BackUpとしている。
  2. Time Machineを騙す
    Time Machine環境設定パネルからは、マウントされたディスクイメージをバックアップディスクとして選択することはできない。だが、次のようにターミナルから入力すると、認識させることができる。[情報ソース]
    sudo tmutil setdestination /Volumes/TM_BackUp
    
  3. ディスクイメージをマウントさせるシェルスクリプト
    ディスクイメージがマウントされていないと、自動バックアップはできない。手動ならできるが、それでは、筆者のようなモノグサ者には不満が残る。そこで、シェルスクリプトを使う。
    次のシェルスクリプトをAuto mount TM Image.shというファイル名(例)で保存する。保存場所は任意だが、次項で使うので覚えておいて欲しい。
    #!/bin/sh
    
    # Auto mount Time Machine disk image on Login.
    
    # ここは自分のバックアップHDDにする
    TM_Volume="/Volumes/Data 750GB"
    
    # ここは自分のディスクイメージ名にする
    Image_Name="TM_BackUp.sparsebundle"
    
    ImagePath="$TM_Volume"/"$Image_Name"
    
    Mount_Image="/Volumes/"`echo $Image_Name | cut -d . -f1`
    
    if [ -w "$ImagePath" -a  ! -d "$Mount_Image" ]; then 
        /usr/bin/hdiutil attach "$ImagePath"
    fi
    
    exit 0
    
    シェルスクリプトには、実行権限を付与する。
    chmod 755 "Auto mount TM Image.sh"
    
  4. ログイン時に、シェルスクリプトを実行するLaunchdプロパティリスト
    こういうことはLaunchd.plistにやってもらうのが手っ取り早い。
    次のプロパティリストをjp.yourName.tm_image.mount.plistというファイル名(例)で保存する。保存場所はホームディレクトリ > Library > LaunchAgentsである。
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
        <dict>
            <key>Label</key>
            <!-- yourNameを書き換える -->
            <string>jp.yourName.tm_image.mount</string>
            <key>KeepAlive</key>
            <dict>
                <key>PathState</key>
                <dict>
                    <!-- ExternalHDDNameを書き換える -->
                    <key>/Volumes/ExternalHDDName</key>
                    <true />
                </dict>
            </dict>
            <key>ProgramArguments</key>
            <array>
                <!-- シェルスクリプト保存場所を絶対パスで指定 -->
                <string>/Path/To/YourScript/Auto mount TM Image.sh</string>
            </array>
            <key>RunAtLoad</key>
            <true/>
            <key>StandardErrorPath</key>
            <string>/tmp/StandardError.log</string>
            <key>StandardOutPath</key>
            <string>/dev/null</string>
        </dict>
    </plist>
    
    プロパティリストをLaunchdに登録する。
    launchctl load /Users/YourAccount/Library/LaunchAgents/jp.yourName.tm_image.mount.plist
    

以上で、外付けローカルハードディスクに置いたディスクイメージにTime Machineバックアップが作成できるようになった。
ディスクイメージだから、上限サイズ(拡張も可能)は決まっている。すなわち、Time Machineによるハードディスクの使用容量制限ができることになる。

2015.07.23改訂
ディスクイメージがある外付けHDDのマウント状況に応じたLaunchd.plistの加筆修正。(HDDがマウントされたらシェルスクリプトを起動するという条件を追加)以下参照。

<key>KeepAlive</key>
<dict>
    <key>PathState</key>
    <dict>
        <key>/Volumes/ExternalHDDName</key>    <!-- ExternalHDDNameを書き換える -->
        <true />
    </dict>
</dict>

0 件のコメント :

コメントを投稿