В Linux можно задавать необходимость fsck при загрузке — файловая система при этом будет проверяться каждый раз и исправлять ошибки если они имеются.
Консистентность файловой системы Linux сервера может быть нарушена по причине принудительной перезагрузки, потери питания, проблем с дисками.
Исправляется ситуация в большинстве случаев загрузкой системы с внешнего носителя и исправлением ошибок при помощи fsck -y /dev/vda. Для облачных серверов это делается через режим восстановления.
Полезным может быть настройка fsck при загрузке — файловая система при этом будет проверяться каждый раз и исправлять ошибки если таковые имеются. Необходимость загрузки с USB или из rescue mode в этом случае отпадет.
В Debian необходимая опция находится в фале /etc/default/rcS
mcedit /etc/default/rcS
Приведенную ниже строку нужно найти и раскомментировать установив значение в YES
# automatically repair filesystems with inconsistencies during boot
FSCKFIX=yes
Этого достаточно, при следующей загрузке системы будет производиться проверка на наличие ошибок в файловой системе, которые будут исправляться.
Можно указать необходимость разовой проверки при следующей загрузке системы создав в корне пустой файл с именем forcefsck — это делается командой touch /forcefsck
Регулярная проверка файловой системы
Информацию по разделу (в примере корневому) можно получить используя утилиту tune2fs
tune2fs -l /dev/vda
tune2fs 1.42.5 (29-Jul-2012)
Filesystem volume name: rootfs
Last mounted on: /
Filesystem UUID: d1e9652f-b797-4f8c-90ed-62a632e11ac6
…
Filesystem state: clean
…
Mount count: 3
Maximum mount count: -1
Last checked: Fri Jan 12 06:20:42 2018
Check interval: 0 (<none>)
В случае если на диске созданы разделы нужно передавать tune2fs имя раздела.
Пример приведен на скриншоте:
Интерес в выводе tune2fs представляют три параметра:
- Filesystem state — показывает есть ли в настоящее время ошибки. clean означает, что ошибок нет.
- Maximum mount counts — максимальное количество монтирований раздела (включений/выключений машины в общем случае) между проверками
- Check interval — какой промежуток времени задан между автоматическими проверками. 0 означает, что регулярных проверок не производится
Первый параметр из приведенных исключительно информационный, второй и третий можно изменить задав тем самым необходимость проверки
Установим максимальное количество монтирований в 20
tune2fs -c 20 /dev/vda
tune2fs 1.42.5 (29-Jul-2012)
Setting maximal mount count to 20
Файловая система будет проверяться раз в месяц если tunefs использовать с ключом -i задав значение 1m
tune2fs -i 1m /dev/vda
tune2fs 1.42.5 (29-Jul-2012)
Setting interval between checks to 2592000 seconds
tune2fs -l /dev/vda
Maximum mount count: 20
Last checked: Fri Jan 12 06:20:42 2018
Check interval: 2592000 (1 month)
fsck для раздела /dev/vda при таких настройках будет выполняться каждый раз при загрузке системы, а также согласно заданным интервалам.
Читайте про выполнение fsck вручную с отмонтированием раздела.