Проверка и восстановление файловой системы в Linux
Общие сведения
Файловая система хранит файлы и метаданные
Данные не сразу записываются на жесткий диск и некоторое время могут находиться в оперативной памяти. Из за резкого выключения питания файловая система может быть повреждена
Нельзя проверить диск с помощью fsck если он смонтирован или например используется RAID массивом
Перед тем выполнением проверки необходимо размонтировать диск
Файловые системы делятся на два типа - журналируемые и нежурналируемые. Журналируемые файловые системы записывают в лог все свои действия, после выполнения действий стирают свои данные из журнала
Список утилит для работы с файловой системой
df, du, fsck, debugfs - утилиты для всех систем Linux
mke2fs, e2fsck, dumpe2fs, tune2fs – утилиты для файловой системы ext
xfs_check, xfs_repair, xfs_info, xfs_metadump – утилиты для файловой системы xfs
Восстановление файловой системы xfs в Linux Alpine
Файловая система не должна быть смонтирована перед выполнением xfs-repair
xfs-repair можно использовать для других системных разделов, которые не могут быть размонтированы во время работы системы
#Следует убедиться, что установлен пакет xfsprogs xfsprogs-extra
apk add xfsprogs xfsprogs-extra
#Размонтировать файловую систему
umount -l /mnt
#Намеренно повредить файловую систему
xfs_db -x -c blockget -c "blocktrash -s 512109 -n 1000" /dev/sdb1
#При попытке монтировать файловую систему вылезет ошибка
# mount /dev/sdb1 /mnt
mount: /mnt: mount(2) system call failed: No error information.
dmesg(1) may have more information after failed mount system call
#Попробуем запустить процесс восстановления с опцией n, что позволит выполнить пробный процесс
#xfs_repair -n соответствует команде xfs_check
xfs_repair -n /dev/sdb1
#Теперь попробуем запустить команду без опции n
xfs_repair /dev/sdb1
#Или выбрать более подробный, но долгий режим
xfs_repair -dv /dev/sda
#После чего можно попробовать смонтировать раздел еще раз
Режим восстановления
Режим восстановления или по другому аварийный режим ( Rescue Mode или Emergency Mode ) эквивалентен однопользовательскому режиму
В режиме восстановления все файловые системы примонтированы, но только некоторые важные службы будут работать
В отличие от режима восстановления, в аварийном режиме точки монтирования файловых систем не будут примонтированы, службы и сокеты не будут запущены.
Чтобы запустить тот или иной режим необходимо запустить меню grub и нажать клавишу "e"
Далее найти строку, которая начинается со слова linux, в троке заменить $vt_handoff на:
systemd.unit=rescue.target - режим восстановления
Или
systemd.unit=emergency.target - аварийный режим
Возможно конфигурация будет выглядеть иначе:
В строке которая начинается примерно с "linux...." будет два слова "quiet splash", которые нужно заменить на "verbose init=/bin/bash", после чего нажать F10 или ctrl+x
Именно в режиме восстановления можно восстановить корневую файловую систему
В режиме восстановления файловая система будет доступна только для чтения
Режим восстановления можно запустить через загрузчик grub. Чтобы вызвать меню grub при загрузке системы, удерживается клавиша shift
#Изменить права файловой системы
mount -o remount,rw /
Восстановление файловой системы ext4 в Linux Ubuntu
Для работы утилиты fsck необходимо убедиться, что раздел диска не смонтирован, в противном случае вернет ошибку
В конечном итоге утилита fsck вернет код
0 Нет ошибок
1 Исправлены ошибки файловой системы
2 Необходимо перезапустить систему
4 Есть ошибки, которые не получилось исправить
8 Операционная ошибка
16 Ошибка синтаксиса
32 Отмена по запросу пользователя
128 Ошибка общей библиотеки
Опции утилиты
V - подобный вывод, режим verbose
y - подтверждение всех действий без участия пользователя
AR - запуск утилиты для всех файловых системы, кроме корневой
C - прогресс проверки файловой системы
N - ничего не выполнять, показать только статус проверки
n - выполнить только проверку файловой системы, ничего не исправлять
r - спрашивать перед исправлением каждой ошибки, используется для файловых систем ext
y - подтверждает каждое действие автоматически, эквивалент опции a
c - найти и занести в черный список битые блоки на жестком диске ( только для ext3 и ext4 )
f - принудительная проверка файловой системы, даже если по журналу она чистая
b - задать адрес суперблока, если основной был поврежден
p - выполняет проверку и исправление подобно опции -a
R - исключить проверку корневой файловой системы
M - исключить проверку примонтированных файловых систем
#Запуск исправления ошибок
fsck -y /dev/sdb1
Проверка диска при перезагрузке системы
Чтобы проверить диск при перезапуске системы, необходимо создать файл forcefsck в корневом каталоге системы
#Создать файл
touch /forsefsck
Восстановление поврежденного суперблока
fsck не поможет восстановить файловую систему если суперблок поврежден, так как суперблок является началом файловой системы
Есть специальная команда которая поможет определить местонахождение суперблоков
#Определить местонахождение резервных суперблоков
# mkfs -t ext4 -n /dev/sdb1
mke2fs 1.42.13 (17-May-2015)
/dev/sdb1 contains a ext4 file system
last mounted on Tue Jan 9 23:47:20 2024
Proceed anyway? (y,n) y
Creating filesystem with 2096896 4k blocks and 524288 inodes
Filesystem UUID: 7b5d437c-21a5-456a-be22-617f239451b2
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Данная команда создает новую файловую систему с типом (-t) который ранее использовался, но с опцией -n выводится только информация в которой указано распложение резервных суперблоков, никаких изменений на диск не вноситься
С помощью каждого из резервных суперблоков можно попытаться восстановить данные
fsck -b -y 32768 /dev/sdb1
Другие полезные команды
#Узнать тип файловой системы
file -s /dev/sdb1
#Найти битые сектора и больше ничего в них не писать
fsck -c /dev/sdb1
#Проверить все файловые системы типа ext4
fsck -A -t ext4 -y
#Проверить файловые системы примонтированные только для чтения
fsck -A -t opts=ro
Проверка примонтированной файловой системы
#Если файловая системы примонтирована, не получится использовать fsck, однако данное ограничение можно обойти
mount -o remount,ro /dev/sdb1
#После этого добавить опции f для проверки в принудительном режиме
fsck -fy /dev/sdb1
Источники
Здесь пока нет комментариев