Maintaining the integrity of file systems is crucial for keeping your Linux systems running smoothly. File systems can become corrupt or inconsistent due to hardware failures, power outages, or software bugs. This can lead to data loss or system instability. This comprehensive tutorial provides useful fsck commands with examples to check and repair file systems in Linux.
The fsck
(file system check) utility helps you check and repair issues with your file systems. You can run it manually or have it automatically check file systems during system boot. With fsck
, you can scan for errors, fix corrupt data structures, and mark bad disk blocks to prevent further issues.
Let's start with the basics of checking and repairing standard Linux file systems with fsck
command. But before that, we need to find the file systems that need to be repaired and unmount them.
[Warning]
Do not run these commands on production systems without proper backups, as they can potentially corrupt or erase data if used incorrectly. We will practice on test environments to ensure your safety.
[NOTE]
The following commands must be run withsudo
orroot
permissions.
Table of Contents
Unmount File Systems
Using fsck
on a mounted file system is generally not recommended. Running fsck
on a mounted file system can lead to data corruption or other issues because the file system is actively being used by the operating system.
The safest way to use fsck
is to unmount the file system first. You can use the df -h
or lsblk
commands to get your mounted file systems (Partitions). Refer this guide to list disk partitions in Linux.
Once you found the file system you want to repair, unmount it like below:
umount /dev/sdXN
Replace /dev/sdXN
with the actual device identifier (e.g., /dev/sda
).
After repairing the file systems, do not forget to mount them.
mount /dev/sdXN
Linux fsck Commands to Repair Linux File Systems
In this tutorial I have provided 20 essential fsck commands to check and repair file systems in Linux and Unix-like operating systems.
These commands are essential tools for Linux system administrators to maintain the integrity and reliability of file systems. They allow for checking, repairing, and managing bad blocks, as well as performing various other file system maintenance tasks.
It's important to use these commands with caution, as they can potentially cause data loss if used incorrectly. Always create backups before performing any file system repairs or modifications.
1. Dry Run File System Check
fsck -N
This option instructs fsck
to perform a dry run, meaning it will not actually make any changes to the file system. Instead, it will display what actions it would take if executed without the -N
flag. This is useful for previewing potential changes before committing them.
Sample Output of the above command would be:
fsck from util-linux 2.36.1 [/usr/sbin/fsck.ext4 (1) -- /] fsck.ext4 /dev/nvme0n1p2 [/usr/sbin/fsck.vfat (1) -- /boot/efi] fsck.vfat /dev/nvme0n1p1 [/usr/sbin/fsck.exfat (1) -- /media/user/WD_SSD] fsck.exfat LABEL=WD_SSD
Allow me explain what this output means:
fsck from util-linux 2.36.1
This line indicates that the fsck
command is part of the util-linux package, version 2.36.1.
[/usr/sbin/fsck.ext4 (1) -- /] fsck.ext4 /dev/nvme0n1p2
This line shows that fsck
has detected an ext4 file system on the device /dev/nvme0n1p2
(likely a partition on an NVMe disk). In this dry run, fsck
would call the /usr/sbin/fsck.ext4
command to check and potentially repair this ext4 file system mounted at the root directory (/
).
[/usr/sbin/fsck.vfat (1) -- /boot/efi] fsck.vfat /dev/nvme0n1p1
Here, fsck
has found a FAT (vfat) file system on the device /dev/nvme0n1p1
, which is likely the EFI System Partition (ESP) mounted at /boot/efi
. In the dry run, fsck
would invoke /usr/sbin/fsck.vfat
to check and potentially repair this FAT file system.
[/usr/sbin/fsck.exfat (1) -- /media/user/WD_SSD] fsck.exfat LABEL=WD_SSD
This line indicates that fsck
has detected an exFAT file system with the label WD_SSD
, mounted at /media/user/WD_SSD
. In the dry run, fsck
would call /usr/sbin/fsck.exfat
to check and potentially repair this exFAT file system.
In summary, this output shows that fsck -N
is performing a dry run to check three different file systems on this system:
- An ext4 file system mounted at the root directory (
/
). - A FAT (vfat) file system mounted at
/boot/efi
, likely the EFI System Partition. - An exFAT file system with the label
WD_SSD
mounted at/media/user/WD_SSD
.
The dry run simply lists the actions that fsck
would take to check and repair these file systems if run without the -N
option. No actual changes will be made to the file systems during this dry run.
2. Check and Repair All File Systems
fsck -As
This command checks and attempts to repair all file systems listed in the /etc/fstab
file. The -A
option tells fsck
to check all file systems, and the -s
option instructs it to skip checking file systems marked as "clean."
3. Force File System Check
fsck -f /dev/sda1
This command forces a file system check on the /dev/sda1
device, which is typically a partition or disk. The -f
option forces fsck
to check the file system, even if it is marked as clean.
Example:
$ sudo fsck -y /dev/sda1 fsck from util-linux 2.36.1 exfatprogs version : 1.1.0 /dev/sda1: clean. directories 2774, files 40775
4. Force File System Check with Verbose Output
fsck -fv /dev/sda1
Similar to the previous command, this forces a file system check on /dev/sda1
, but with the added -v
option, which produces verbose output, providing more detailed information about the checking process.
5. Automatic File System Repair
fsck -y /dev/sda1
This command checks and repairs the file system on /dev/sda1
, and the -y
option automatically answers "yes" to any prompts or questions that fsck
may ask during the repair process.
6. Check ext2 File System and Mark Bad Blocks
fsck.ext3 -c /dev/sda1
This command specifically checks an ext3 file system on /dev/sda1
. The -c
option instructs fsck
to run the badblocks
command to find and mark bad blocks on the device.
7. Mark Bad Blocks for ext2/ext3/ext4 File Systems
e2fsck -c /dev/sda1
This is similar to the previous command but for ext2/ext3/ext4 file systems. It marks all bad blocks found and adds them to the bad block inode, preventing them from being allocated to files or directories.
8. Automatic Repair for ext2/ext3/ext4 File Systems
e2fsck -p
This command automatically repairs an ext2/ext3/ext4 file system without asking any questions, making it suitable for unattended or scripted repairs.
9. Dry Run for ext2/ext3/ext4 File Systems
e2fsck -n
This option performs a dry run, similar to fsck -N
. It checks the file system but does not make any changes, only reporting potential issues.
10. Assume "Yes" for ext2/ext3/ext4 File System Repair
e2fsck -y
Like fsck -y
, this command assumes "yes" to all questions asked during the file system repair process, allowing for unattended or scripted repairs.
11. Check and Add Bad Blocks to Bad Block List
e2fsck -c
This option checks for bad blocks on the file system and adds them to the bad block list, preventing their future use.
12. Force File System Check for ext2/ext3/ext4
e2fsck -f
This forces e2fsck
to check the file system, even if it is marked as clean.
13. Verbose Output for ext2/ext3/ext4 File System Check
e2fsck -v
Enables verbose output, providing more detailed information about the checking and repair process.
14. Use Alternative Superblock Location
e2fsck -b $Superblock
This option allows you to specify an alternative superblock location for e2fsck
to use when checking the file system.
Example:
e2fsck -b 32768 /dev/sda1
This command checks the ext2/3/4 file system on /dev/sda1
using the superblock located at byte offset 32768. This can be useful if the primary superblock is corrupted, and you need to use an alternate superblock location.
15. Force Block Size for Superblock Search
e2fsck -B $BlockSize
Forces e2fsck
to use a specific block size when searching for the superblock.
Example:
e2fsck -B 4096 /dev/sdb2
This command forces e2fsck to use a block size of 4096 bytes when checking the file system on /dev/sdb2
. This can be necessary if the file system was created with a non-standard block size.
16. Set External Journal Location
e2fsck -j $Dir
Specifies the location of an external journal for the file system being checked.
Example:
e2fsck -j /mnt/backup/external_journal /dev/sdc1
This command specifies that the external journal for the file system on /dev/sdc1
is located at /mnt/backup/external_journal
. This is relevant for file systems that use an external journal, such as when using a separate disk or partition for the journal.
17. Add Bad Blocks from File to Bad Block List
e2fsck -l $BadBlocksFile
Adds the bad blocks listed in the specified file to the file system's bad block list.
Example:
e2fsck -l /root/bad_blocks.txt /dev/sda2
This command adds the bad blocks listed in the /root/bad_blocks.txt
file to the bad block list for the ext2/3/4 file system on /dev/sda2
.
18. Set Bad Block List from File
e2fsck -L $BadBlocksFile
Sets the bad block list for the file system being checked to the blocks listed in the specified file.
Example:
e2fsck -L /root/bad_blocks.txt /dev/sdb1
This command sets the bad block list for the ext2/3/4 file system on /dev/sdb1
to the blocks listed in the /root/bad_blocks.txt
file, overwriting any existing bad block list.
19. Find and Report Bad Blocks
badblocks -o $BadBlocks.rpt /dev/sda3 $TotalBlockCount
This command finds and reports bad blocks on the /dev/sda3
device, writing the results to the $BadBlocks.rpt
file. The $TotalBlockCount
parameter specifies the total number of blocks to check.
Example:
badblocks -o /tmp/sda3_bad_blocks.rpt /dev/sda3 10485760
This command scans the device /dev/sda3
for bad blocks and writes the results to the /tmp/sda3_bad_blocks.rpt
file. It will check a total of 10485760 blocks (5 GB for a 512-byte block size) on the device.
20. Force File System Check with Bad Block List
e2fsck -f -l $BadBlocks.rpt /dev/sda1
This command forces a file system check on /dev/sda1
, using the bad block list provided in the $BadBlocks.rpt
file generated by the badblocks
command.
Example:
e2fsck -f -l /tmp/sda3_bad_blocks.rpt /dev/sda1
This command forces a file system check on /dev/sda1
and uses the bad block list contained in the /tmp/sda3_bad_blocks.rpt
file (generated by the badblocks
command in the previous example). This can be useful if you want to check or repair a file system using a pre-existing bad block list.
fsck vs e2fsck
As you may noticed in the previous examples, I have used both fsck
and e2fsck
commands. Are they similar? You might wonder.
No, fsck
and e2fsck
are not the same, although they are related and serve similar purposes.
fsck
(short for "file system check") is a generic command that can be used to check and repair various types of file systems on Linux and Unix-like operating systems. It acts as a front-end for different file system-specific checking tools, such as e2fsck
for ext2/ext3/ext4 file systems, xfs_repair
for XFS file systems, fsck.vfat
for FAT file systems, and so on.
When you run fsck
without specifying a particular file system type, it tries to detect the file system type automatically and then calls the appropriate file system-specific checking tool. For example, if you run fsck
on an ext4 file system, it will automatically invoke e2fsck
in the background.
e2fsck
, on the other hand, is a specialized tool designed specifically for checking and repairing ext2, ext3, and ext4 file systems. It is a lower-level utility that performs more detailed and comprehensive checks and repairs on these types of file systems.
In summary, the key differences between fsck
and e2fsck
are:
fsck
is a generic front-end command that can handle various file system types, whilee2fsck
is specific to ext2/ext3/ext4 file systems.fsck
automatically detects the file system type and calls the appropriate file system-specific tool (likee2fsck
for ext2/ext3/ext4).e2fsck
provides more advanced and detailed options for checking and repairing ext2/ext3/ext4 file systems, as it is designed specifically for these file system types.
So, while fsck
is a general-purpose tool, e2fsck
is a specialized tool for ext2/ext3/ext4 file systems.
If you know you are working with an ext2/ext3/ext4 file system, you can use e2fsck
directly for more granular control and options.
Otherwise, fsck
serves as a convenient front-end for checking and repairing various file system types.
fsck Commands Cheatsheet
Here's a cheatsheet for essential fsck
(file system check) commands in a neat tabular format:
Command | Description |
---|---|
fsck /dev/sdXN | Check the file system on the specified partition (e.g., /dev/sda1). |
fsck -A | Check all file systems listed in /etc/fstab. |
fsck -N | Show what would be done without actually doing it. |
fsck -C | Display progress bar while checking. |
fsck -M | Skip mounted file systems. |
fsck -R | Skip the root file system. |
fsck -V | Verbose mode, shows detailed output. |
fsck -y | Automatically answer 'yes' to all prompts. |
fsck -n | Automatically answer 'no' to all prompts. |
fsck -r | Interactively repair the file system. |
fsck.ext4 /dev/sdXN | Specifically check ext4 file system on the partition. |
fsck -t ext4 /dev/sdXN | Check file system of specified type (ext4 in this case). |
fsck -l | Lock the device to prevent multiple checks. |
Replace /dev/sdXN
with the actual device identifier (e.g., /dev/sda1
).
These commands cover the basics and some advanced options for using fsck
to maintain and repair file systems.
e2fsck Commands Cheatsheet
Here's a cheatsheet for essential e2fsck
commands:
Command | Description |
---|---|
e2fsck /dev/sdXN | Check the ext2/ext3/ext4 file system on the specified partition (e.g., /dev/sda1). |
e2fsck -p /dev/sdXN | Automatically repair the file system without any questions. |
e2fsck -n /dev/sdXN | Do not make any changes to the file system, only check it. |
e2fsck -y /dev/sdXN | Assume "yes" to all questions. |
e2fsck -f /dev/sdXN | Force check, even if the file system seems clean. |
e2fsck -c /dev/sdXN | Check for bad blocks and add them to the bad block list. |
e2fsck -v /dev/sdXN | Verbose mode, show detailed output. |
e2fsck -b 32768 /dev/sdXN | Use an alternative superblock (e.g., 32768). |
e2fsck -B 4096 /dev/sdXN | Set the block size to 4096 bytes. |
e2fsck -C 0 /dev/sdXN | Display a progress bar. |
e2fsck -j /dev/sdXN | Check a file system with an external journal. |
e2fsck -D /dev/sdXN | Optimize directories in the file system. |
e2fsck -E <extended-options> /dev/sdXN | Specify extended options (see man page for details). |
e2fsck -k /dev/sdXN | Preserve the bad block list. |
e2fsck -r /dev/sdXN | Interactively repair the file system (same as without options). |
Replace /dev/sdXN
with the actual device identifier (e.g., /dev/sda1
).
These commands cover the basics and some advanced options for using e2fsck
to maintain and repair ext2, ext3, and ext4 file systems.
Conclusion
Remember, a healthy file system is crucial for maintaining system stability and data integrity. Regularly checking and repairing your file systems with fsck
is an essential part of your Linux system maintenance routine.
By effectively using the fsck
command and the examples provided in this guide, you'll be well-equipped to diagnose and repair common file system issues on your Linux system.
We have also included essential cheatsheets for fsck
and e2fsck
commands for quick reference. Keep them near your desk always and use them when necessary.
Related Read: An Introduction to Linux /etc/fstab file