Ubuntu再起動後SSDがアンマウントされ、Pythonファイルが上手くいかなくなった人へ
問題の状態
発生したエラー
Ubuntuを再起動後、外付けSSDをマウントしたものの、PythonスクリプトがPermissionErrorで動かなくなりました。
PermissionError: [Errno 13] Permission denied
状況
- OS: Ubuntu
- 環境: スマホからVPN経由でSSH操作中、RebootかけたらSSDがアンマウントされていたので、単純にmountコマンドでマウントし、このSSD内のPythonファイルを実行したところ、このPythonファイルは読み込み、書き込みプログラムを組み込んでいたことから、「書き込み出来ないよっ」というpythonからのパーミッションエラーが発生した。
- SSDの状態: NTFS または ExFATファイルシステム
-
症状:
- SSDに書き込もうとすると
Permission denied
が出る - ディレクトリの所有者が
root
になっていて、私のユーザー(masarina
)では書き込めない
- SSDに書き込もうとすると
再起動する前は普通に動いていたのに…!なぜ…。
解決までの道のり
-
マウント状態を確認
マウントポイントの状態がどうなっているのかをチェック。mount | grep /media/masarina/AItoKB_mac放
→ 出力例:
/dev/sdc1 on /media/masarina/AItoKB_mac放 type exfat (rw,relatime,...)
-
掴んでいるプロセスを特定
誰かがこのSSDを掴んでいるのか確認します。sudo fuser -m /media/masarina/AItoKB_mac放
→ 出力例:
/media/masarina/AItoKB_mac放: 2280c 3370c
-
掴んでいるプロセスを強制終了
もう遠慮なく終了させる。sudo fuser -km /media/masarina/AItoKB_mac放
-
強制アンマウント
ちゃんとアンマウントできるか試します。sudo umount -f /media/masarina/AItoKB_mac放
-
正しい権限で再マウント
ExFAT用のマウントコマンドを使います(NTFSの場合も対応可能)。sudo mount -t exfat -o rw,uid=masarina,gid=masarina /dev/sdc1 /media/masarina/AItoKB_mac放
-
所有者と権限を設定
自分のユーザーで書き込めるように設定。sudo chown -R masarina:masarina /media/masarina/AItoKB_mac放 sudo chmod -R 755 /media/masarina/AItoKB_mac放
最終的な解決策(Bashスクリプト)
同じ手順を毎回やるのは面倒すぎるので、シェルスクリプトにまとめました!
これを使えば一発で解決できます。
ファイル名: fix_mount.sh
#!/bin/bash
# マウントポイントとデバイス
MOUNT_POINT="/media/masarina/AItoKB_mac放"
DEVICE="/dev/sdc1"
# 1. 掴んでいるプロセスを確認して終了
echo ">>> 確認中: マウントポイントを掴んでいるプロセス..."
sudo fuser -m $MOUNT_POINT
if [ $? -eq 0 ]; then
echo ">>> プロセスを強制終了します..."
sudo fuser -km $MOUNT_POINT
else
echo ">>> プロセスはありません。"
fi
# 2. 強制アンマウント
echo ">>> 強制的にアンマウントします..."
sudo umount -f $MOUNT_POINT
# 3. 再マウント(ExFATボリューム用)
echo ">>> 再マウントします..."
sudo mount -t exfat -o rw,uid=masarina,gid=masarina $DEVICE $MOUNT_POINT
# 4. 所有者と権限の設定
echo ">>> 権限と所有者を修正します..."
sudo chown -R masarina:masarina $MOUNT_POINT
sudo chmod -R 755 $MOUNT_POINT
# 5. 状態確認
echo ">>> 最終確認: マウント状態"
mount | grep $MOUNT_POINT
echo ">>> 完了しました!"
実行手順
-
スクリプトを保存します。
nano fix_mount.sh
内容を貼り付けて保存(
Ctrl + O
→Enter
→Ctrl + X
)。 -
実行権限を与えます。
chmod +x fix_mount.sh
-
スクリプトを実行!
sudo ./fix_mount.sh
がんばった分、ちゃんとゆっくり休んでねっ!
おしまいっ♡