2024-09-27

Mac用の簡易バックアップスクリプト

K様へ、業務連絡です。

先日は壊れかけたiMacからデータを救出(サルベージ)できて幸運でしたね。

今回は、たまたま、ちょっと古い機種、Intelプロセッサ搭載の2019年モデルだったのでうまくいきましたが、Appleシリコン搭載Macではセキュリティが強化された分、メンテナンス性が低下しており、トラブルが発生すると復旧が難しくなっています。

ことに暗号化されたストレージが壊れてしまった場合、データの復元は極めて困難(ほぼ不可能)です。

故障してからあわてるのではなく、普段から貴重なデータをバックアップしておくことが重要です。

バックアップついては、アップル公式のサポート文書『Mac のバックアップ方法』で次の4つの方法が紹介されています。

  1. Time Machine を使って自動的にバックアップする
  2. iCloud とデータを同期して保存する
  3. ほかのストレージデバイスにファイルを手動でコピーする
  4. 他社製のバックアップユーティリティを使う

K様の場合、失うと困るデータは「デスクトップ」(と「書類」)フォルダ内に保存されているものだけのようですから、「3. ほかのストレージデバイスにファイルを手動でコピーする」方法がよいでしょう。

ただ、普通の人は「定期的にバックアップを実行してください」とかいっても、いつしか忘れてしまうのが世の常です。

そこで、内蔵SSD内の重要なファイルを自動的に外付けのストレージ(SDメモリカード)にコピーするバックアップ用のシェルスクリプトを用意しました。

#!/bin/sh
# backup_now.command
# macOS向け 簡易バックアップ用スクリプト
#
# このスクリプトを実行すると「デスクトップ」(と、もし必要なら「書類」)フォルダの内容が、
# バックアップ用のSDメモリカードにコピー(ミラーリング)される。
# SDメモリカードのボリューム名は 'Backup SD' とし、
# 最上位階層にこのスクリプト 'backup_now.command' が配置されているものとする。
# ボリューム 'Backup SD' のアクセス権は、バックアップ対象ユーザのみに制限しておくとよい。
#
# このスクリプトを /usr/local/bin/backup_now.command のような場所にコピーし、
# ログイン項目に追加しておく。
# これにより、ログイン時に自動的にデータがバックアップされる。
set -euC
BACKUP_VOLUME='Backup SD'
BACKUP_COMMAND='backup_now.command'
# 現在の状態(1世代だけ)をバックアップしたい場合
BACKUP_DIR="$BACKUP_VOLUME"
# 2日分(2世代)のバックアップを保持したい場合
#NOW=$(date '+%s')
#BACKUP_DIR="$BACKUP_VOLUME/$(( (NOW/(24*60*60))%2 ))"
# 一週間分(7世代)のバックアップを保持したい場合
#BACKUP_DIR="$BACKUP_VOLUME/$(date '+%u')"
if [ ! -f "/Volumes/$BACKUP_VOLUME/$BACKUP_COMMAND" ]; then
printf '\n[%s]\n' 'バックアップ用の記録メディアがセットされていません'
exit 1
fi
rsync -av -u --delete --exclude='.DS_Store' "$HOME/Desktop" "/Volumes/$BACKUP_DIR/"
#rsync -av -u --delete --exclude='.DS_Store' "$HOME/Documents" "/Volumes/$BACKUP_DIR/"
for t in 1 2 4 8; do
sleep $t
if diskutil unmount "$BACKUP_VOLUME"; then
printf '\n[%s]\n' '正常にバックアップコピーが作成されました'
break
fi
done

新しく購入されたiMacには、このスクリプトを仕掛けておきましたので、 朝、Macを起動してログインしたとき、ターミナルのウインドウが開き、

正常にバックアップコピーが作成されました

というメッセージが表示されればOK。 前日までに作成された書類が、SDメモリカードにコピーされています。

「正常にバックアップコピーが作成されました」というメッセージが表示されない場合は、バックアップできていません。何か問題が起きているので電話ください。

0 件のコメント:

コメントを投稿