0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Windows PCのUSB-HDDの電源を切れなくする方法

Last updated at Posted at 2024-10-26

Windows PCのUSB-HDDの電源が自動で落ち、HDDにアクセスすると電源がONになるまで30秒ぐらい待たされてイライラする、といった経験をされている方は多いかと思います。

この現象の対処方法を調べると、Windowsの機能「USBセレクティブサスペンド」を無効化する、といった方法がたくさん出てきます。今回は、これらを試しても改善しなかった場合の対処方法を紹介します。

現象

かくいう私も、USBセレクティブサスペンドの無効化や、レジストリをいじる方法など、検索で出てきた方法を一通り試したのですが、改善の兆しが全く見られませんでした。
PC環境は以下です。

  • OS: Windows 11 Home
  • CPU: AMD Ryzen 7 3700X
  • マザーボード: PRIME B550M-K (ASUSTeK COMPUTER INC.)
  • USB-HDD: WD Elements 25A3 (10TB)

AMDのCPUがwindowsと相性が悪いのか、WesternDigital製HDDに特殊な設定があるのか、原因はわかりませんが、とにかく、何をやってもダメでした。HDDにアクセスするとエクスプローラが30秒ぐらい固まる現象が度々発生し、ストレスがたまる日々を過ごしてました。

対処方法

ようやくたどりついたのは、シンプル、かつ、原始的な方法ですが、

一定時間毎にUSB-HDDに自動アクセスする

です。

これを具体的にどう実現するか、は、色々なやり方があると思いますが、今回は以下方法で実現しました。

USB-HDDにテキストファイルを出力するスクリプトを、
WSL2+Ubuntuのスケジューラcronで定時実行

WSL2、Ubuntuのインストール手順は、長くなってしまうので省略します。
以下記事等を参照してインストールしてください。

WSL2、Ubuntuのインストール後の手順は以下です。

  1. USB-HDDに自動アクセスするスクリプトを作成
  2. スケジューラcronの有効化
  3. スクリプトをcronに設定

1. USB-HDDに自動アクセスするスクリプトを作成

ファイル名/保存場所は適当でOKです。
テキストファイルの中身は何でもよいですが、テキストファイルを出力する場所は、

ターゲットとなるUSB-HDD内

にします。

以下例は、現在時刻をテキストファイル(hdd_accessed.txt(※名前は任意))に出力する処理です。
ターゲットとなるUSB-HDDがFドライブだったので、/mnt/f/以下にテキストファイルを出力するようにしてます。

hdd_access.sh
#!/bin/bash
echo `date` > /mnt/f/work/hdd_accessed.txt

2. スケジューラcronの有効化

WSL2 Ubuntu内で、/etc/wsl.confを以下内容で作成し、wslを再起動 wsl --shutdownすれば有効化できます。

/etc/wsl.conf
[boot]
systemd=true

3. スクリプトをcronに設定

WSL2 Ubuntuのターミナル上でcrontab -eと入力すると、テキストエディタが起動するので、末尾行に以下を入力します。

crontab -e
*/10 * * * * /mnt/f/work/hdd_access.sh

行頭の*/10が、「10分毎」という設定です。10を20にすれば、20分毎、にできます。その後は「*」を4つ書いた後に、上述で作成したスクリプトファイル名をフルパスで書きます。

詳細な書き方は、以下記事等が簡潔にまとめられてわかりやすかったです。

これで、スクリプト(hdd_access.sh)が10分毎に実行され、USB-HDDに10分毎に自動アクセスするようになり、USB-HDDの電源が切れることがなくなりました。

なお、WSL内のスケジューラcronは、PC起動後にWSLを一度でも起動しないと動作しません。

なので、日常的にWSLを使ってない方は、スタートアップフォルダにWSL+Ubuntuターミナルのショートカットを置くなど、PC起動後に必ずWSLが起動するような一工夫が必要です。

起動したWSL+Ubuntuターミナルウィンドウは、「×」ボタンで終了しても、cronは動き続けます。

おわりに

今回の対処方法は、やること自体は原始的でシンプルなのですが、具体的な実現方法が、WSLやLinuxに馴染みのない方にはとっつきづらい方法となってしまいました。最近、会社でたまたま、cronを使った定時実行をやったので、こちらの方法を実施しました。

Windows標準のタスクスケジューラやバッチファイルを使ったやり方で実現できれば、実現のハードルがかなり下がると思うので、そちらのやり方が確立できれば、また投稿しようと思います。

(後記)以下に、Windows標準のタスクスケジューラを使ったやり方をUPしましたので、ぜひご覧ください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?