Какую утилиту использовать для очистки после внезапного отключения диска?

В случае, если внешний жесткий диск физически отключен, а устройство монтируется с помощью устройства отображения, очистка не производится.

В частности:

  • каталог, в котором был смонтирован диск, пуст
  • , монтирование все еще присутствует в монтировании (8)
  • [ 114] устройства отображения устройства все еще присутствуют
  • физическое устройство все еще присутствует как /dev/sd*

В этом сценарии, без очистки пунктов выше, первые три шага нужна ручная очистка (с помощью umount, dmsetup remove и триггера udevadm --subsystem-match = block). Даже в этом случае каталог sysfs на диске все еще присутствует в /sys/bus/scsi/drivers/sd, и вам нужно вручную повторить 1> delete, чтобы убедиться, что устройство SCSI незарегистрировано. Без этого повторное подключение диска обратно не работает.

Итак, мой вопрос - есть ли программа, которая может определить, когда физический диск, на который было назначено устройство, больше не отвечает и выполнить необходимую очистку?

2
задан 12 March 2012 в 19:04

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

Надеюсь, вы найдете это полезным, если только какой-нибудь другой умный человек не придет с изящным инструментом, чтобы сделать всю эту информацию, которую я выписал, для вас излишней если так фантастично :)

0
ответ дан 12 March 2012 в 19:04

Другие вопросы по тегам:

Похожие вопросы: