【DH2300】SMBファイル共有のマウントを自動で切断するようにしてみて | hikihashiのブログ

hikihashiのブログ

主に購入したガジェット系の感想と、カメラで撮った写真の感想を気ままに書いています。

 最近またUGREENのNASでネットワークエラーを起こすようになったので、今回はそのことについて書いていこうと思います。

 

 

 まず最初に、ネットワークエラーを起こす大元の原因はUSB LANアダプターを繋いでいることなので、それを止めれば良いだけなのですが、何とかして使えるようにしたいと使い続けています。

 

 

 色々と試した結果、1ヶ月前までは調子が良く、1ヶ月以上経過してもエラーを起こさずに使えていたのですが、NASのアップデートで再起動してからまたエラーが起こるようになりました。

 

 アップデート以外にもMac mini M4に買い替えて設定を少し変えたり、スイッチングハブの接続を少し弄ったのも原因だとは思うのですが、数日使うとエラーを起こすようになりました。

 

 結局原因ははっきりしないものの、Mac miniのWi-Fiをオフにして使っていることで、スリープ時にネットワークが切断され、SMB接続が切れてしまうのも原因の一つだと考え、スリープ時にSMBのマウントを切断するように設定することにしました。

 

 

 以前Geminiで「SleepWatcher」でスリープ復帰時にSMBの再マウントする設定を調べたのですが、軽く書いただけでまとめていなかったこともあり、使い方をすっかり忘れてしまいました。

 

 なので、今回は新しく設定をやり直すので、ついでに自分用にメモを残しておこうと思います。

 

 

 ターミナル(Homebrewインストール済み)を起動し、

 

1. SleepWatcherのインストール

brew install sleepwatcher

2. サービスの起動(常駐化) 

brew services start sleepwatcher

3. 動作確認

ps aux | grep sleepwatcher

4.「sleep」ファイルの作成

nano ~/.sleep

5. 中身を書き込む

#!/bin/bash

# アンマウントするNASのパスを配列(カッコ内)に改行(またはスペース)区切りで列挙します
MOUNT_POINTS=(
    "/Volumes/Obsidian"
    "/Volumes/Ufile"
    "/Volumes/WD SSD"
)

# 配列の中身を1つずつ取り出してループ処理する
for MOUNT_POINT in "${MOUNT_POINTS[@]}"; do
    # ディレクトリが存在する(マウントされている)場合のみアンマウント処理を実行
    if [ -d "$MOUNT_POINT" ]; then
        diskutil unmount "$MOUNT_POINT"

        # 動作確認用にログを残す場合は以下の行のコメントアウトを外す
        # echo "$(date): Unmounted $MOUNT_POINT" >> ~/.sleep_log.txt
    fi
done

[^(コントロール)O→エンターで書き込み→^Xで終了]

 

6. スクリプトに実行権限を付与

chmod +x ~/.sleep

7. 手動での動作確認

~/.sleep

8. 復帰用スクリプト(~/.wakeup)の作成

nano ~/.wakeup

9. マウント処理の記述

#!/bin/bash

# ネットワーク接続が復帰するまで待機(環境に合わせて5〜10秒程度に調整してください)
sleep 5

# マウントするNASのSMB URLを配列で指定
# 形式: "smb://NASのIPアドレス/共有フォルダ名"
# ※すでにMacで接続したことがあり「キーチェーン」にパスワードが保存されていれば自動で認証されます。
MOUNT_URLS=(
    "smb://NASのIPアドレス/共有ファイル名"
    "smb://NASのIPアドレス/共有ファイル名"
    "smb://NASのIPアドレス/共有ファイル名"
)

# 配列の中身を1つずつ取り出してマウント処理を実行
for URL in "${MOUNT_URLS[@]}"; do
    # AppleScriptを使用してマウントを実行
    osascript -e "mount volume \"$URL\""
    
    # 動作確認用にログを残す場合は以下の行のコメントアウトを外す
    # echo "$(date): Mounted $URL" >> ~/.wakeup_log.txt
done

10. スクリプトに実行権限を付与

chmod +x ~/.wakeup

11. 手動での動作確認

~/.wakeup

 

 ひとまず、以上の内容を入力することで、スリープ時にマウントの解除、復帰時に再マウントされるようになったものの、これでエラーが起こらなくなったのかは不明なので、今後も色々と試す必要がありそうです。

 

 

 とりあえず、今回はここで終わりにし、また何かあれば書いていこうと思います。