是否可以防止外部硬盘断电?我整晚开着硬盘进行大量下载,但当我早上检查时,下载失败并显示消息unable to access the drive
。
我可以完美地读取/写入驱动器,小型下载没有问题,但需要更多时间的下载似乎由于某些输入/输出错误而失败。
我对驱动器进行了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:~$
答案1
使用 获取设备名称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
不仅在下载大量文件时,而且在将大文件从 HDD 复制到外部 HDD 时也存在一个近五年前的错误:从 USB 复制文件或将文件复制到 USB 时,Ubuntu 速度变慢并挂起。
许多用户发布的解决方案是检查您的写回缓存:
$ 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 - 为什么当我将文件复制到 U 盘时我的电脑会冻结?
建议使用:
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
或者重新启动。
第一个链接中还有许多其他建议,如果这个常见的解决方案不起作用,您可能需要尝试其他建议。
顺便提一句肮脏的并不意味着任何邪恶。它意味着数据保存在 RAM 中等待写入磁盘。因此,在下载过程中,信息保存在 RAM 中,而不是写入外部硬盘。不活动可能是它关机的原因。
另外,正如我在评论中提到的那样,blkid
Ubuntu 18.04 没有透露任何内容,但lsblk
透露了包括外部驱动器在内的所有内容。
答案3
另一个想法:如果 USB 设备的供应商不支持禁用电源管理,你可以用 cronjob 来让它保持活动状态。
为 root 用户创建一个 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 设备保持运行
答案4
对我来说,前两个答案的组合是有效的。我每分钟在 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