fsck

Related articles
Ext4
Btrfs
fstab
fsck
stands for
"file system check"
and it is used to check and optionally repair one or more Linux file systems. Normally, the
fsck
program will try to handle file systems on different physical disk drives in parallel to reduce the total amount of time needed to check all of the file systems (see
fsck(8)
).
The
Arch Linux boot process
conveniently takes care of the
fsck
procedure for you and will check all relevant partitions on your drive(s) automatically on every boot. Hence, there is usually no need to resort to the command-line.
Boot time checking
Mechanism
There are two players involved:
mkinitcpio offers you the option to
fsck
your root file system before mounting it via the
fsck
hook. If you do this, you should mount root read-write via the appropriate
rw
kernel parameter.
[1]
systemd will
fsck
all file systems having a
fsck
pass number greater than 0 (either with
#fstab options
or a
user-supplied unit file
). For the root file system, it also has to be mounted read-only initially with the kernel parameter
ro
and only then remounted read-write from
fstab
(note that the
defaults
mount option implies
rw
).
The first option is the recommended default, and what you will end up with if you follow the
Installation guide
. If you want to go with option 2 instead, you should remove the
fsck
hook from
mkinitcpio.conf
and use
ro
on the kernel command-line. The kernel parameter
fsck.mode=skip
can be used to make sure
fsck
is disabled entirely for both options.
Forcing the check
If you use the
base
mkinitcpio
hook, you can force
fsck
at boot time by passing
fsck.mode=force
as a
kernel parameter
. This will check every file system you have on the machine.
Alternatively, systemd provides
systemd-fsck@.service(8)
, which checks all configured file systems, which were not checked in the
initramfs
. However, checking the root file system this way causes a delay in the boot process, because the file system has to be remounted.
This article or section needs expansion.
Reason:
Is it possible to run
fsck
from initramfs using the systemd hook? (Discuss in
Talk:Fsck
)
Note
For those accustomed to use other GNU/Linux distributions, the old tricks consisting in writing a file with the name
forcefsck
to the root of each file system or using the command
shutdown
with the
-F
flag were only working for the old
SysVinit
and early versions of
Upstart
and are not working with
systemd
. The aforementioned solution is thus the only one working for Arch Linux.
Automatically answer yes to all repair questions
The boot time
fsck
checks might end up saying
"UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY."
This happens when you need to apply some changes to fix the file system which are not considered completely safe, and thus require
fsck
to be run manually.
You can set
fsck
to automatically apply all suggested change (i.e. answer yes to all questions) by setting the
fsck.repair
kernel command line option to
yes
. (Other possible values are
no
and
preen
.) Check the documentation
systemd-fsck@.service(8)
for the meaning of these options.
Tips and tricks
Attempt to repair damaged blocks
To automatically repair damaged portions of an ext2/ext3/ext4 or FAT
file system
, run:
Warning
This will not ask if you want to repair it, as the answer is
Yes
when you run it.
# fsck -a
Repair damaged blocks interactively
This is useful for when files on the boot partition have changed, and the journal failed to properly update. In this case, unmount the boot partition, and run the following code to repair damaged portions:
# fsck -r
drive
Changing the check frequency
Note
The following commands
tune2fs
and
dumpe2fs
work only with ext2/ext3/ext4 file systems.
By default,
fsck
checks a file system every 30 boots (counted individually for each partition). To change the frequency of checking, run:
# tune2fs -c 20 /dev/sda1
In this example,
20
is the number of boots between two checks.
Note that
1
would make it scan at every boot, while
0
would stop scanning altogether.
If you wish to see the frequency number and the current mount count for a specific partition, use:
# dumpe2fs -h /dev/sda1 | grep -i 'mount count'
fstab options
fstab
is a system configuration file and is used to tell the Linux kernel which partitions (file systems) to mount and where on the file system tree.
A typical
/etc/fstab
entry may look like this:
/dev/sda1   /         ext4      defaults       0
1
/dev/sda2   /other    ext4      defaults       0
2
/dev/sda3   /win      ntfs-3g   defaults       0
0
The 6th column (in bold) is the fsck option.
0
— do not check.
1
— first file system (partition) to check;
/
(root partition) should be set to
1
.
2
— all other file systems to be checked.
Troubleshooting
Can't run fsck on a separate /usr partition
Make sure you have the required
hooks
in
/etc/mkinitcpio.conf
and that you remembered to re-generate your initramfs image after editing this file.
Check your
fstab
! Only the root partition needs
1
at the end, everything else should have either
2
or
0
. Carefully inspect it for other typos, as well.
ext2fs: no external journal
There are times (due to power failure) in which an ext(3/4) file system can corrupt beyond normal repair. Normally, there will be a prompt from fsck indicating that it cannot find an external journal. In this case, run the following commands:
Unmount the partition based on its directory
# umount
directory
Write a new journal to the partition
# tune2fs -j /dev/
partition
Run an fsck to repair the partition
# fsck -p /dev/
partition