Какую утилиту использовать для очистки после внезапного отключения диска?
В случае, если внешний жесткий диск физически отключен, а устройство монтируется с помощью устройства отображения, очистка не производится.
Особенно:
- каталог, в котором был смонтирован диск, пуст
- крепление все еще присутствует в креплении (8)
- устройства-устройства отображения все еще присутствуют
- физическое устройство все еще присутствует как
/dev/sd*
В этом сценарии без очистки вышеперечисленных элементов первые три шага требуют ручной очистки (с помощью umount, dmsetup remove и триггера udevadm --subsystem-match=block). Даже тогда каталог sysfs на диске все еще присутствует в /sys/bus/scsi/drivers/sd
и вам нужно вручную повторить 1 > delete, чтобы убедиться, что устройство SCSI незарегистрировано. Без этого, переподключение диска обратно не работает.
Итак, мой вопрос - есть ли программа, которая может обнаружить, когда физический диск, на который было назначено устройство, больше не отвечает и выполнить необходимую очистку?
1 ответ
Я не знаю о программе, которая могла бы сделать это для вас, однако на одном этапе у меня было устройство, которое периодически оказывалось в этом состоянии, внезапно отключаясь. После ручного выполнения действий, описанных выше, соединение было бы нормально, и мое решение основывалось на том, что, когда это произошло, точка монтирования показала пустую, хотя система все еще верила, что что-то смонтировано.
Мое решение - поместить на диск простой пустой файл, наличие которого затем можно проверить с помощью сценария оболочки, и автоматически очистить. У меня больше нет диска или полного сценария оболочки, но я могу дать вам базовый пример того, как создать свою собственную, и вы можете добавить команды, которые вам пришлось выполнить, чтобы выполнить очистку вручную, когда вы это сделали.
Обратите внимание, что в этом примере я буду использовать / mnt / externalhd в качестве точки монтирования и предположить, что искомый файл называется.isonline в его корневой файловой системе. Вы можете проверить наличие существующего файла на диске, также предполагая, что он никогда не изменится во время работы. Обратите внимание, что оператор if также проверяет наличие записи / dev, поэтому мы не создаем цикл очистки, ожидая повторного подключения устройства, однако поиск и использование правильной записи дисков /dev/disk/by-uuid/* будет более точным. и важно, если порядок подключения ваших устройств может измениться проблема, которой, к счастью, у меня никогда не было.
if [ ! -e /mnt/externalhd/.isonline ] && [ -e /dev/sdb ]; then {
# This line optionally logs the disconnect to a file for your records.
echo "`date '+%d %b %Y %H:%M:%S'` OFFLINE: /dev/sdb disconnected, cleaning up" >> /var/log/externalhd.log
# Do whatever you need to do to clean up the bad unmount and enable reconnection
# Optionally log the completion of the cleanup process
echo "`date '+%d %b %Y %H:%M:%S'` CLEANUP: /dev/sdb cleanup process completed" >> /var/log/externalhd.log
}
fi
Надеюсь, это поможет, я немного запутался в командах, которые мне пришлось выполнить, чтобы завершить полную очистку, и кажется, что я удалил старый скрипт, когда сам привод окончательно умер. После того, как у вас есть скрипт, настроенный с помощью команд, которые вы должны запустить для очистки вашего диска, они будут такими же, какие вы используете, когда будете делать это вручную, хотя вы должны удалить sudo
часть из них.
Затем сценарий можно запустить через cron, чтобы регулярно проверять наличие плохого демонтажа и автоматически очищать его при каждом обнаружении. Предполагая, что скрипт сохранен в / home / user / cleanumount, следующие шаги могут добавить для него задание cron. Пример будет запускать проверку каждые 5 минут.
Сначала запустите следующую команду:sudo crontab -u root -e
Вас могут попросить выбрать текстовый редактор из списка, нажав номер в меню, если это так, просто выберите предпочитаемый редактор, нажав соответствующий номер.
Затем добавьте следующие две строки в ваш crontab (верхняя строка является необязательным, но рекомендуемым комментарием, чтобы вы знали, что он делает).
# Run /home/user/cleanumount every 5 minutes to cleanly unmount /dev/sdb after sudden disconnects
*/5 * * * * /home/user/cleanumount
Затем сохраните ваш файл и выйдите из текстового редактора, новый crontab будет автоматически установлен и загружен в демон cron.
Если 5 минут не достаточно часто, вы можете настроить первую часть строки, замените ее на простой * для запуска каждую минуту или, например, */2 для каждых 2 минут */3 для каждых 3 минут и т. Д., Более подробную информацию о crontab можно найти, запустив man 5 crontab
Надеюсь, вы найдете это полезным, если только какой-нибудь умный человек не придет с изящным инструментом, чтобы сделать всю эту информацию, которую я выписал для вас, излишней, если это так здорово:)