Введение / Зачем это нужно
Файловая система — это основа хранения данных на диске. Со временем из-за сбоев питания, аппаратных ошибок или программных багов в ней могут накапливаться inconsistencies: потерянные блоки, некорректные ссылки, поврежденные inode. Утилита fsck (file system check) — стандартный инструмент Linux для проверки и исправления таких проблем. Регулярная проверка помогает предотвратить потерю данных и обеспечивает стабильность системы. Этот гайд подробно объяснит, как безопасно использовать fsck на различных типах файловых систем.
Требования / Подготовка
Перед началом убедитесь, что:
- У вас есть права root (или используйте
sudo). - Файловая система размонтирована. Запуск
fsckна смонтированном разделе (особенно в режиме чтения-записи) опасен и может усугубить повреждения. Для корневого раздела (/) потребуется загрузка с Live USB/CD. - Установлены соответствующие утилиты. Обычно
fsckвходит в пакетutil-linux, но для специфичных файловых систем могут потребоваться дополнительные пакеты:- ext2/3/4:
e2fsprogs(часто установлен по умолчанию) - XFS:
xfsprogs - Btrfs:
btrfs-progs - NTFS:
ntfs-3g
- ext2/3/4:
- Сделана резервная копия важных данных, если это возможно. Хотя
fsckобычно безопасен, при серьёзных повреждениях есть риск потери файлов.
Шаг 1: Определите файловую систему и устройство
Сначала узнайте, какой тип файловой системы используется на целевом разделе и какое устройство ему соответствует.
lsblk -f
Пример вывода:
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 vfat BOOT ABCD-1234 /boot/efi
├─sda2 ext4 ROOT a1b2c3d4-e5f6-7890-abcd-ef1234567890 /
├─sda3 swap abcdef12-3456-7890-abcd-ef1234567890 [SWAP]
└─sda4 xfs HOME 9876fedc-ba54-3210-fedc-ba9876543210 /home
Или используйте blkid:
blkid /dev/sda2
Вывод: /dev/sda2: UUID="a1b2c3d4-e5f6-7890-abcd-ef1234567890" TYPE="ext4"
Запишите устройство (например, /dev/sda2) и тип файловой системы (ext4, xfs и т.д.).
Шаг 2: Размонтируйте раздел
Проверьте, смонтирован ли раздел:
mount | grep /dev/sda2
Если раздел смонтирован (например, в /home), размонтируйте его:
umount /dev/sda2
Если раздел используется (например, текущий рабочий каталог), закройте все приложения, которые его используют, или перейдите в другой каталог. Для корневого раздела (/) простой umount не сработает — необходимо загрузиться с Live-носителя (например, Ubuntu Live USB) и запустить проверку оттуда.
Шаг 3: Запустите fsck для вашего типа файловой системы
fsck — это frontend, который вызывает конкретные утилиты в зависимости от типа файловой системы. Рекомендуется вызывать их напрямую для большей надёжности.
Для ext2/ext3/ext4:
fsck.ext4 -f /dev/sdX1
Опция -f принудительно запускает проверку даже если файловая система выглядит чистой.
Для XFS:
XFS требует, чтобы файловая система была размонтирована. Используйте xfs_repair (это аналог fsck для XFS):
xfs_repair /dev/sdX1
⚠️ Важно:
xfs_repairне имеет опции «только проверка». Он сразу исправляет найденные ошибки. Убедитесь в резервной копии.
Для Btrfs:
Btrfs поддерживает проверку онлайн (на смонтированной ФС) через btrfs check, но для серьёзных повреждений лучше размонтировать:
btrfs check /dev/sdX1
Используйте опцию --repair для исправления, но будьте осторожны — она потенциально опасна.
Для NTFS (через ntfs-3g):
ntfsfix /dev/sdX1
ntfsfix — это упрощённый аналог fsck для NTFS. Он исправляет основные ошибки и очищает журнал транзакций. Для сложных случаев используйте Windows-утилиту chkdsk.
Шаг 4: Примите решение об исправлении ошибок
После сканирования fsck (или соответствующей утилиты) выведет список найденных проблем и спросит, исправлять ли их.
Пример для ext4:
/dev/sda2: 1234/4567890 files (0.0% non-contiguous), 5678/9112345 blocks
Если есть ошибки, вы увидите вопросы вроде:
/dev/sda2: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.
(i.e., without -a or -p options)
Варианты действий:
- Автоматическое исправление: запустите с опцией
-y(или-pдля автоматического исправления только безопасных ошибок), чтобы ответить «да» на все вопросы:fsck.ext4 -y /dev/sdX1
Используйте осторожно: если есть серьёзные повреждения, лучше анализировать каждую ошибку. - Ручное подтверждение: запустите без
-yи внимательно читайте каждый вопрос. Типичные действия:- Fix? — исправить ошибку.
- Clear? — очистить блок.
- Abort? — прервать проверку (не рекомендуется, если уже началось исправление).
Если не уверены, можно выбрать «no» для спорных случаев и изучить логи после. - Только проверка: для тестирования без изменений используйте
-n(no modify).
Шаг 5: Проверьте результат и смонтируйте раздел
После завершения fsck вернёт код завершения:
0— ошибок не найдено.1— ошибки исправлены.4— ошибки остались (неисправимые) или файловая система было изменена и требует перезагрузки (для корневого раздела).8— операционная ошибка (например, раздел смонтирован).
Просмотрите вывод на наличие предупреждений о неисправленных ошибках.
Затем смонтируйте раздел:
mount /dev/sdX1 /mnt
Если монтирование прошло успешно (без ошибок в консоли), проверьте, доступны ли файлы:
ls /mnt
Шаг 6: Проверьте системные логи на наличие ошибок
Даже после успешного исправления полезно убедиться, что система не сообщает о новых проблемах.
dmesg | tail -20
Или посмотрите журнал systemd:
journalctl -xe | grep -i "error\|fail" | tail -20
Если в логах есть упоминания о проблемах с диском (например, I/O error, medium error), это может указывать на аппаратные неполадки. В таком случае выполните проверку SMART (см. связанный гайд по smartctl).
Проверка результата
Главный признак успеха — возможность смонтировать файловую систему и читать/писать файлы без ошибок. Дополнительно:
- Убедитесь, что
fsckвернул код 0 или 1. - Проверьте, что нет ошибок в
dmesgпосле монтирования. - Для ext-файловых систем можно выполнить дополнительную проверку:
e2fsck -n /dev/sdX1 # только проверка, без изменений
Она должна сообщить «Filesystem is clean».
Возможные проблемы
1. «Filesystem is mounted» — раздел смонтирован
Fsck откажется работать на смонтированной файловой системе. Решение:
- Размонтируйте раздел (см. Шаг 2).
- Для корневого раздела загрузитесь с Live-носителя.
- В крайнем случае для ext4 можно использовать опцию
-fдаже на смонтированной, но это опасно и может привести к потере данных. Не делайте этого без резервной копии.
2. «Bad magic number» или «Invalid argument» — повреждён суперблок
Суперблок — это метаданные файловой системы. Если он повреждён, fsck не может распознать ФС. Для ext2/3/4 можно попробовать использовать резервную копию суперблока:
fsck.ext4 -b 32768 /dev/sdX1
Номер резервного блока зависит от размера блока файловой системы. Обычные значения:
- 8192 (для блоков 1K)
- 32768 (для блоков 2K)
- 32768 (для блоков 4K)
Узнать расположение резервных суперблоков можно командой:
dumpe2fs -h /dev/sdX1 | grep -i "backup"
3. Fsck зависает или работает очень долго
Это может указывать на:
- Физические повреждения диска (битые сектора). Проверьте SMART:
smartctl -a /dev/sdX
Ищите ошибкиReallocated_Sector_Ct,Current_Pending_Sector,UDMA_CRC_Error_Count. - Очень большое количество ошибок — fsck может долго исправлять. Дайте ему время.
- Раздел огромного размера (несколько ТБ) — нормально, что проверка занимает часы.
Если диск failing, срочно скопируйте данные (например, с помощью ddrescue) и замените диск.
4. После исправления система не загружается
Если fsck исправлял корневой раздел, но система не загружается:
- Проверьте, не повреждён ли загрузчик (GRUB). Переустановите его с Live-носителя.
- Посмотрите логи загрузки через
journalctl -b -1(предыдущая загрузка). - Убедитесь, что в
/etc/fstabуказаны правильные UUID для разделов (после исправления UUID мог измениться? Обычно нет, но бывает при создании новых inode).
5. Ошибка «No such file or directory» при вызове fsck для конкретного типа
Убедитесь, что пакет с поддержкой этой файловой системы установлен. Например, для XFS:
sudo apt install xfsprogs # Debian/Ubuntu
sudo yum install xfsprogs # RHEL/CentOS
6. Потеря данных после fsck
Fsck старается сохранять данные, но при серьёзных повреждениях некоторые файлы могут быть потеряны. Восстановить их можно:
- Для ext4: инструменты вроде
extundeleteилиtestdisk(работают на размонтированном разделе). - Для XFS:
xfs_repairможет перемещать повреждённые inode в каталогlost+found. Проверьте его после монтирования. - Для NTFS:
ntfs undelete(из пакета ntfs-3g) или Windows-утилиты.
Профилактика: всегда делайте регулярные бэкапы и используйте журналируемые файловые системы (ext4, XFS, btrfs), которые лучше переносят сбои.