[小ネタ] Mac OS の Time Machine を一時的に停止する

投稿者: | 2019/12/13

Temporarily disabling Mac OS Time Machine.

今日は小ネタです。(ここ数日、いろいろ長い記事を書きまくったので。)

Mac OS を使っている方は、Time Machine という機能を御存知かと思います。

定期的に、ディスクのバックアップをしてくれるツールですね。

もしかすると最近のバージョンの Mac OS ではいろいろ改善されているのかも知れませんが、Time Machine は、いろいろと痒いところに手が届かないツールでもあります。たとえば、バックアップのスケジュールを指定できないとか、バックアップしたデータをリストアするのに専用のコマンドが必要だったりとか。

そのための代替ツールとして、rsync-time-machine とか、既存の Time Machine を補助するツールとかいろいろ公開されてます。前者は、私が VMware Fusion の仮想マシンをバックアップするのに活用しています。Time Machine だとうまくコンパクトにバックアップできないんですよね。

今日は、そんな複雑な話ではない、小ネタです。(なんでこんなこと書いているかと言うと、xz コマンドが終了するまで、まだあと 2時間ほどかかりそうだからです。 🙂 )

こんなときにバックアップ始めるんじゃない〜!!

Mac OS を使っていると、「おいおい、こんなときにバックアップ始めるんじゃないよ!」と思うことはありませんか?

  • tar コマンドや xz で、でかいファイルのアーカイブ中
  • 仕事で急ぎのプロジェクトをビルド中
  • git clone ででかいプロジェクトを取得中

ちなみに、そのようなとき、同様に OS がスリープしたりすると、さらに腹立たしいですよね。

Mac OS には caffeinate というコマンドがあって、あるプロセスが実行中に OS をスリープさせないようにできます。たとえば、時間のかかるコマンド hogehoge を実行するときには、

$ caffeinate hogehoge

とすると、hogehoge コマンドが終了するまで OS のスリープを防いでくれます。しかし大抵、コマンドを実行してからそういうことに気づくものです。例えば、あるファイル foo.tar を xz で圧縮し始めてから、「あ、その間に昼飯でも食いにいくかな」ということはよくあるものです。そんなときは、caffeinate コマンドの -w オプションを利用できます。

いま、xz コマンドのプロセス ID が 1234 だとしたとき(ps コマンドで PID を確認してください)、

$ caffeinate -w 1234

と実行すると、xz コマンドが終了するまで OS をスリープさせません。

ようやく本題に戻ります。問題は、OS がスリープしないのはいいのですが、その間に Time Machine のバックアップが始まってしまうことがあることです。た、頼むから、巨大なファイル foo.tar と foo.tar.xz(圧縮中)があるときにバックアップなんか始めないでくれ〜。

そんなときは、こうします。まず、Time Machine を停止します。

$ sudo tmutil disable

これは、GUI「システム環境設定」を使っても良いですね。次に、caffeinate -w を実行する訳ですが、だいたい、後で Time Machine を再度有効にするのを忘れてしまうものです。そこで、次のようにします。

$ caffeinate -w 1234; sudo tmutil enable

これで、Time Machine は自動的に再有効化されます。

なーんだ、それだけか。。。と思われるでしょうが、甘いです。これだと、tmutil コマンドは sudo で実行することになるので、後でパスワードを聞いてきてしまうんですね。たぶん、xz コマンドが終了した頃にはそんなことを忘れていて、ターミナル(シェル)を quit(exit) してしまうことでしょう。

tmutil コマンドをパスワード無しで実行するにはどうしたら良いか?  答えは簡単で、sudo の sudoers ファイルを編集すれば良いのです。私の Mac OS El Capitan の場合ですと、visudo コマンドを使って(sudo visudo)、sudoers ファイルの末尾に以下を追加します。yokoyama は、私のユーザー名です。tmutil コマンドだけでなく、ついでに pmset コマンドもパスワード無しで実行できるようにしておきましょう。

yokoyama ALL=(ALL) NOPASSWD: /usr/bin/pmset, /usr/bin/tmutil

簡単ですね。もちろん、これらのコマンドをパスワード無しで実行できるようになりますので、いちおう、セキュリティには御注意ください。

今日の小ネタはここまで。