先のファイルサーバにバックアップしたデータのNASへのリストア方法をまとめておきます。
(NASの入れ替えで、旧NASからバックアップしたものを新NASに入れ替えです)
こちらもGemini活用!
まずはリストアのためのシェルの作成です。ここはバックアップのときと同様Geminiに作ってもらいます。バックアップとほぼ同じで元と先が入れ替わる程度を想定していたんですが、NTFSからLinuxへの転送を理解していてオプションが違いました。あとログの出方も違っていて、ここはバックアップの時のほうが良かったかな。最終的には全体の開始・終了と共有フォルダごとの開始・終了を出力する形に修正してもらいました。
まずは1フォルダでテストです。するとFailedが結構な数出てきた。もちろんGeminiに相談。どうもApple系デバイスが勝手に作るフォルダが邪魔しているようです。バックアップはされているが戻そうとするとダメなよう。無くてもいいモノのようなので対象外にするオプションを入れながら再実行を繰り返しFailedがなくなるまで繰り返しました。最終シェルはこれ。これが意外と時間かかった。
#!/bin/bash
# --- 設定エリア ---
NEW_NAS_IP="192.168.11.5"
USER="user" # NAS user
PASS="pass" # NAS password
# 同期するフォルダのリスト
FOLDERS=("data" "photos")
###FOLDERS=("data")
# パス設定
USB_MOUNT="/mnt/nas" # バックアップ済みのUSB HDDルート
NAS_MOUNT="/mnt/new_nas" # 新NASのマウント先ルート
LOG_DIR="/home/user/restore_logs"
# ログ用ディレクトリ作成
mkdir -p "$LOG_DIR"
echo "=========================================="
echo "全体リストア開始時刻: $(date '+%Y-%m-%d %H:%M:%S')"
echo "=========================================="
# --- 実行エリア ---
for FOLDER in "${FOLDERS[@]}"; do
SRC="$USB_MOUNT/$FOLDER"
DST="$NAS_MOUNT/$FOLDER"
LOG_FILE="$LOG_DIR/restore_${FOLDER}_$(date +%Y%m%d).log"
echo "------------------------------------------"
echo "フォルダ処理開始: $FOLDER [時刻: $(date '+%H:%M:%S')]"
# 1. マウントポイント作成
sudo mkdir -p "$DST"
# 2. マウント (SMB 3.0)
echo "新NASの $FOLDER をマウント中..."
sudo mount -t cifs "//$NEW_NAS_IP/$FOLDER" "$DST" \
-o username="$USER",password="$PASS",vers=3.0,sec=ntlmssp,file_mode=0777,dir_mode=0777
if [ $? -eq 0 ]; then
# 3. rsync実行
echo "データを転送中... (詳細は $LOG_FILE)"
# --- Apple特有のゴミを除外して実行 ---
sudo rsync -avP --modify-window=1 \
--exclude=".Apple*" \
--exclude=".*Apple*" \
--exclude="Temporary Items" \
--exclude=".DS_Store" \
--exclude="._*" \
--exclude="Network Trash Folder" \
--exclude="TheVolumeSettingsFolder" \
"$SRC/" "$DST/" > "$LOG_FILE" 2>&1
# 4. アンマウント
echo "完了。アンマウントします。"
sudo umount "$DST"
echo "フォルダ処理終了: $FOLDER [時刻: $(date '+%H:%M:%S')]"
else
echo "エラー: $FOLDER のマウントに失敗しました。次へ進みます。"
fi
done
echo "=========================================="
echo "全体リストア終了時刻: $(date '+%Y-%m-%d %H:%M:%S')"
echo "=========================================="
では、実行!(シェル内は個別のログだけにしたので、コマンドでサマリのログファイルを指定。ここはバックアップの時と作りが違う。バックアップの時はシェル内でサマリログの指定をしたので、シェル実行だけでよかった。どっちがいいかは好みが分かれそう)
# リストアシェルの実行
nohup bash ./restore_all_to_new_nas.sh > restore_summary.log 2>&1 &
# バックアップ時のシェル実行はこうだった
nohup bash ./sync_all_nas.sh > /dev/null 2>&1 &
※バックアップはこの先も使うけど、リストアはほぼ使うことはないので、バックアップがちゃんとしていればいいかな。
夜の23時に実行して、翌朝4時に終わりました。
==========================================
全体リストア開始時刻: 2026-03-01 23:05:33
==========================================
~中略~
==========================================
全体リストア終了時刻: 2026-03-02 04:20:31
==========================================