🐧 Как принудительно выполнить fsck при перезагрузке системы

Мануал

Команда Fsck используется для проверки согласованности файловой системы в Linux и Unix-подобных операционных системах.

В системе fsck выполняется либо автоматически, либо вручную. Во время выполнения fsck файловая система не должна быть смонтирована.

Мы можем заставить fsck запускаться при перезагрузке как для корневых, так и для некорневых файловых систем.

В этом руководстве мы узнаем, как принудительно запустить fsck при перезагрузке для проверки ошибок файловой системы.

Принудительное выполнение fsck при загрузке системы с помощью systemd

Многие современные дистрибутивы Linux перешли на систему systemd. Традиционный способ использования tune2fs работает только в системах sysvinit или upstart.

Для дистрибутивов Linux на базе systemd добавьте fsck.mode=force в конфигурационный файл grub в качестве параметра ядра. Важно отметить, что systemd-fsck ничего не знает о файловой системе, поэтому он просто запускает программы проверки файловой системы, специфичные для каждого типа файловой системы (/sbin/fsck.*). Например, если у вас файловая система ext4, systemd-fsck запустит /sbin/fsck.ext4.

Вам нужно добавить fsck.mode=force к GRUB_CMDLINE_LINUX_DEFAULT, в конце с кавычках (“”).

Например:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash fsck.mode=force"

Вы можете редактировать конфигурацию grub с помощью команды nano.

$ sudo nano /etc/default/grub

Пример вывода:

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
 # For full documentation of the options in this file, see:
# info -f grub -n 'Simple configuration'
 GRUB_DEFAULT=0
 GRUB_TIMEOUT=5
 GRUB_DISTRIBUTOR=lsb_release -i -s 2> /dev/null || echo Debian
 GRUB_CMDLINE_LINUX_DEFAULT="quiet"
 GRUB_CMDLINE_LINUX=""
 # Uncomment to enable BadRAM filtering, modify to suit your needs
 # This works with Linux (no patch required) and with any kernel that obtains
 # the memory map information from GRUB (GNU Mach, kernel of FreeBSD …)
 # GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"
 # Uncomment to disable graphical terminal (grub-pc only)
 # GRUB_TERMINAL=console
 # The resolution used on graphical terminal
 # note that you can use only modes which your graphic card supports via VBE
 # you can see them in real GRUB with the command `vbeinfo'
# GRUB_GFXMODE=640x480
 # Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
 # GRUB_DISABLE_LINUX_UUID=true
 # Uncomment to disable generation of recovery mode menu entries
 # GRUB_DISABLE_RECOVERY="true"
 # Uncomment to get a beep at grub start
 # GRUB_INIT_TUNE="480 440 1"

Если вы хотите автоматически устранять проблемы, которые легко исправить, вы можете добавить опцию fsck.repair=yes в конфигурационный файл grub.

Параметр yes в fsck.repair означает, что система принимает ответ “да” на все вопросы fsck; используйте no, если хотите, чтобы система принимала ответ “нет”.

Вам нужно отредактировать конфигурационный файл grub, как и раньше, и добавить fsck.repair=yes или fsck.repair=no в GRUB_CMDLINE_LINUX_DEFAULT.

Для примера fsck.repair=yes

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash fsck.mode=force fsck.repair=yes"

Для fпримера sck.repair=no

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash fsck.mode=force fsck.repair=no"

Убедитесь, что вы не вносите никаких дополнительных изменений и что внесенные вами изменения верны, иначе система не загрузится.

После внесения изменений вы можете сохранить файл nano и выйти.

После завершения редактирования и сохранения файла выполните следующую команду, чтобы обновить конфигурацию Grub2 для дистрибутива Linux.

$ sudo update-grub

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

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

Чтобы systemd выполняла однократную принудительную проверку fsck во время загрузки:

  • Загрузитесь в меню Grub
  • Когда запись выделена, нажмите ‘e’ для редактирования команд.
  • Нажмите кнопку “End”, чтобы переместить курсор на последнюю строку.
  • Добавьте пробел, а затем добавьте параметр ядра fsck.mode=force
  • Нажмите Ctrl + x для закрытия и загрузки системы

Принудительная проверка fsck при загрузке в системе sysvinit или Upstart

Существует два способа выполнения принудительной проверки fsck в старых дистрибутивах Linux: с помощью tune2fs и forcefsck.

Если файловая система определена как поврежденная или после определенного количества загрузок или времени, fsck выполняется во время загрузки.

Только файловые системы EXT4, EXT3 и EXT2 можно заставить выполнять fsck при каждой перезагрузке.

Команда tune2fs позволяет регулировать различные настраиваемые параметры файловой системы в Linux. Мы будем использовать эту команду для нашей цели.

Следующая команда tune2fs указывает файловую систему (/dev/sda1) на выполнение fsck при каждой перезагрузке системы:

$ sudo tune2fs -c 1 /dev/sda1

Также убедитесь, что в файле /etc/fstab параметр pass в последнем, 6-м столбце ([PASS]) больше нуля.

  • 0 – Не проверять.
  • 1 – Файловые системы, которые будут проверяться в первую очередь. Обычно корневой раздел имеет это значение
  • 2 – Файловые системы, которые проверяются последними и, возможно, параллельно.

Если вы хотите заставить fsck выполнять проверку файловой системы после 10 загрузок, установите значение параметра -c равным 10.

$ sudo tune2fs -c 10 /dev/sda1

Чтобы остановить запуск fsck при каждой загрузке, вы можете заменить значение параметра -c на -1 и выполнить команду.

$ sudo tune2fs -c -1 /dev/sda1

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

$ sudo tune2fs -l /dev/sda1 | grep -i 'last checked\|mount count\|check interval'

Вывод:

 $ sudo tune2fs -l /dev/sda1 | grep -i 'last checked|mount count|check interval'
 Mount count:              31
 Maximum mount count:      -1
 Last checked:             Fri May  8 08:08:15 2020
 Check interval:           0 ()

Maximum mount count- это максимальное количество монтирований перед просмотром файловой системы.

Если максимальное значение равно 0 или -1, fsck никогда не запустится. Интервал проверки” – это количество времени, которое проходит между двумя проверками файловой системы.

Можно запускать fsck после определенного количества монтирований, например, если вы хотите запускать fsck после каждых 10 монтирований, вы можете использовать следующую команду.

$ sudo tune2fs -c 10 /dev/sda1

Вывод:

$ sudo tune2fs -c 10 /dev/sda1
 tune2fs 1.45.6 (20-Mar-2020)
 Setting maximal mount count to 10
$ sudo tune2fs -l /dev/sda1 | grep -i 'last checked|mount count|check interval'
 Mount count:              31
 Maximum mount count:      10
 Last checked:             Fri May  8 08:08:15 2020
 Check interval:           0 ()

Использование forcefsck

В старых дистрибутивах Linux простое создание файла с именем forcefsck в разделе корневого каталога (/) приведет к выполнению принудительной проверки fsck на корневом разделе.

$ sudo touch /forcefsck

Проверьте, создан ли файл.

$ sudo ls /forcefsck

Вывод:

$ sudo touch /forcefsck
$ sudo ls /forcefsck
/forcefsck
$ 

Теперь вы можете выполнить перезагрузку и система выполнит fsck в корневой файловой системе.

Обычно файл /forcefsck удаляется автоматически после выполнения fsck, если он не удален, вы можете удалить его вручную.

Заключение

В этом руководстве мы узнали, как принудительно выполнить fsck на корневой и некорневой файловой системе в Linux.

Добавить комментарий