Раз в несколько дней, по-видимому, случайно, наше резервное копирование на внешний жесткий диск USB выходит из строя на нашем сервере hp DL380 G5 под управлением CentOS 6.4 64-bit. Если я 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
Если бы это hw poweroff было нормальной функцией ядра linux, оно бы справилось с этим правильно. Нет, я думаю, что это замечательный сюрприз от оборудования HP.
Предлагаю тривиальный обходной путь. Вставьте в crontab:
* * * * * dd if=/dev/sda of=/dev/null bs=512 count=1
Это будет считывать таблицу разделов флешки каждую минуту. Это не остановит жизнь флешки, поскольку она выполняет только операции чтения с нее, но предотвратит включение ее спящего режима.
В моих системах я никогда не сталкивался с такой проблемой. Если флешка была смонтирована, она была смонтирована, и если я забывал ее и пытался использовать ее раздел через 2 недели, ее можно было включить, без единого предупреждения ядра.
решение2
Возможно, лучшим способом предотвратить спящий режим жесткого диска и кэширование прошивки является чтение случайного сектора вашего диска:
* * * * * bash -c 'dd if=/dev/sda of=/dev/null count=1 skip=$RANDOM'
У меня все отлично получилось.