Проверка диска в Linux: fsck, e2fsck и badblocks без потери данных
fsck проверяет и чинит файловую систему, но только на размонтированном разделе: sudo umount /dev/sdb1, затем sudo e2fsck -f /dev/sdb1 для ext4. Перед этим посмотрите SMART через smartctl, потому что физически умирающий диск надо сначала скопировать, а уже потом лечить. Корень проверяется при загрузке параметром fsck.mode=force или с Live USB.

Содержание
Сначала диск, потом файловая система
Ошибки бывают двух видов. Логические: после отключения питания или зависания в структуре файловой системы остались незавершенные записи. Их лечит fsck. Физические: диск не может прочитать сектор или SSD исчерпал ресурс. Тут fsck бессилен и даже вреден, потому что гоняет умирающий диск лишними операциями.
Поэтому правильный порядок такой:
- Посмотреть SMART и понять, жив ли накопитель.
- Если есть признаки деградации, сначала скопировать данные или снять образ, и только потом что-то чинить.
- Размонтировать раздел или загрузиться с Live USB.
- Запустить проверку в режиме "только посмотреть", затем исправление.
Узнать, какой раздел на каком диске и какая на нем файловая система, проще всего через lsblk -f. Подробно про имена устройств и вывод lsblk написано в статье как посмотреть диски в Linux.
Проверка здоровья диска через SMART
Утилита smartctl из пакета smartmontools читает самодиагностику накопителя. Пакет называется одинаково в apt, dnf и pacman.
sudo apt install smartmontools # Debian, Ubuntu
sudo dnf install smartmontools # Fedora
sudo pacman -S smartmontools # Arch
# общий вердикт
sudo smartctl -H /dev/sda
# все атрибуты SATA-диска
sudo smartctl -a /dev/sda
# NVMe SSD
sudo smartctl -a /dev/nvme0
# запустить длинный самотест, результат смотреть через smartctl -a позже
sudo smartctl -t long /dev/sda
Строка PASSED еще не гарантия. Для HDD смотрите на Reallocated_Sector_Ct, Current_Pending_Sector и Offline_Uncorrectable: если хоть один растет, диск пора менять. Для NVMe важны Percentage Used, Available Spare и Media and Data Integrity Errors. Длинный самотест на HDD на 2 ТБ идет несколько часов, на это время диск лучше не нагружать.
Как устроен fsck и почему нельзя проверять смонтированный раздел
Сам fsck лишь обертка. Он определяет тип файловой системы и вызывает нужную программу: fsck.ext4 (это тот же e2fsck), fsck.vfat, fsck.exfat, fsck.xfs. Посмотреть, что именно будет запущено, без реального запуска:
sudo fsck -N /dev/sdb1
Проверять раздел, который смонтирован на запись, нельзя. Ядро в этот момент пишет в те же структуры, и исправления fsck могут разрушить данные. e2fsck предупредит об этом и попросит подтверждение, отвечайте "n". Для обычного раздела данных достаточно его размонтировать:
findmnt /dev/sdb1 # смонтирован ли и куда
sudo umount /dev/sdb1
sudo fsck -f /dev/sdb1
Если umount ругается "target is busy", раздел держит какая-то программа или открытый терминал. Найти ее помогает sudo lsof +f -- /mnt/data или sudo fuser -vm /mnt/data.
После завершения fsck возвращает код. 0 - ошибок нет, 1 - ошибки найдены и исправлены, 2 - исправлены, но нужна перезагрузка, 4 - ошибки остались, 8 - сбой самой проверки. Код последней команды показывает echo $?.
e2fsck: проверка и восстановление ext4
ext4 стоит по умолчанию в Ubuntu, Linux Mint и Debian, поэтому e2fsck - самая востребованная команда этой статьи. Основные ключи:
| Ключ | Что делает | Когда использовать |
|---|---|---|
-n | Только проверка, на все вопросы ответ "нет", раздел открывается на чтение | Первый безопасный прогон, оценить масштаб |
-f | Проверять, даже если файловая система помечена чистой | Почти всегда при ручной проверке |
-p | Автоматически исправлять только безопасные ошибки | Скрипты и загрузка системы |
-y | Отвечать "да" на все вопросы | Когда ошибок сотни и данные уже скопированы |
-c | Найти плохие блоки через badblocks (чтение) и пометить их | Старые HDD с подозрением на сбойные секторы |
-cc | То же, но неразрушающий тест чтения и записи | Более тщательная, очень долгая проверка |
-b 32768 | Взять резервную копию суперблока | Ошибка "bad magic number in super-block" |
-C 0 | Показывать прогресс | Большие разделы |
-v | Подробный отчет | Понять, что именно исправлено |
Типичный сценарий для раздела данных:
sudo umount /dev/sdb1
sudo e2fsck -fn /dev/sdb1 # посмотреть, что не так
sudo e2fsck -f -C 0 /dev/sdb1 # исправлять с вопросами
sudo e2fsck -fy /dev/sdb1 # или исправлять все подряд
Восстановленные куски файлов без имени e2fsck кладет в каталог lost+found в корне раздела. Имена там вида #123456, тип можно определить командой file.
Поврежден суперблок
Если e2fsck пишет про bad magic number или не может прочитать суперблок, используйте резервную копию. Где они лежат, покажет dumpe2fs, если основной суперблок еще читается, или пробный прогон mke2fs с ключом -n, который ничего не записывает:
sudo dumpe2fs /dev/sdb1 | grep -i superblock
sudo mke2fs -n /dev/sdb1
sudo e2fsck -f -b 32768 /dev/sdb1
Ключ -n у mke2fs здесь критичен: без него команда создаст новую файловую систему поверх старой. Параметры ext4, интервал автоматических проверок и счетчик монтирований меняются через tune2fs, об этом отдельная статья про tune2fs.
Проверка корневого раздела: при загрузке или с Live USB
Корень размонтировать на живой системе нельзя. Есть два пути.
Принудительная проверка при загрузке
В системах с systemd проверку на старте выполняет systemd-fsck. Старый способ с файлом /forcefsck больше не работает. Вместо него в меню GRUB нажмите e, в конце строки, которая начинается с linux, допишите параметры и загрузитесь через Ctrl+X:
fsck.mode=force fsck.repair=yes
Параметр действует одну загрузку, все значения описаны в документации systemd-fsck. Результат смотрите в журнале:
journalctl -b -u systemd-fsck-root.service
journalctl -b | grep -i fsck
Если после сбоя Ubuntu сама останавливается в оболочке (initramfs) с сообщением о необходимости ручного fsck, выполните проверку прямо там, указав раздел из сообщения, затем наберите exit:
fsck -y /dev/nvme0n1p2
exit
Live USB
Самый надежный вариант: загрузиться с флешки с любым дистрибутивом, найти раздел через lsblk -f и проверить его, ничего не монтируя. Как подготовить такую флешку, описано в статье про загрузочную флешку. Из Live-системы же удобно скопировать данные, если диск вызывает сомнения.
badblocks: поиск сбойных секторов
badblocks перебирает блоки диска и записывает в файл те, что не читаются. Режимов три, и путать их опасно:
# только чтение, безопасно для данных
sudo badblocks -sv /dev/sdb
# неразрушающее чтение и запись, раздел должен быть размонтирован
sudo badblocks -nsv /dev/sdb1
# разрушающий тест записью шаблонов, СТИРАЕТ ВСЕ ДАННЫЕ
sudo badblocks -wsv /dev/sdb
Ключ -s показывает прогресс, -v выводит подробности, -o файл сохраняет список блоков. Если вы собираетесь передать список в e2fsck, размер блока должен совпадать с размером блока файловой системы, обычно 4096 байт. Проще не возиться с этим и доверить работу самому e2fsck:
sudo e2fsck -fc /dev/sdb1
Ожидайте долгой работы: проход только на чтение по HDD на 1 ТБ занимает несколько часов, а режим -w делает четыре прохода записью и четыре чтением.
На SSD и NVMe badblocks почти бесполезен. Контроллер сам переназначает плохие ячейки, и программа их просто не увидит, зато лишняя запись в режиме -w расходует ресурс. Для твердотельных накопителей ориентируйтесь на SMART и самотест smartctl -t long. Для HDD разумный порядок тот же: сначала SMART, badblocks только если нужно найти конкретные адреса.
Другие файловые системы: XFS, Btrfs, FAT, exFAT и NTFS
Для XFS (по умолчанию в RHEL и производных) fsck ничего не делает, проверка выполняется xfs_repair на размонтированном разделе:
sudo xfs_repair -n /dev/sdb1 # только проверка
sudo xfs_repair /dev/sdb1 # исправление
Если xfs_repair просит сначала смонтировать раздел, чтобы проиграть журнал, так и сделайте. Ключ -L обнуляет журнал и теряет последние изменения, это последнее средство.
Btrfs, стандартная файловая система Fedora 44 и openSUSE, проверяется на ходу через scrub: он читает все данные и сверяет контрольные суммы.
sudo btrfs scrub start /
sudo btrfs scrub status /
sudo btrfs device stats /
# офлайн-проверка размонтированного раздела, ничего не меняет
sudo btrfs check --readonly /dev/sdb1
btrfs check --repair разработчики советуют запускать только по рекомендации на рассылке или в багтрекере: он способен ухудшить ситуацию. Восстановление после неудачных изменений на Btrfs проще делать откатом снимков, см. статью про Snapper.
Флешки и карты памяти: sudo fsck.vfat -a /dev/sdc1 для FAT32 и sudo fsck.exfat /dev/sdc1 для exFAT (пакеты dosfstools и exfatprogs). Для NTFS в Linux есть только ntfsfix из ntfs-3g: он сбрасывает флаг "грязного" тома и исправляет простые ошибки. Полноценная проверка NTFS делается командой chkdsk /f в Windows.
Если диск сыпется: сначала образ, потом ремонт
Растут переназначенные секторы, в журнале ядра строки "I/O error" и "UNC", файлы читаются через раз. Не запускайте на таком диске fsck и badblocks: каждый лишний проход может стать последним. Снимите образ через GNU ddrescue, он сначала читает хорошие области, а сбойные оставляет на потом.
sudo apt install gddrescue # в Fedora и Arch пакет ddrescue
# первый быстрый проход, образ и карту кладем на ДРУГОЙ диск
sudo ddrescue -d -n /dev/sdb /mnt/backup/disk.img /mnt/backup/disk.map
# повторные попытки по сбойным местам
sudo ddrescue -d -r3 /dev/sdb /mnt/backup/disk.img /mnt/backup/disk.map
Дальше работайте с копией: подключите образ через sudo losetup -fP --show disk.img, получите устройство вида /dev/loop0p1 и уже на нем запускайте e2fsck. Оригинал при этом не страдает.
Лучшая страховка от таких историй - регулярная резервная копия. Выбор инструмента и схема 3-2-1 описаны в статье про Borg и Restic.
Частые вопросы
Как проверить диск на ошибки в Ubuntu?
Для раздела данных: размонтируйте его и выполните sudo e2fsck -f /dev/sdXN. Для корневого раздела добавьте в строку загрузки GRUB параметры fsck.mode=force fsck.repair=yes или загрузитесь с Live USB. Состояние самого диска покажет sudo smartctl -a.
Можно ли запустить fsck на смонтированном разделе?
На смонтированном на запись нельзя: исправления могут разрушить данные. Допустим только просмотр с ключом -n, но и его результат неточен, потому что система продолжает писать на диск.
Что делать с файлами в lost+found?
Это фрагменты, которые e2fsck нашел без имени. Определите тип командой file, переименуйте нужные и перенесите. Если каталог пустой, все в порядке, удалять его не надо.
Нужен ли badblocks для SSD?
Нет. Контроллер SSD сам скрывает плохие ячейки, а запись в режиме -w тратит ресурс. Для SSD и NVMe смотрите SMART: Percentage Used, Available Spare и ошибки целостности.
Почему не работает sudo touch /forcefsck?
Этот способ был у старых init-скриптов. В systemd проверку при загрузке включают параметрами ядра fsck.mode=force и fsck.repair=yes либо счетчиком монтирований через tune2fs -c.
Документация и источники
- e2fsck(8) - Linux manual page, e2fsprogs, man7.org, 2026
- systemd-fsck@.service, freedesktop.org, 2026
- badblocks, ArchWiki, 2026
Читайте также
- Посмотреть диски и разделы в Linux: lsblk, fdisk -l и проверка SMART
- Tune2fs: как посмотреть и изменить параметры файловой системы ext4
- Монтирование дисков в Linux: от mount до автомонтирования в fstab
- Снимки Btrfs со Snapper: настройка и восстановление системы
- Rescuezilla: резервная копия и восстановление Linux с флешки
Команды проверены на актуальных версиях дистрибутивов на момент обновления. Перед изменением системных настроек сделайте резервную копию.