fsck: параметры для наиболее тщательной проверки диска

39475
Fred Hamilton

У меня есть диск с известной проблемой (я знаю, потому что dd глохнет, когда я пытаюсь его клонировать). Но когда я загружаюсь с живого CD и запускаю fsck на размонтированном разделе, я получаю это:

ubuntu@ubuntu:~$ sudo fsck /dev/sdf1 fsck 1.41.4 (27-Jan-2009) e2fsck 1.41.4 (27-Jan-2009) /dev/sdf1: clean, 227091/9625600 files, 12789815/38497756 blocks 

спустя миллисекунду. Трудно поверить, что он проверил весь жесткий диск за мс.

Я также не уверен, должен ли я fsck'ing sdf1 или весь физический диск sdf. Когда я пробую весь диск:

ubuntu@ubuntu:~$ sudo fsck /dev/sdf fsck 1.41.4 (27-Jan-2009) e2fsck 1.41.4 (27-Jan-2009) fsck.ext2: Device or resource busy while trying to open /dev/sdf Filesystem mounted or opened exclusively by another program? 

Что я не понимаю, потому что кажется, что ни один из разделов не смонтирован (я просто загрузился с live CD и запустил команду).

Итак, мой основной вопрос: как я могу заставить fsck (или другой инструмент, который мог бы работать лучше) тратить больше миллисекунды на анализ моего проблемного диска?

10

3 ответа на вопрос

13
Kristian

Прежде всего, вы правы относительно запуска fsck на разделе - fsck работает только с файловыми системами, а не с целыми дисками. Вы можете получить список всех разделов на диске с помощью fdisk -l /dev/sdd.

Тип вашей файловой системы, вероятно, ext3 (по умолчанию в большинстве дистрибутивов Linux), что означает, что он обычно передает fsck, пока его журнал чист. fsck -fбудет, как упоминалось выше, принудительно провести полную проверку.

Однако, если у вас есть ошибки чтения на диске, никакое количество fsck не поможет dd - поскольку dd действительно не заботится о содержимом диска.

Чтобы заставить dd читать диск и продолжить при ошибках чтения, используйте dd conv=noerror,sync, который будет продолжать при ошибках чтения и добавлять нулевые байты к любому блоку при возникновении ошибки чтения.

После того, как вы закончили резервное копирование, вы должны запустить fsck -fклон, чтобы запустить его снова и снова.

Другой совет: если вы сделаете резервную копию раздела в файл, вы можете подключить его с помощью loopback mount -o loop filename.ext3 /mountpoint. Также, скажем, вы клонируете раздел 200G на диск 500G, затем вы можете запустить resize2fs /dev/sdx1(где sdx - ваш новый диск, разделенный одним разделом 500G), и файловая система будет изменена до 500G.

Наконец, если диск имеет такую ​​форму, что он дает вам ошибки чтения, я бы посоветовал вам не выключать и не включать диск до тех пор, пока вы не закончите восстановление данных. В некоторых режимах сбоев диск в какой-то момент просто перестает вращаться или не распознается ОС, и в этот момент получение данных с диска становится довольно дорогим.

Я попробовал «dd conv = noerror, sync», но полученный клонированный диск не загружался. Что расстраивает, потому что загрузочный диск работает нормально, fscks нормально, но я не могу клонировать его на другой диск, потому что на диске есть 1 плохой блок (где, по-видимому, нет данных). Кажется, я застрял ... Fred Hamilton 14 лет назад 0
Не забывайте, что могут быть другие причины, по которым диск не загружался (другая геометрия диска и проблемы MBR / загрузчика). Если вы можете сначала подтвердить, что файловая система на новом диске в порядке, то вы можете загрузить систему, используя режим восстановления с установочного компакт-диска, обновить загрузчик GRUB и т. Д. Т.е. сначала запустите fsck -f / dev / sdx1, затем попробуйте смонтировать файловую систему с помощью mount / dev / sdx1 / mnt - замените x соответствующей буквой диска. Kristian 14 лет назад 0
Отличное предложение, но когда я запустил fsck -f на клонированном разделе, я получил буквально сотни ошибок (недопустимые блоки в inode, биты сжатия, установленные в файловой системе без поддержки сжатия, плохие блоки расширенных атрибутов и т. Д.), Прежде чем я признал, что dd клон был полностью скрыт ... Не уверен, что делать дальше ... Полагаю, я попытаюсь просто скопировать все файлы в чистый раздел ... В любом случае, спасибо. Fred Hamilton 14 лет назад 0
Лучше использовать ddrescue (или dd_rescue + dd_rhelp), чем dd; умнее обрабатывать ошибки, повторять попытки секторов с ошибками. http://www.gnu.org/software/ddrescue/ddrescue.html http://www.kalysto.org/utilities/dd_rhelp/index.en.html http://www.garloff.de/kurt/linux/ ddrescue / freiheit 14 лет назад 4
Самая тщательная проверка диска (со всеми возможными автоматизированными исправлениями) для корневого раздела ext2, ext3 или ext4 выполняется следующим образом: (1) загрузка с загрузочного носителя (корневой раздел должен быть размонтирован), (2) запуск `e2fsck -f - cc -D -p`. Это делает принудительную проверку с неразрушающей проверкой чтения-записи для носителя и устраняет все найденные проблемы, которые можно безопасно устранить. Для жесткого диска емкостью 2 ТБ может потребоваться несколько дней ... Mikko Rantalainen 11 лет назад 1
Это безумие, `-f` даже не упоминается на странице руководства Jeff Burdges 7 лет назад 0
7
Jonik

Это может не относиться к вашему случаю, но я все равно упомяну об этом:

Для проверки диска более низкого уровня вы можете использовать badblocksутилиту. Он проходит через устройство и сообщает о любых плохих блоках (конечно, он ничего не может починить). Это полезно, по крайней мере, для проверки физического повреждения диска.

Кроме того, e2fsckможно использовать, badblocksчтобы избежать плохих блоков, используемых файловой системой. Из e2fsckруководства:

 -c This option causes e2fsck to use badblocks(8) program to do a read- only scan of the device in order to find any bad blocks. If any bad blocks are found, they are added to the bad block inode to prevent them from being allocated to a file or directory. If this option is specified twice, then the bad block scan will be done using a non- destructive read-write test. 
Также обратите внимание, что `fsck_hfs -s` будет сканировать плохие блоки. awiebe 5 лет назад 0
5
Richard Hoskins

Вы хотите, чтобы опция -f была fsck (принудительная проверка, даже если файловая система кажется чистой.)

Вы должны запустить fsck в однопользовательском режиме. Один из простых способов сделать это без живой загрузки cdrom - перезагрузить с опцией -F.

shutdown -rF now 
Спасибо, но один вопрос: если я перезагружаюсь с параметром -F, используя live CD, как live CD узнает, что он должен был выполнить проверку? Это CD, у меня нет памяти, о которой я знаю ... Fred Hamilton 14 лет назад 0
Я не думаю, что вам нужно делать это с живого компакт-диска. Просто загрузитесь с live cd и запустите fsck на размонтированном разделе с включенной опцией -f (force). ИЛИ, вы можете перезагрузиться с жесткого диска с помощью shutdown -rF. Это заставит fsck перед монтированием файловой системы. Richard Hoskins 14 лет назад 0
На самом деле, это сделает fsck в однопользовательском режиме. Я отредактировал свой ответ. Richard Hoskins 14 лет назад 0
Флаг `-F` для` shutdown` обычно официально не документирован (см. `Man shutdown` и` shutdown --help` и обратите внимание, что его там нет), поэтому вы не можете доверять его работе. Иногда это неоперация. Официально единственный метод сканирования корневого раздела - загрузка с альтернативного носителя. Mikko Rantalainen 11 лет назад 1

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