外付けハードドライブの電源が切れるのを防ぐことはできますか?大規模なダウンロードのために一晩ドライブをつけたままにしましたが、午前中にチェックすると、ダウンロードが失敗し、unable to access the drive
というメッセージが表示されました。
ドライブの読み書きは完全にできます。小さなダウンロードでも問題ありませんが、時間がかかるダウンロードは、I/Oエラーのために失敗するようです。
ドライブでbadblocks
スキャンを実行しましたが、エラーは見つかりませんでした。
SMARTセルフテストを開始できません:
外付けUSBドライブを切断してから再接続しました。 dmesgの結果は次のとおりです。
[ 289.881673] usb 1-1.1: USB disconnect, device number 5
[ 305.182474] usb 1-1.1: new high-speed USB device number 6 using ehci-pci
[ 305.275807] usb 1-1.1: New USB device found, idVendor=152d, idProduct=2338
[ 305.275812] usb 1-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=5
[ 305.275825] usb 1-1.1: Product: USB to ATA/ATAPI bridge
[ 305.275828] usb 1-1.1: Manufacturer: JMicron
[ 305.275830] usb 1-1.1: SerialNumber: 000001D91CA8
[ 305.276594] usb-storage 1-1.1:1.0: USB Mass Storage device detected
[ 305.276914] scsi Host5: usb-storage 1-1.1:1.0
[ 306.275373] scsi 5:0:0:0: Direct-Access WDC WD25 00KS-00MJB0 PQ: 0 ANSI: 5
[ 306.275787] sd 5:0:0:0: Attached scsi generic sg3 type 0
[ 306.276317] sd 5:0:0:0: [sdc] 488397168 512-byte logical blocks: (250 GB/233 GiB)
[ 306.277429] sd 5:0:0:0: [sdc] Write Protect is off
[ 306.277435] sd 5:0:0:0: [sdc] Mode Sense: 28 00 00 00
[ 306.278429] sd 5:0:0:0: [sdc] No Caching mode page found
[ 306.278433] sd 5:0:0:0: [sdc] Assuming drive cache: write through
[ 306.288959] sdc: sdc1 sdc2
[ 306.292063] sd 5:0:0:0: [sdc] Attached SCSI disk
ドライブが使用中の「blkid」の出力。 500MB相当のファイルをドライブにコピーしながら、そのスクリーンショットを撮りました。
以下のlsblk
の出力:
userone@userone:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 232.9G 0 disk
├─sda1 8:1 0 487M 0 part /boot
├─sda2 8:2 0 1K 0 part
└─sda5 8:5 0 59.2G 0 part
└─sda5_crypt 252:0 0 59.2G 0 crypt
├─ubuntu--vg-root 252:1 0 43.2G 0 lvm /
└─ubuntu--vg-swap_1 252:2 0 15.9G 0 lvm [SWAP]
sdb 8:16 0 232.9G 0 disk
├─sdb1 8:17 0 500M 0 part
├─sdb2 8:18 0 232G 0 part
└─sdb3 8:19 0 470M 0 part
sdc 8:32 0 232.9G 0 disk
├─sdc1 8:33 0 232.4G 0 part /media/userone/New Volume
└─sdc2 8:34 0 470M 0 part
sr0 11:0 1 1024M 0 rom
loop0 7:0 0 86.6M 1 loop /snap/core/4571
loop1 7:1 0 90.3M 1 loop /snap/coolreader3/1
loop2 7:2 0 86.7M 1 loop /snap/simplescreenrecorder/1
loop3 7:3 0 236.5M 1 loop /snap/pycharm-community/64
loop4 7:4 0 86.9M 1 loop /snap/core/4830
loop5 7:5 0 85M 1 loop /snap/simplescreenrecorder-mardy/4
loop6 7:6 0 86.6M 1 loop /snap/core/4650
userone@userone:~$
大規模なダウンロードだけでなく、HDDから外部HDDに大きなファイルをコピーする場合にも、5年近く前にバグがあります: Ubuntuが遅くなり、USBから/にファイルをコピーしているときにハングします 。
多くのユーザーが投稿したソリューションは、ライトバックキャッシュを確認することです。
$ cat /proc/vmstat | egrep "dirty|writeback"
nr_dirty 15
nr_writeback 0
nr_writeback_temp 0
nr_dirty_threshold 261131
nr_dirty_background_threshold 130406
ここで受け入れられた答え(66のアップ投票): stackexchange.com-ファイルをペンドライブにコピーしているときにPCがフリーズするのはなぜですか?
使用することをお勧めします:
echo $((16*1024*1024)) > /proc/sys/vm/dirty_background_bytes
echo $((48*1024*1024)) > /proc/sys/vm/dirty_bytes
受け入れられた答えは、間接演算を使用して、ダーティバックグラウンドバイトに16 MiB、ダーティバイトに48 MiBを設定することです。
ただし、最初のリンク(バグレポート)から、コメント#83では、ダーティバイトに対して200 MBのより積極的な値を推奨しています。設定を永続的にするには/etc/sysctl.conf
を編集して次の行を追加します。
vm.dirty_bytes = 200000000
次に、systctl -p
を実行するか、再起動します。
最初のリンクには他にも多くの提案がありますが、この一般的な解決策が機能しない場合は、他の提案を試す必要があります。
ところでdirtyは悪意のあることを意味するものではありません。これは、ディスクへの書き込みを待機しているRAMに保持されているデータを意味します。したがって、ダウンロードの実行中は、情報はRAMに保持され、外部ハードドライブには書き込まれません。非アクティブなために電源が切れている可能性があります。
また、コメントで述べたように、blkid
はUbuntu 18.04では何も明らかにしませんが、lsblk
は外部ドライブを含むすべてを明らかにします。
接続されているデバイスのblkid
でデバイス名を取得するか、dmesg
を確認します。次に、hdparm
で電源管理をオフにします。
# get device name
$ Sudo blkid
/dev/sda1: UUID="..." UUID_SUB="..." TYPE="somefs" PARTUUID="..."
/dev/sdb1: UUID="..." UUID_SUB="..." TYPE="someotherfs" PARTUUID="..."
$ Sudo dmesg
...
[ 305.276914] scsi Host5: usb-storage 1-1.1:1.0
[ 306.275373] scsi 5:0:0:0: Direct-Access WDC WD25 00KS-00MJB0 PQ: 0 ANSI: 5
[ 306.275787] sd 5:0:0:0: Attached scsi generic sg3 type 0
[ 306.276317] sd 5:0:0:0: [sdc] 488397168 512-byte logical blocks: (250 GB/233 GiB)
[ 306.277429] sd 5:0:0:0: [sdc] Write Protect is off
...
出力からコマンドを見るとわかるように、USBディスクは/ dev/sdcとして登録されています。そのため、このデバイスの電源管理を無効にします。
# disable power management
$ Sudo hdparm -B 255 /dev/sdc
詳細については hdparm ArchWiki をご覧ください。
更新:スーパーユーザー権限が必要なため、Sudo
をコマンドに追加します。
私には、前の2つの答えの組み合わせがうまくいきました。 cronjobで毎分「/ sbin/hdparm -B 255/dev/sdc」を実行しました。
# Edit the crontab as root user (it will open the crontab with your favorite editor)
$ Sudo crontab -e
# add the following line, save and close the editor
* * * * * /sbin/hdparm -B 255 /dev/sdc >/dev/null 2>&1
別のアイデア:USBデバイスのベンダー電源管理の無効化をサポートしていないの場合、cronjobでそれを維持できます。
ルートユーザー用のcronjobを作成します。これにより、毎分ファイルが作成され、ファイルシステムが同期され、その後削除されます。
# Edit the crontab as root user (it will open the crontab with your favorite editor)
$ Sudo crontab -e
# add the following line, save and close the editor
* * * * * touch /media/userone/New\ Volume/keepalive; sync; rm -f /media/userone/New\ Volume/keepalive
これにより、USBデバイスが稼働し続けるはずです。