Debian проверка файловой системы на ошибки

Из-за различных неполадок или неожиданного отключения компьютера файловая система может быть повреждена. При обычном выключении все файловые системы монтируются только для чтения, а все не сохраненные данные записываются на диск.

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

Немного теории

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

Современные файловые системы делятся на два типа — журналируемые и нежурналируемые. Журналиуемые файловые системы записывают в лог все действия, которые собираются выполнить, а после выполнения стирают эти записи. Это позволяет очень быстро понять была ли файловая система повреждена. Но не сильно помогает при восстановлении. Чтобы восстановить файловую систему linux необходимо проверить каждый блок файловой системы и найти поврежденные сектора.

Для этих целей используется утилита fsck. По сути, это оболочка для других утилит, ориентированных на работу только с той или иной файловой системой, например, для fat одна утилита, а для ext4 совсем другая.

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

В этой статье мы рассмотрим ручную работу с fsck. Возможно, вам понадобиться LiveCD носитель, чтобы запустить из него утилиту, если корневой раздел поврежден. Если же нет, то система сможет загрузиться в режим восстановления и вы будете использовать утилиту оттуда. Также вы можете запустить fsck в уже загруженной системе. Только для работы нужны права суперпользователя, поэтому выполняйте ее через sudo.

А теперь давайте рассмотрим сам синтаксис утилиты:

$ fsck [опции] [опции_файловой_системы] [раздел_диска]

Основные опции указывают способ поведения утилиты, оболочки fsck. Раздел диска — это файл устройства раздела в каталоге /dev, например, /dev/sda1 или /dev/sda2. Опции файловой системы специфичны для каждой отдельной утилиты проверки.

А теперь давайте рассмотрим самые полезные опции fsck:

  • -l — не выполнять другой экземпляр fsck для этого жесткого диска, пока текущий не завершит работу. Для SSD параметр игнорируется;
  • -t — задать типы файловых систем, которые нужно проверить. Необязательно указывать устройство, можно проверить несколько разделов одной командой, просто указав нужный тип файловой системы. Это может быть сама файловая система, например, ext4 или ее опции в формате opts=ro. Утилита просматривает все файловые системы, подключенные в fstab. Если задать еще и раздел то к нему будет применена проверка именно указанного типа, без автоопределения;
  • -A — проверить все файловые системы из /etc/fstab. Вот тут применяются параметры проверки файловых систем, указанные в /etc/fstab, в том числе и приоритетность. В первую очередь проверяется корень. Обычно используется при старте системы;
  • -C — показать прогресс проверки файловой системы;
  • -M — не проверять, если файловая система смонтирована;
  • -N — ничего не выполнять, показать, что проверка завершена успешно;
  • -R — не проверять корневую файловую систему;
  • -T — не показывать информацию об утилите;
  • -V — максимально подробный вывод.

Это были глобальные опции утилиты. А теперь рассмотрим опции для работы с файловой системой, их меньше, но они будут более интересны:

  • -a — во время проверки исправить все обнаруженные ошибки, без каких-либо вопросов. Опция устаревшая и ее использовать не рекомендуется;
  • -n — выполнить только проверку файловой системы, ничего не исправлять;
  • -r — спрашивать перед исправлением каждой ошибки, используется по умолчанию для файловых систем ext;
  • -y — отвечает на все вопросы об исправлении ошибок утвердительно, можно сказать, что это эквивалент a.
  • -c — найти и занести в черный список все битые блоки на жестком диске. Доступно только для ext3 и ext4;
  • -f — принудительная проверка файловой системы, даже если по журналу она чистая;
  • -b — задать адрес суперблока, если основной был поврежден;
  • -p — еще один современный аналог опции -a, выполняет проверку и исправление автоматически. По сути, для этой цели можно использовать одну из трех опций: p, a, y.

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

Как восстановить файловую систему в fsck

Допустим, вы уже загрузились в LiveCD систему или режим восстановления. Ну, одним словом, готовы к восстановлению ext4 или любой другой поврежденной ФС. Утилита уже установлена по умолчанию во всех дистрибутивах, так что устанавливать ничего не нужно.

Восстановление файловой системы

Если ваша файловая система находится на разделе с адресом /dev/sda1 выполните:

sudo fsck -y /dev/sda1

fsck3

Опцию y указывать необязательно, но если этого не сделать утилита просто завалит вас вопросами, на которые нужно отвечать да.

Восстановление поврежденного суперблока

Обычно эта команда справляется со всеми повреждениями на ура. Но если вы сделали что-то серьезное и повредили суперблок, то тут fsck может не помочь. Суперблок — это начало файловой системы. Без него ничего работать не будет.

Но не спешите прощаться с вашими данными, все еще можно восстановить. С помощью такой команды смотрим куда были записаны резервные суперблоки:

sudo mkfs -t ext4 -n /dev/sda1

fsck1

На самом деле эта команда создает новую файловую систему. Вместо ext4 подставьте ту файловую систему, в которую был отформатирован раздел, размер блока тоже должен совпадать иначе ничего не сработает. С опцией -n никаких изменений на диск не вноситься, а только выводится информация, в том числе о суперблоках.

Теперь у нас есть шесть резервных адресов суперблоков и мы можем попытаться восстановить файловую систему с помощью каждого из них, например:

sudo fsck -b 98304 /dev/sda1

fsck2

После этого, скорее всего, вам удастся восстановить вашу файловую систему. Но рассмотрим еще пару примеров.

Проверка чистой файловой системы

Проверим файловую систему, даже если она чистая:

sudo fsck -fy /dev/sda1

fsck4

Битые сектора

Или еще мы можем найти битые сектора и больше в них ничего не писать:

sudo fsck -c /dev/sda1

fsck5

Установка файловой системы

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

sudo fsck -t ext4 /dev/sdb1

fsck6

Проверка всех файловых систем

С помощью флага -A вы можете проверить все файловые системы, подключенные к компьютеру:

sudo fsck -A -y

Но такая команда сработает только в режиме восстановления, если корневой раздел и другие разделы уже примонтированы она выдаст ошибку. Но вы можете исключить корневой раздел из проверки добавив R:

sudo fsck -AR -y

Или исключить все примонтированные файловые системы:

sudo fsck -M -y

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

sudo fsck -A -t ext4 -y

Или можно также фильтровать по опциям монтирования в /etc/fstab, например, проверим файловые системы, которые монтируются только для чтения:

sudo fsck -A -t opts=ro

Проверка примонтированных файловых систем

Раньше я говорил что нельзя. Но если другого выхода нет, то можно, правда не рекомендуется. Для этого нужно сначала перемонтировать файловую систему в режим только для чтения. Например:

sudo mount -o remount,ro /dev/sdb1

А теперь проверка файловой системы fsck в принудительном режиме:

sudo fsck -fy /dev/sdb1

fsck7

Просмотр информации

Если вы не хотите ничего исправлять, а только посмотреть информацию, используйте опцию -n:

sudo fsck -n /dev/sdb1

fsck8

Выводы

Вот и все, теперь вы знаете как выполняется восстановление файловой системы ext4 или любой другой, поддерживаемой в linux fsck. Если у вас остались вопросы, спрашивайте в комментариях!

На десерт сегодня видео на английском про различия файловых систем ext4 и xfs, как обычно, есть титры:

https://www.youtube.com/watch?v=pECp066gGcY

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Creative Commons License

Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна .

NAME¶

fsck — check and repair a Linux filesystem

SYNOPSIS¶

fsck [-lsAVRTMNP] [-r [fd]] [-C [fd]]
[-t fstype] [filesystem…] []
[fs-specific-options]

DESCRIPTION¶

fsck is used to check and optionally repair one or more Linux
filesystems. filesys can be a device name (e.g. /dev/hdc1,
/dev/sdb2), a mount point (e.g. /, /usr, /home),
or an ext2 label or UUID specifier (e.g.
UUID=8868abf6-88c5-4a83-98b8-bfc24057f7bd or LABEL=root). Normally, the
fsck program will try to handle filesystems on different physical disk
drives in parallel to reduce the total amount of time needed to check all of
them.

If no filesystems are specified on the command line, and the
-A option is not specified, fsck will default to checking
filesystems in /etc/fstab serially. This is equivalent to the
-As options.

The exit code returned by fsck is the sum of the following
conditions:

0
No errors
1
Filesystem errors corrected
2
System should be rebooted
4
Filesystem errors left uncorrected
8
Operational error
16
Usage or syntax error
32
Checking canceled by user request
128
Shared-library error

The exit code returned when multiple filesystems are checked is
the bit-wise OR of the exit codes for each filesystem that is checked.

In actuality, fsck is simply a front-end for the various
filesystem checkers (fsck.fstype) available under Linux. The
filesystem-specific checker is searched for in the PATH environment
variable. If the PATH is undefined then fallback to «/sbin».

Please see the filesystem-specific checker manual pages for
further details.

OPTIONS¶

-l
Create an exclusive flock(2) lock file
(/run/fsck/<diskname>.lock) for whole-disk device. This option can
be used with one device only (this means that -A and -l are
mutually exclusive). This option is recommended when more fsck(8)
instances are executed in the same time. The option is ignored when used
for multiple devices or for non-rotating disks. fsck does not lock
underlying devices when executed to check stacked devices (e.g. MD or DM)
– this feature is not implemented yet.
-r [fd]
Report certain statistics for each fsck when it completes. These
statistics include the exit status, the maximum run set size (in
kilobytes), the elapsed all-clock time and the user and system CPU time
used by the fsck run. For example:

/dev/sda1: status 0, rss 92828, real 4.002804, user 2.677592,
sys 0.86186

GUI front-ends may specify a file descriptor fd, in
which case the progress bar information will be sent to that file
descriptor in a machine parsable format. For example:

/dev/sda1 0 92828 4.002804 2.677592 0.86186

-s
Serialize fsck operations. This is a good idea if you are checking
multiple filesystems and the checkers are in an interactive mode. (Note:
e2fsck(8) runs in an interactive mode by default. To make
e2fsck(8) run in a non-interactive mode, you must either specify
the -p or -a option, if you wish for errors to be corrected
automatically, or the -n option if you do not.)
-t fslist
Specifies the type(s) of filesystem to be checked. When the -A flag
is specified, only filesystems that match fslist are checked. The
fslist parameter is a comma-separated list of filesystems and
options specifiers. All of the filesystems in this comma-separated list
may be prefixed by a negation operator ‘no‘ or ‘!‘, which
requests that only those filesystems not listed in fslist will be
checked. If none of the filesystems in fslist is prefixed by a
negation operator, then only those listed filesystems will be checked.

Options specifiers may be included in the comma-separated
fslist. They must have the format opts=fs-option.
If an options specifier is present, then only filesystems which contain
fs-option in their mount options field of /etc/fstab will
be checked. If the options specifier is prefixed by a negation operator,
then only those filesystems that do not have fs-option in their
mount options field of /etc/fstab will be checked.

For example, if opts=ro appears in fslist, then
only filesystems listed in /etc/fstab with the ro option
will be checked.

For compatibility with Mandrake distributions whose boot
scripts depend upon an unauthorized UI change to the fsck
program, if a filesystem type of loop is found in fslist,
it is treated as if opts=loop were specified as an argument to
the -t option.

Normally, the filesystem type is deduced by searching for
filesys in the /etc/fstab file and using the corresponding
entry. If the type cannot be deduced, and there is only a single
filesystem given as an argument to the -t option, fsck
will use the specified filesystem type. If this type is not available,
then the default filesystem type (currently ext2) is used.

-A
Walk through the /etc/fstab file and try to check all filesystems
in one run. This option is typically used from the /etc/rc system
initialization file, instead of multiple commands for checking a single
filesystem.

The root filesystem will be checked first unless the -P
option is specified (see below). After that, filesystems will be checked
in the order specified by the fs_passno (the sixth) field in the
/etc/fstab file. Filesystems with a fs_passno value of 0
are skipped and are not checked at all. Filesystems with a
fs_passno value of greater than zero will be checked in order,
with filesystems with the lowest fs_passno number being checked
first. If there are multiple filesystems with the same pass number,
fsck will attempt to check them in parallel, although it will
avoid running multiple filesystem checks on the same physical disk.

fsck does not check stacked devices (RAIDs, dm-crypt,
…) in parallel with any other device. See below for
FSCK_FORCE_ALL_PARALLEL setting. The /sys filesystem is used to
determine dependencies between devices.

Hence, a very common configuration in /etc/fstab files
is to set the root filesystem to have a fs_passno value of 1 and
to set all other filesystems to have a fs_passno value of 2. This
will allow fsck to automatically run filesystem checkers in
parallel if it is advantageous to do so. System administrators might
choose not to use this configuration if they need to avoid multiple
filesystem checks running in parallel for some reason – for
example, if the machine in question is short on memory so that excessive
paging is a concern.

fsck normally does not check whether the device
actually exists before calling a filesystem specific checker. Therefore
non-existing devices may cause the system to enter filesystem repair
mode during boot if the filesystem specific checker returns a fatal
error. The /etc/fstab mount option nofail may be used to
have fsck skip non-existing devices. fsck also skips
non-existing devices that have the special filesystem type
auto.

-C [fd]
Display completion/progress bars for those filesystem checkers (currently
only for ext[234]) which support them. fsck will manage the
filesystem checkers so that only one of them will display a progress bar
at a time. GUI front-ends may specify a file descriptor fd, in
which case the progress bar information will be sent to that file
descriptor.
-M
Do not check mounted filesystems and return an exit code of 0 for mounted
filesystems.
-N
Don’t execute, just show what would be done.
-P
When the -A flag is set, check the root filesystem in parallel with
the other filesystems. This is not the safest thing in the world to do,
since if the root filesystem is in doubt things like the e2fsck(8)
executable might be corrupted! This option is mainly provided for those
sysadmins who don’t want to repartition the root filesystem to be small
and compact (which is really the right solution).
-R
When checking all filesystems with the -A flag, skip the root
filesystem. (This is useful in case the root filesystem has already been
mounted read-write.)
-T
Don’t show the title on startup.
-V
Produce verbose output, including all filesystem-specific commands that
are executed.
-?, —help
Display help text and exit.
—version
Display version information and exit.

FILESYSTEM SPECIFIC OPTIONS¶

Options which are not understood by fsck are passed to the
filesystem-specific checker!

These options must not take arguments, as there is no way
for fsck to be able to properly guess which options take arguments
and which don’t.

Options and arguments which follow the are treated as
filesystem-specific options to be passed to the filesystem-specific
checker.

Please note that fsck is not designed to pass arbitrarily
complicated options to filesystem-specific checkers. If you’re doing
something complicated, please just execute the filesystem-specific checker
directly. If you pass fsck some horribly complicated options and
arguments, and it doesn’t do what you expect, don’t bother reporting it
as a bug.
You’re almost certainly doing something that you shouldn’t be
doing with fsck. Options to different filesystem-specific fsck’s are
not standardized.

FILES¶

/etc/fstab

ENVIRONMENT VARIABLES¶

The fsck program’s behavior is affected by the following environment
variables:

FSCK_FORCE_ALL_PARALLEL
If this environment variable is set, fsck will attempt to check all
of the specified filesystems in parallel, regardless of whether the
filesystems appear to be on the same device. (This is useful for RAID
systems or high-end storage systems such as those sold by companies such
as IBM or EMC.) Note that the fs_passno value is still used.
FSCK_MAX_INST
This environment variable will limit the maximum number of filesystem
checkers that can be running at one time. This allows configurations which
have a large number of disks to avoid fsck starting too many
filesystem checkers at once, which might overload CPU and memory resources
available on the system. If this value is zero, then an unlimited number
of processes can be spawned. This is currently the default, but future
versions of fsck may attempt to automatically determine how many
filesystem checks can be run based on gathering accounting data from the
operating system.
PATH
The PATH environment variable is used to find filesystem
checkers.
FSTAB_FILE
This environment variable allows the system administrator to override the
standard location of the /etc/fstab file. It is also useful for
developers who are testing fsck.
LIBBLKID_DEBUG=all
enables libblkid debug output.
LIBMOUNT_DEBUG=all
enables libmount debug output.

SEE ALSO¶

fstab(5), mkfs(8), fsck.ext2(8) or fsck.ext3(8) or
e2fsck(8), cramfsck(8), fsck.jfs(8), fsck.nfs(8),
fsck.minix(8), fsck.msdos(8), fsck.vfat(8),
fsck.xfs(8), reiserfsck(8)

Theodore Ts'o <tytso@mit.edu>
Karel Zak <kzak@redhat.com>

AVAILABILITY¶

The fsck command is part of the util-linux package and is available from
Linux
Kernel Archive.

FSCK – очень важная утилита для Linux / Unix, она используется для проверки и исправления ошибок в файловой системе.

Она похоже на утилиту «chkdsk» в операционных системах Windows.

Она также доступна для операционных систем Linux, MacOS, FreeBSD.

FSCK означает «File System Consistency Check», и в большинстве случаев он запускается во время загрузки, но может также запускаться суперпользователем вручную, если возникнет такая необходимость.

Может использоваться с 3 режимами работы,

1- Проверка наличия ошибок и позволить пользователю решить, что делать с каждой ошибкой,

2- Проверка на наличие ошибок и возможность сделать фикс автоматически, или,

3- Проверка наличия ошибок и возможность отобразить ошибку, но не выполнять фикс.

Содержание

  1. Синтаксис использования команды FSCK
  2. Команда Fsck с примерами
  3. Выполним проверку на ошибки в одном разделе
  4. Проверьте файловую систему на ошибки и исправьте их автоматически
  5. Проверьте файловую систему на наличие ошибок, но не исправляйте их
  6. Выполним проверку на ошибки на всех разделах
  7. Проверим раздел с указанной файловой системой
  8. Выполнять проверку только на несмонтированных дисках

Синтаксис использования команды FSCK

$ fsck options drives

Опции, которые можно использовать с командой fsck:

  • -p Автоматический фикс (без вопросов)
  • -n не вносить изменений в файловую систему
  • -у принять «yes» на все вопросы
  • -c Проверить наличие плохих блоков и добавить их в список.
  • -f Принудительная проверка, даже если файловая система помечена как чистая
  • -v подробный режим
  • -b использование альтернативного суперблока
  • -B blocksize Принудительный размер блоков при поиске суперблока
  • -j external_journal Установить местоположение внешнего журнала
  • -l bad_blocks_file Добавить в список плохих блоков
  • -L bad_blocks_file Установить список плохих блоков

Мы можем использовать любую из этих опций, в зависимости от операции, которую нам нужно выполнить.

Давайте обсудим некоторые варианты команды fsck с примерами.

Команда Fsck с примерами

Примечание: – Прежде чем обсуждать какие-либо примеры, прочтите это. Мы не должны использовать FSCK на смонтированных дисках, так как высока вероятность того, что fsck на смонтированном диске повредит диск навсегда.

Поэтому перед выполнением fsck мы должны отмонтировать диск с помощью следующей команды:

$ umount drivename

Например:

$ umount /dev/sdb1

Вы можете проверить номер раздела с помощью следующей команды:

$ fdisk -l

Также при запуске fsck мы можем получить некоторые коды ошибок.

Ниже приведен список кодов ошибок, которые мы могли бы получить при выполнении команды вместе с их значениями:

  • 0 – нет ошибок
  • 1 – исправлены ошибки файловой системы
  • 2 – система должна быть перезагружена
  • 4 – Ошибки файловой системы оставлены без исправлений
  • 8 – Операционная ошибка
  • 16 – ошибка использования или синтаксиса
  • 32 – Fsck отменен по запросу пользователя
  • 128 – Ошибка общей библиотеки

Теперь давайте обсудим использование команды fsck с примерами в системах Linux.

Выполним проверку на ошибки в одном разделе

Чтобы выполнить проверку на одном разделе, выполните следующую команду из терминала:

$ umount /dev/sdb1

$ fsck /dev/sdb1

Проверьте файловую систему на ошибки и исправьте их автоматически

Запустите команду fsck с параметром «a» для проверки целостности и автоматического восстановления, выполните следующую команду.

Мы также можем использовать опцию «у» вместо опции «а».

$ fsck -a /dev/sdb1

Проверьте файловую систему на наличие ошибок, но не исправляйте их

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

$ fsck -n /dev/sdb1

Выполним проверку на ошибки на всех разделах

Чтобы выполнить проверку файловой системы для всех разделов за один раз, используйте fsck с опцией «A»

$ fsck -A

Чтобы отключить проверку корневой файловой системы, мы будем использовать опцию «R»

$ fsck -AR

Проверим раздел с указанной файловой системой

Чтобы запустить fsck на всех разделах с указанным типом файловой системы, например, «ext4», используйте fsck с опцией «t», а затем тип файловой системы,

$ fsck -t ext4 /dev/sdb1

или

$ fsck -t -A ext4

Выполнять проверку только на несмонтированных дисках

Чтобы убедиться, что fsck выполняется только на несмонтированных дисках, мы будем использовать опцию «M» при запуске fsck,

$ fsck -AM

Вот наше короткое руководство по команде fsck с примерами.

Пожалуйста, не стесняйтесь присылать нам свои вопросы, используя поле для комментариев ниже.

Introduction

The fsck (File System Consistency Check) Linux utility checks filesystems for errors or outstanding issues. The tool is used to fix potential errors and generate reports.

This utility comes by default with Linux distributions. No specific steps or an installation procedure is required to use fsck. Once you load the terminal, you are ready to exploit the functionalities of the tool.

Follow this guide to learn how to use fsck to check and repair filesystem on a Linux machine. The tutorial will list examples of how to use the tool and for which use cases.

How to use fsck command to check and repair filesystem in Linux

Prerequisites

  • Linux or UNIX-like system
  • Access to a terminal or command line
  • A user with root permissions to run the tool

When to Use fsck in Linux

The fsck tool can be used in various situations:

  • Use fsck to run a filesystem check as preventive maintenance or when there is an issue with your system.
  • One common problem fsck can diagnose is when the system fails to boot.
  • Another one is when you get an input/output error when the files on your system become corrupt.
  • You can also use the fsck utility to check the health of external drives, such as SD cards or USB flash drives.

Basic fsck Syntax

The basic syntax for the fsck utility follows this pattern:

fsck <options> <filesystem>

In the above example, filesystem can be a device, a partition, a mount point, etc. You can also use filesystem-specific options at the end of the command.

There are a few steps to do before you check and repair your file system. You need to locate a device and unmount.

View Mounted Disks and Partitions

To view all mounted devices on your system and check disk location, use one of the available tools in Linux.

One method to locate the disk you want to scan is to list the filesystem disks with the df command:

df -h
Terminal output when running a df -h command

The tool prints the data usage on your system and filesystems. Take note of the disk you want to check with the fsck command.

To view partitions for your first disk, for example, use the following command:

sudo parted /dev/sda 'print'

sda is how Linux refers to your first SCSI disk. If you have two, the second would be sdb, and so on.

In our example, we got one result since there was only one partition on this virtual machine. You will get more results if you have more partitions.

The terminal output when listing Linux partitions.

The disk name here is /dev/sda and then the number of partitions is shown in the Number column. In our case, it is one: sda1.

Unmount the Disk

A warning when you try to unmount a mounted disk or partition.

Before you can run a disk check with fsck, you need to unmount a disk or partition. If you try to run fsck on a mounted disk or partition, you will get a warning:

Make sure to run the unmount command:

sudo umount /dev/sdb

Replace /dev/sdb with the device you want to unmount.

Note that you cannot unmount root filesystems. Hence, now fsck can’t be used on a running machine. More on that towards the end of the guide.

Run fsck to Check for Errors

Now that you unmounted the disk, you can run fsck. To check the second disk, enter:

sudo fsck /dev/sdb
The output after running a fsck command to check the second disk.

The above example shows the output for a clean disk. If there are multiple issues on your disk, a prompt appears for each one where you have to confirm the action.

The exit code the fsck utility returns is the sum of these states:

Possible exit codes for the fsck command.

Mount the Disk

When you finish checking and repairing a device, mount the disk so you can use it again.

In our case, we will remount the sdb disk:

mount /dev/sdb

Do a Dry Run with fsck

Before you perform a live check, you can do a test run with fsck. Pass the -N option to the fsck command to perform a test:

sudo fsck -N /dev/sdb

The output prints what would happen but does not perform any actions.

Fix Detected Errors Automatically with fsck

To try to fix potential problems without getting any prompts, pass the -y option to fsck.

sudo fsck -y /dev/sdb

This way, you say “yes, try to fix all detected errors” without being prompted every time.

If no errors are found, the output looks the same as without the -y option.

Skip Repair but Print fsck Errors in the Output

Use the -n option if you want to check potential error on a file system without repairing them.

We have a second drive sdb with some journaling errors. The -n flag prints the error without fixing it:

sudo fsck -n /dev/sdb
Use -n fsck option to print errors without fixing them.

Force fsck to Do a Filesystem Check

When you perform a fsck on a clean device, the tool skips the filesystem check. If you want to force the filesystem check, use the -f option.

For example:

sudo fsck -f /dev/sdb
Force the fsck tool to do a filesystem check

The scan will perform all five checks to search for corruptions even when it thinks there are no issues.

Run fsck on All Filesystems at Once

If you want to perform a check on all filesystems with fsck in one go, pass the -A flag. This option will go through the etc/fstab file in one run.

Since root filesystems can’t be unmounted on a running machine, add the -R option to skip them:

fsck -AR

To avoid the prompts, add the -y option we talked about.

Skip fsck on a Specific Filesystem

If you want fsck to skip checking a filesystem, you need to add -t and “no” before a filesystem.

For example, to skip ext3 filesystem, run this command:

sudo fsck -AR -t noext3 -y

We added -y to skip the prompts.

Skip Fsck on Mounted Filesystems

To make sure you do not try to run fsck on a mounted filesystem, add the -M option. This flag tells the fsck tool to skip any mounted filesystems.

To show you the difference, we will run fsck on sdb while it is mounted, and then when we unmount it.

sudo fsck -M /dev/sdb
The output of fsck tool to skip any mounted filesystems.

While sdb is mounted, the tool exits without running a check. Then, we unmount sdb and run the same command again. This time, fsck checks the disk and reports it as clean, or with errors.

Note: To remove the first title line of the fsck tool “fsck from util-linux 2.31.1” use the -T option.

Run fsck on Linux Root Partition

As we already mentioned, fsck cannot check root partitions on a running machine since they are mounted and in use. However, even Linux root partitions can be checked if you boot into recovery mode and run the fsck check:

1. To do so, power on or reboot your machine through the GUI or by using the terminal:

sudo reboot

2. Press and hold the shift key during boot-up. The GNU GRUB menu appears.

3. Select Advanced options for Ubuntu.

Linux recovery mode screen.

4. Then, select the entry with (recovery mode) at the end. Let the system load into the Recovery Menu.

5. Select fsck from the menu.

Linux recovery menu select fsck tool.

6. Confirm by selecting <Yes> at the prompt.

Recovery mode confirmation message when fsck is selected.

7. Once finished, select resume at the recovery menu to boot up the machine.

Resume option selected when the tool finishes checking a root partition.

What if fsck is Interrupted?

You should not interrupt the fsck tool while it is in progress. However, if the process is interrupted, fsck will finish the ongoing check and then stop.

In case the utility found an error while the check was in process, it will not try to fix anything if interrupted. You can rerun the check next time and let it finish.

fsck Linux Command Options Summary

To wrap up, below is the list of the options you can use with the fsck Linux utility.

Option Description
-a Try to repair filesystem errors automatically. There will be no prompts, so use it with caution. 
-A Check all filesystems listed in /etc/fstab.
-C Show progress for ext2 and ext3 filesystems. 
-f Force fsck to check a filesystem. The tool checks even when the filesystem appears to be clean.
-l Lock the device to prevent other programs from using the partition during the scan and repair. 
-M Do not check mounted filesystems. The tool returns an exit code 0 when a filesystem is mounted.
-N Do a dry run. The output prints what the fsck would do without executing any actions. The warning or error messages are printed as well.  
-P Use to run a scan on multiple filesystems in parallel. It can cause issues, depending on your setup. Use with caution. 
-R Tell the fsck tool not to check the root filesystems when you use the -A option. 
-r Print device statistics. 
-t Specify which filesystems type(s) to check with fsck. Consult the man page for detailed information. 
-T Hide the title when the tool starts. 
-y Try to repair filesystem errors automatically during the check. 
-V Verbose output. 

Note: Learn about the error code SIGSEGV (signal segmentation violation) and how to troubleshoot it.

Conclusion

Now you know how to use fsck Linux command to check and repair filesystems. The guide provided examples of the tool’s functionalities and features.

Make sure you have root permissions before running the listed commands. For a detailed description of all options, you can consult the man file of the tool or visit the fsck Linux man page.

В моей статье «Проверка файловой системы на ошибки с помощью fsck на Linux» я расскажу как можно проверить файловую систему на вашей ОС в Linux.

Некоторым системам необходим пароль root чтобы запустить fsck или других аналогичных утилит, когда не могут загрузить полностью ОС. В этом случае –стоит выполнить проверку диска загрузившись в single-user mode , либо – загрузившись с другого диска.

Fsck расшифровывается как «файловая система Проверка целостности» (file system consistency check). На большинстве систем, Fsck запускается во время загрузки, если определенные условия.

Сам Fsck команда взаимодействует с соответствующей файловой системой конкретных FSCK команд, созданной авторами файловой системы. Независимо от типа вашей файловой системы, Fsck как правило, имеет три режима работы:

  1. Проверка на наличие ошибок и подсказывает пользователю интерактивное решение, как решить индивидуальные проблемы;
  2. Проверка на наличие ошибок и постарается автоматически исправить все ошибки;
  3. Проверка на наличие ошибок без возможности восстановить их, но тогда выдаст ошибки на стандартный вывод.

Код выхода возвращается FSCK это уникальный номер, представляющего собой сумму следующих значений состояния:

0 — Без ошибок (No errors ).
1 — Исправлены ошибки файловой системы(Filesystem errors corrected).
2 — Система должна быть перезагружена (System should be rebooted).
4 — Ошибки файловой системы оставили без изменений (Filesystem errors left uncorrected).
8 — Эксплуатационная ошибка (Operational error).
16 — Ошибки при использовании или синтаксические ошибки (Usage or syntax error).
32 — Fsck отменен по запросу пользователя (Fsck canceled by user request).
128 — Ошибка общей библиотеки (Shared-library error).

Код выхода возвращается, когда несколько файловых систем которая проверяется побитовое ИЛИ (OR) для каждой файловой системы, которая проверяется.

В действительности, Fsck — это просто фронт-энд для различных  проверочных утилит для файловых систем (fsck.fstype), которые доступны на Linux.

Файловая система для конкретных проверок ищет сначала в /sbin, а затем в /etc/fs и /etc/, и, наконец в директориях, перечисленных в переменной PATH (среда переменного кружения).

Прочитайте мануал для конкретных страниц проверки, например, чтобы узнать больше о конкретных проверок  для ext3 FSCK, выполните:

$ man fsck.ext3

Опции FSCK.

Основные Опции.

-l

Блокировка целого дискового устройства эксклюзивным flock. Этот параметр может быть использован только с одного устройства (это означает, что -A и -l являются взаимоисключающими). Эта опция рекомендуется, когда несколько экземпляров FSCK выполняются в то же время. Параметр игнорируется, когда используется для нескольких устройств или для невращающихся дисков. Fsck не блокируется базовые устройства при выполнении проверки сложенных устройств (например, MD или DM); эта функция еще не реализована.

-s

Сериализация FSCK операций. Это отличная идея, если вы проверяете несколько файловых систем в интерактивном режиме. (Примечание. E2fsck работает в интерактивном режиме по умолчанию. Чтобы запустить e2fsck в не-интерактивном режиме, необходимо указать -p или -a, если вы хотите чтобы все ошибки исправлялись автоматически используйте опцию -n если вы не делаете.)

-t

Задает тип (ы) файловой системы которые должны быть проверены. Когда флаг -A, используется только файловые системы, которые соответствуют fslist проверяются. Fslist параметр разделенный запятыми список файловых систем и опционов спецификаторов. Если ни один из файловых систем в fslist не начинается с оператора отрицания (OR или !), то только те, которые перечислены файловые системы будут проверены.

Опции спецификаторы могут быть включены раздельными запятыми в fslist. Они должны иметь формат opts=fs-option. Если спецификатор присутствует, то только файловые системы, которые содержат FS-option в их опциях монтирования области /etc/fstab  будут проверены. Если спецификатор используется с отрицанием, то только те файловые системы, которые не имеют FS-option в их опции монтирования области /etc/fstab будут проверены.

Например, если OPTS = ро появляется в fslist, то только файловые системы, перечисленные в/etc/fstab с возможностью ро будут проверены.

Как правило, тип файловой системы выводится с помощью функции поиска для filesys в файле /etc/fstab и используя соответствующую запись. Если тип не может быть выведен, и есть только одна файловая система в качестве аргумента для опции -t, Fsck будет использовать указанный тип файловой системы. Если этот тип не доступен, то тип по умолчанию файловая система (в настоящее время ext2) не используется.

-A

Поиск в файле /etc/fstab  и программа попытаться проверить все файловые системы за один проход. Эта опция обычно используется из файла инициализации /etc/rc, вместо нескольких команд для проверки единой файловой системы.

Корневая файловая система будет сначала проверяется, если опция -P не указана (смотрите ниже). После этого файловые системы будут проверяться в порядке, установленном в поле fs_passno (в шестом)в файле /etc/fstab. Файловые системы со значением fs_passno 0 пропускаются и не проверяются вообще. Файловые системы со значением fs_passno больше нуля будут проверены в порядке, файловых систем ( Наименьшее число в fs_passno проверяется в первую очередь).

Если существует несколько файловых систем с одинаковым числом, Fsck будет пытаться проверить их параллельно, хотя это позволит избежать запуска нескольких проверок файловой системы на одном физическом диске.

Fsck не проверяет сложенные устройств (рейды, DM-склеп …) параллельно с любым другим устройством. Смотрите ниже для установки FSCK_FORCE_ALL_PARALLEL для файловой системы используется определения зависимостей между устройствами.

Таким образом, очень распространенная конфигурация в  файле /etc/fstab для установки корневой файловой системы имеет значение fs_passno из 1 и установить все другие файловые системы имеют значение fs_passno 2. Это позволит запустить проверку Fsck для автоматического запуска файловой системы параллельно.

Системные администраторы могут не использовать эту конфигурацию, если они должны избежать многочисленных проверок файловой системы которые работают параллельно по некоторым причинам.

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

/etc/fstab опцию монтирования nofail могут быть использованы, чтобы пропустить в Fsck несуществующие устройства. Fsck также пропускает несуществующие устройства, которые имеют особый тип файловой системы автоматически.

-C [fd]

Показать завершения / индикаторы выполнения для этих проверок файловых систем (в настоящее время только для ext2 и ext3), которые поддерживают их. Fsck будет управлять проверкой файловой системы так, что только один из них будет отображать индикатор выполнения. С графическим интерфейсом пользователя можно указать дескриптор файла fd, в этом случае информация о ходе выполнения будет отправлена в дескриптор файла.

-M

Не проверять смонтированные файловые системы и вернуть код завершения 0, для смонтированных файловых систем.

-N

Ничего не делать, просто показывает, что должно быть сделано.

-P

Когда опция -A устанавливается, то fsck проверяет корневую файловую систему параллельно с другими файловыми системами. Это не очень безопасно, чтобы делать так, т.к если корневая файловая система находится под e2fsck, то исполняемый файл может быть поврежден!

Эта опция в основном предназначены для тех администраторов, которые не хотят перераспределить корневую файловую систему, чтобы быть маленькой и компактной (на самом деле правильное решение).

-R

При проверке всех файловых систем с флагом -A, пропускать корневую файловую систему. (Это полезно в случае когда корневая файловая система уже смонтирована для чтения и записи.)

-T

Не показывать название при запуске.

-V

Подробный вывод, в том числе всех команд конкретной файловой системы , которые выполняются.

 Специальные параметры для файловой системы.

Параметры, которые не понимают FSCK передаются в файловой системе конкретной проверкой. Эти опции не должны принимать аргументы, т.к нет никакого способа для Fsck, чтобы иметь возможность должным образом угадать, какие параметры имеют аргументы, а какие нет.

Параметры и аргументы, которые следуют — рассматриваются как файловая система конкретных вариантов, которые будут переданы в файловой системе конкретной проверки.

Пожалуйста, обратите внимание, что Fsck не предназначен для передачи сколь угодно сложных вариантов файловой системы, конкретных проверок. Если вы делаете что-то сложное, пожалуйста, просто выполните конкретную проверку напрямую для файловой системы.

Хотя не гарантируется, что следующие параметры поддерживаются большинством файловых систем:

-a

Автоматическое восстановление файловой системы без каких-либо вопросов (используйте эту опцию с осторожностью). Обратите внимание, что e2fsck поддерживает -a только для обратной совместимости. Эта опция отображается на e2fsck-х с опцией -p, которая является безопасной в использовании, в отличие от опции -a.

-n

Для некоторых файловых систем конкретных проверок, опция -n вызовет fs-specific  FSCK и тем самым данная опция говорит о отказе от попыток исправить все проблемы, но просто сообщать о таких проблемах в стандартный вывод.

В частности, fsck.reiserfs не будет сообщать любые повреждения при использовании этих варианта.

fsck.minix браузер не поддерживает параметр -n вообще.

-r

Интерактивный ремонт файловой системы (спросит подтверждение).

Примечание: Как правило, плохая идея использовать эту опцию, если несколько FSCK в настоящее время работают параллельно. Также обратите внимание, что это поведение для E2fsck по умолчанию; он поддерживает эту опцию только для причин обратной совместимости.

-y

Для некоторых файловых систем конкретная проверка,  — этот вариант вызовет fs-specific Fsck которая всегда пытаться автоматически исправить все обнаруженные и поврежденное в файловой системы. Иногда эксперт может быть в состоянии сделать лучше запустить FSCK вручную. Обратите внимание, что не все файловые системы конкретных проверок поддерживают этот вариант. В частности, fsck.minix и fsck.cramfs не поддерживают опцию -y.

Для удобства – настроим сеть:

# ifconfig eth0 inet 77.120.106.** netmask 255.255.255.0
# route add default gw 77.120.106.1 eth0

В ОС — Linux уже имеется утилита FSCK («Проверка системных файлов») для проверки файловой системы.
Синтаксис выглядит следующим образом, есть необходимость проверить и при необходимости отремонтировать одну или несколько файловых систем Linux:

# fsck Fs-Name-Here
# fsck /dev/xyz
# fsck /home
# fsck.ext3 /dev/hdc1
# fsck.ext2 /dev/flash/device/name

Fs-Name-Here -может быть одним из следующих:
Имя устройства — (e.g. /dev/hda1, /dev/sda2, /dev/md0, /dev/vg1/volume_1).
Точка монтирования — (e.g. /var, /home).
Метка ext2 — (e.g. LABEL=home ).
UUID спецификатор — (e.g. UUID=8536abf2-44c3-5a90-34b3-bfc23456f6bd).

Готовые примеры.

Во-первых, файловая система должна быть демонтирована. Вы не можете восстановить его, пока он работает, но для начала перейдем в init 1:

# init 1

Выполняем проверку, чтобы узнать какие диски и какие разделы у меня имеются:

# fdisk -l

fdisk -l

Далее, выполним проверку чтобы узнать тип файловой системы:

# file -s /dev/sda1

/dev/sda1: Linux rev 1.0 ext4 filesystem data (needs journal recovery) (extents) (huge files)

Далее, демонтировать файловую систему, например, если это /home (/dev/sda3) файловая система введите команду:

# umount /home

Или

# umount /dev/sda1

Можно вывести, что можно выполнить для данной ФС:

# fsck -N /dev/sda1
 fsck from util-linux-ng 2.17.2
[/sbin/fsck.ext4 (1) -- /boot] fsck.ext4 /dev/sda1

Например, запустим проверку целостности ФС с исправлением всех ошибок в автоматическом режиме:

# fsck.ext4 -y /dev/sda1
e2fsck 1.41.12 (17-May-2010)
/dev/sda1 is mounted.
e2fsck: Cannot continue, aborting.

У меня данный раздел примонтирован, нужно его отмонтировать и выполнить заново данную команду:

# umount /dev/sda1

Отмонтировали, теперь выполняем проверку:

# fsck.ext4 -y /dev/sda1

Вот что получили:

e2fsck 1.41.12 (17-May-2010)
/dev/sda1: clean, 64/128016 files, 148908/512000 blocks

Наконец, запустите FSCK на разделе, введите следующую команду:

# fsck /dev/sda3

Однако не забудьте указать тип файловой системы, используя опцию -t.  Fsck по умолчанию предполагает, файловую систему ext2:

# fsck -t ext3 /dev/sda3

Или для ext3:

# fsck.ext3 /dev/sda3

Или для ext4:

# fsck.ext4 /dev/sda5

Если вы не знаете, какай тип файловой системы у вас, то выполните команду которая будет отображать тип монтирования файловой системы:

$ mount

Если какие-либо файлы восстановлены, то они размещаются в /home/lost+found, FSCK команды.

Переходим (используем) на multiuser mode, выполнив:

# init 3

Автоисправление файловая системы при обнаружении ошибок

В ходе проверки файловой системы, если ошибки обнаружены, вы можете получить «FSCK», чтобы отремонтировать в автоматическом режиме вашу файловую систему, нужно к команде добавить флаг «-a». Например:

$ fsck -a /dev/sda1

Аналогично, используя флаг «-y» можете получить такую же работу:

# fsck -y /dev/sda1

Проверка всех файловых систем за один проход

Если есть несколько файловых систем на вашем ПК, то можно проверить все, выполнив команду fsck с флагом «-А». Пример:

# fsck -A

Что он будет делать, чтобы захватить все записи файловой системы с /etc/fstab и сканировать их на наличие ошибок. Вы можете использовать его вместе с «-R» и флагом «-y», чтобы предотвратить его сканирования файловую систему root и исправить все ошибки, если оно имеется:

# fsck -AR -y

 Исключение проверки на смонтированной файловой системе

Как упоминалось ранее, Fsck не может быть запущен на смонтированной файловой системе. Если вы используете флаг -A для проверки всех файловых систем, и некоторые из них установлены, вы можете повредить эти файловые системы.Способ преодолеть это использовать флаг «-M», чтобы предотвратить его от проверки в установленной системы.

Например, выполнив команду

# fsck -M /dev/sdc1

ничего не возвращает и код возврата 0 (означает «нет ошибки»). Сканирования не было сделано вообще, так как все файловые системы монтируются. По этому, нужно отмонтировать данный раздел и выполнить команду заново.

Определение типа файловой системы

Есть моменты, когда вы просто хотите проверить файловую систему определенного типа, скажем, ext2. Вы можете воспользоваться флагом -t, чтобы указать тип файловой системы, чтобы проверить. Например, команда

$ fsck -t ext4 /dev/sdc1

будет сканировать внешний жесткий диск, только если он находится в формате ext4. Кроме того, вы можете комбинировать с флагом «-A» для сканирования всех файловых систем определенного типа:

$ fsck -A -t ext4 -y

Force fsck  запуск каждый раз при загрузке

По умолчанию, в Ubuntu будет работать FSCK после каждых 30 bootups, но если вы хотите, чтобы система выполняла «FSCK» каждый раз когда она загружается, то все что вам нужно сделать, это создать пустой файл «звонок» «forcefsck» и поместите его в корневую папку. Это уведомит ОС,  о там чтобы она выполнила «FSCK»  и начала проверять файловую систему каждый раз во время загрузки:

$ sudo touch /forcefsck

Чтобы изменить частоту проверки, вы можете использовать команды «tune2fs». Следующая команда дает указание системе запустить «FSCK» после каждых 30 загрузок:

# tune2fs -c 30 /dev/sdaX

Или можно использовать опцию «-f» :

# fsck /dev/sda1 -f

Избегать ремонта, но сообщать о проблемах на стандартный вывод с помощью опции -n

Можно печатать все обнаруженные проблемы в стандартный вывод без ремонта в файловой системе, используя FSCK с опцией «-n»:

# fsck -n /dev/sda1

Использование FSCK с графическим интерфейсом 

Для Debian/Ubuntu/Mint можно установить программу:

$ sudo apt-get install gparted

На этом, моя статья «Проверка файловой системы на ошибки с помощью fsck на Linux» подошла к завершению.

  • Debian ошибка установки пакета
  • Debian ошибка при установке
  • Debian ошибка ввода вывода
  • Debian невозможно исправить ошибки у вас отложены held битые пакеты debian
  • Debian исправление ошибок файловой системы