每隔几天,似乎随机地,我们在运行 CentOS 6.4 64 位的 hp DL380 G5 服务器上备份到外部 USB 硬盘时会失败。如果我cd /mnt/backup
运行ls
它,它会抱怨ls: reading directory .: Input/output error
,但mount -l
会报告/dev/sda1 on /mnt/backup type ext4 (rw)
。当我让某人到现场检查时,他们总是报告外部驱动器上的指示灯缓慢闪烁,这对于睡眠状态来说显然是正常的。但我不会要求它进入睡眠状态,直到 rsnapshot 运行后,但 rsnapshot 导致我的脚本在发生这种情况之前就失败了。它是在尝试节省电量吗?我怎样才能让它不这样做?
rsnapshot 抱怨:
/usr/bin/rsnapshot daily: ERROR: /mnt/backup/.snapshots does not exist.
当然,如果现场人员拔下并重新插入驱动器,我可以重新安装它,并且.snapshots
确实存在,rsnapshot 将运行而不会出错。直到下一次随机事件发生之前,情况就是这样。顺便说一句,这是一个相当新的 WD Passport 驱动器。
那么我该如何让它保持清醒呢?
答案1
如果这个硬件关机是 Linux 内核的正常功能,那么它就能正确处理。不,我认为这是 HP 硬件的一大惊喜。
我建议一个简单的解决方法。将其放入 crontab 中:
* * * * * dd if=/dev/sda of=/dev/null bs=512 count=1
这将每分钟读取一次 U 盘的分区表。这不会缩短 U 盘的使用寿命,因为它只对其进行了读取操作,但会阻止其进入睡眠模式。
在我的系统中,我从未处理过这样的问题。如果安装了 pendrive,它就会被安装,如果我忘记了它并在 2 周后尝试使用它的分区,它就可以被打开,而不会出现任何内核警告。
答案2
也许防止硬盘睡眠和固件缓存的最好方法是读取磁盘的随机扇区:
* * * * * bash -c 'dd if=/dev/sda of=/dev/null count=1 skip=$RANDOM'
对我来说,它效果很好。