CHKDSK Как проверить и исправить ошибки жесткого диска

Рано или поздно это случается, а именно крах системы или раздела, невозможность проверить файловую систему и т.д. Поэтому системный администратор должен знать что делать в таких ситуациях, так сказать знать как «Отче наш».

Основы работы с fsck

В этой статье мы рассмотрим ручную работу с fsck. Возможно, вам понадобиться LiveCD носитель, чтобы запустить из него утилиту, если корневой раздел поврежден. Если же нет, то система сможет загрузиться в режим восстановления и вы будете использовать утилиту оттуда. Также вы можете запустить fsck в уже загруженной системе. Только для работы нужны права суперпользователя, поэтому выполняйте ее через sudo.

А теперь давайте рассмотрим сам синтаксис утилиты:

$ fsck [опции] [опции_файловой_системы] [раздел_диска]

Основные опции указывают способ поведения утилиты, оболочки fsck. Раздел диска — это файл устройства раздела в каталоге /dev, например, /dev/sda1 или /dev/sda2. Опции файловой системы специфичны для каждой отдельной утилиты проверки.

А теперь давайте рассмотрим самые полезные опции fsck:

  • -l — не выполнять другой экземпляр fsck для этого жесткого диска, пока текущий не завершит работу. Для SSD параметр игнорируется;
  • -t — задать типы файловых систем, которые нужно проверить. Необязательно указывать устройство, можно проверить несколько разделов одной командой, просто указав нужный тип файловой системы. Это может быть сама файловая система, например, ext4 или ее опции в формате opts=ro. Утилита просматривает все файловые системы, подключенные в fstab. Если задать еще и раздел то к нему будет применена проверка именно указанного типа, без автоопределения;
  • -A — проверить все файловые системы из /etc/fstab. Вот тут применяются параметры проверки файловых систем, указанные в /etc/fstab, в том числе и приоритетность. В первую очередь проверяется корень. Обычно используется при старте системы;
  • -C — показать прогресс проверки файловой системы;
  • -M — не проверять, если файловая система смонтирована;
  • -N — ничего не выполнять, показать, что проверка завершена успешно;
  • -R — не проверять корневую файловую систему;
  • -T — не показывать информацию об утилите;
  • -V — максимально подробный вывод.

Это были глобальные опции утилиты. А теперь рассмотрим опции для работы с файловой системой, их меньше, но они будут более интересны:

  • -a — во время проверки исправить все обнаруженные ошибки, без каких-либо вопросов. Опция устаревшая и ее использовать не рекомендуется;
  • -n — выполнить только проверку файловой системы, ничего не исправлять;
  • -r — спрашивать перед исправлением каждой ошибки, используется по умолчанию для файловых систем ext;
  • -y — отвечает на все вопросы об исправлении ошибок утвердительно, можно сказать, что это эквивалент a.
  • -c — найти и занести в черный список все битые блоки на жестком диске. Доступно только для ext3 и ext4;
  • -f — принудительная проверка файловой системы, даже если по журналу она чистая;
  • -b — задать адрес суперблока, если основной был поврежден;
  • -p — еще один современный аналог опции -a, выполняет проверку и исправление автоматически. По сути, для этой цели можно использовать одну из трех опций: p, a, y.
Читайте также:  10 лучших легких дистрибутивов Linux для старых компьютеров

Теперь мы все разобрали и вы готовы выполнять восстановление файловой системы linux. Перейдем к делу.

Как проверить диск на ошибки в командной строке

Также можно проверить диск на ошибки файловой системы используя командную строку открытую с административными привилегиями.

Если выполнить в командной строке команду chkdsk без параметров, то утилита будет сканировать диск в режиме только для чтения, сообщая об ошибках, но не пытаясь их исправить.

Как проверить диск на ошибки в командной строке

Данный режим сканирования не требует перезагрузки и утилита выполняет такую же проверку, как и в способе представленном выше, но только используя консоль командной строки.

Проблема с монтирование в fstab

Второй вариант, который может случиться, это повреждение или некорректная конфигурация файла fstab. В моем случае, при загрузке с systemrescuecd и проверки системы, проблем не было обнаружено и это не помогло. Но при открытии fstab я увидел, в конфигурации нет разделов диска для монтирования, а есть только запись о загрузочном диске:

Проблема с монтирование в fstab

Чтобы решить вопрос, нужно получить UUID ваших дисков через утилиту blkid:

После этого нужно все данные в fstab, сохранить и перезапустить сервер, если все сделали правильно, то сервер запуститься в обычном режиме.

Проблема с монтирование в fstab

Бэд-блоки

У некоторых могут возникнуть вопросы: «что такое эти битые блоки и откуда они, вообще, взялись на моём HDD, если я его ни разу не трогал?» Bad blocks, или бэд-секторы — разделы HDD, которые больше не читаются. Во всяком случае так они по объективным причинам были помечены файловой системой. И скорее всего, с диском в этих местах действительно что-то не так. «Бэды» встречаются как на старых винчестерах, так и на самых современных, поскольку работают они практически по тем же самым технологиям.

Появляются же сбойные секторы по разным причинам.

Бэд-блоки
  • Прерывание записи из-за отключения питания. Вся информация, поступающая на жёсткий диск, разбивается в виде единиц и нулей на самые разные его части. Сбить этот процесс — значит сильно запутать винчестер.
  • Некачественная сборка. Тут и говорить нечего. У дешёвого китайского устройства полететь может что угодно.
Читайте также:  Команды терминала Linux для начинающих. Часть первая

Теперь вы знаете, как сканировать HDD на ошибки. Проверка диска как на Ubuntu, так и на других системах довольно важная операция, которую стоит проводить хотя бы раз в год.

Восстановление битого hdd с помощью ddrescue

Исторически, для побайтового копирования в Linux существовала утилита dd. Недостаток dd, в данном случае в том, что она может копировать данные только с исправных устройств. Данного недостатка лишена ddrescue. Давайте кратко рассмотрим man ddrescue:

GNU ddrescue — Data recovery tool. It copies data from one file or block device (hard disc, cdrom, etc) to another, trying to rescue the good parts first in case of read error. <…>

If you use the mapfile feature of ddrescue, the data is rescued very efficiently, (only the needed blocks are read). Also you can interrupt the rescue at any time and resume it later at the same point. The mapfile is an essential part of ddrescue’s effectiveness. Use it unless you know what you are doing.<…>

Что по русски звучит, как:

GNU ddrescue — Утилита восстановления данных. Утилита копирует данные из одного файла или блочного устройства (жесткого диска, CDROM и т.п.) в другой, пытается спасти данные в случае ошибок чтения.

Если вы используете функцию логфайла, восстановление данные происходит очень эффективно (копируются только необходимые блоки). Вы можете прервать копирование в любое время и возобновить его в любой момент и копирование продолжется с того места, с которого остановилось. Логфайл — это неотъемлемая часть успешного восстановления данных с помощью ddrescue. Используйте его, если не знаете, что делаете.

При своей работе ddrescue не пишет нули в выходной файл, когда он находит бэды на входном файле, и не обрезает выходной файл, если это не задано в параметрах. Таким образом, каждый раз, когда ddrescue натравливается на тот же выходной файл, он пытается заполнить пробелы, не трогая уже спасенные данные. В общем-то все выглядит просто. Послушаемся совета использовать лог файл. Лог файл после определенной версии ddrescue стал называться mabfile.

Рекомендации  по восстановлению данных или Будьте бдительны и осторожны

Опять же, взято из мануала:

Формат  ddrescue

ddrescue запускается в следующем формате:

ddrescue [options] infile outfile [mapfile=logfile]

При этом, в большинстве случаев, достаточно всего нескольких опций:

-A или —try-again

Не углубляясь в нюансы работы ddrescue, можно пометить все ошибочные области, как области, которые еще не читались. Рекомендуется использовать опцию, если диск перестает отвечать.

-d или —idirect

При указании данной опции, ddrescue использует прямой доступ к диску, обходя кэши ядра.

-i bytes или —input-position=bytes

Ключ задает откуда (с какого bytes) начинать чтение с infile. По умолчанию установлен в ноль.

-m file или —domain-mapfile=file

Ограничить размер восстанавливаемого раздела последним блоком, обозначенным в логфайле. Используется для слияния образов восстановления. Например, если диск outfile сломался во время восстановления.

Читайте также:  Как установить права доступа 777 на файл или папку в Linux

-n или —no-scrape

Пропускает т.н. фазу scrape. Уменьшает время восстановления, т.к. снижает время на попытки чтения самых трудных частей файла.

-r n или —retry-passes=n

Задает количество повторных попыток чтения поврежденных областей. По умолчанию — 0. -1 подразумевает, что количество попыток бесконечное. Каждый битый сектор читается один раз, пи этом перечитывается 0 раз по умолчанию, или то количество раз, которое заданно в текущей опции.

-R или —reverse

Обратная последовательность выполнения каждой фазы восстановления. То есть ddrescue читает данные в обратной последовательности.

-f или —force

Заставить ddrescue перезаписать диск outfile. Необходим, когда в качестве outfile используется устройство. Используется для защиты от ошибочного повреждения данных.

-v или —verbose

Verbose mode, он же подробный режим. Можно указать несколько -v (до 4х), что увеличит детальность вывода.

Давайте теперь рассмотрим данные опции на примерах.

Команды для работы с CHKDSK в командной строке

Находясь в командной строке, можно провести быструю проверку жесткого диска (аналогичная проверка была описана в начале) без перезагрузки системы. Для этого достаточно ввести команду «CHKDSK» и подтвердить действие кнопкой Enter.

Для проверки диска и исправления логических ошибок на нем необходимо воспользоваться командой «chkdsk C: /F /R», где С – имя необходимого диска.

Для подтверждения проверки диска после перезагрузки необходимо нажать клавишу «Y».

Помимо полного анализа и по возможности исправления поврежденных секторов, утилита может выполнять проверку и решение ошибок только файловой системы. Для этого следует воспользоваться командой «chkdsk C: /F» и подтвердить действие «Y».

С полным списком и описанием возможностей утилиты можно ознакомится, введя команду «chkdsk /?».

Стоит отметить, что проблемы с диском могут быть вызваны не только программными ошибками, но и физическим износом, механическими повреждениями поверхности и другими факторами, которые невозможно исправить при помощи встроенной утилиты CHKDSK.

Чтобы получить полную картину о состоянии носителя, можно воспользоваться бесплатной программой для проверки дисков Victoria. Узнать о том, как пользоваться, исправлять и проводить диагностику HDD с помощью Victoria Вы сможете в статье: «Используем программу Victoria для тестирования и исправления жесткого диска»

Типы файлов Linux

Перечислим поддерживаемые типы файлов в ОС Linux

  • Файлы (тексты, исходники, картинки, скрипты)
  • Каталоги
  • Блочные устройства (жесткие диски, дискеты)
  • Символьные устройства (терминалы, принтеры)
  • символические ссылки
  • PIPE
  • Гнезда

Тип файла в каталоге можно посмотреть командой:

ls -l

Посмотреть список блочных устройств можно командой:

ls-l /dev/sd*

Буквой «b» помечаются блочные устройства.

Посмотреть список дисков можно командой

fdisk –l

Вывести информацию о жестком диске можно так

hdparm-I /dev/sdХ