Mark bad sectors on hard drive without formatting
I've noticed that on my home Ubuntu server one drive is read only for some reason. Digging up I found that this can happen when hard drives have errors. I used badblocks to check for errors, and indeed I have some damaged sectors.
In most cases the only rational course of action is to try to backup data, remove the HDD and buy a new one. However, this server doesn't have anything I already don't have backed up on multiple places, and I'd like to use it till it dies. I use it for streaming music and running some simple scripts. In any case, it would be a big fuss reinstalling everything.
Is there a way to mark these bad blocks without formatting a hdd?
Solution 1:
I assume you are talking about physical bad blocks on a disk and not about corrupted file systems.
To check the physical condition of your disk it's best to install smartmontools
sudo apt-get install smartmontools
This works because all modern disks log their health status using a system called S.M.A.R.T.
Use the smartctrl
command to read out this status. For example to read all attributes from the first disk call
sudo smartctl --all /dev/sda
Watch out for a line talking about the overall heath status. Once this indicates an error it's very likely that the disk will fail soon.
SMART overall-health self-assessment test result: PASSED
Other lines you want to check for are the Pending Sector Count and the Reallocated Sectors.
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
5 Reallocated_Sector_Ct 0x0033 100 100 036 Pre-fail Always - 48
197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 2
Reallocated lists usually in the raw field the number of bad sectors the disk exchanged for working spare ones. Pending are sectors which might be reallocated in case the next write fails.
You can even trigger self tests of the disk when supported by your model
sudo smartctl -t long /dev/sda
To force checking of all sectors, use badblocks
in a mode in which data is written. Beware that even though in general it is safe to run, it will put extra load on your disks, which might cause them to fail. Always have a backup of your data.
sudo badblocks -svvn -c 262144 /dev/sda
The output from the badblocks
command will show you many lines with
hh:mm:ss elapased. (x/y/z errors)
where
x = num_read_errors
y = num_write_errors
z = num_corruption_errors
If you have fully processed your disk this way, the disk controller should have replaced all bad blocks by working ones and the reallocated count will be increased in the SMART log.
Solution 2:
Although this is an old question, I'm posting this because badblocks
should not be used to bad block a disk. See man badblocks
for more info...
"It is strongly recommended that users not run badblocks directly, but rather use the -c option of the e2fsck and mke2fs programs".
Note: do NOT abort a bad block scan!
Note: do NOT bad block a SSD
Note: backup your important files FIRST!
Note: this will take many hours
Note: you may have a pending HDD failure
Boot to a Ubuntu Live DVD/USB in “Try Ubuntu” mode.
In terminal
...
sudo fdisk -l
# identify all "Linux Filesystem" partitions
sudo e2fsck -fcky /dev/sdXX
# read-only test
or
sudo e2fsck -fccky /dev/sdXX
# non-destructive read/write test (recommended)
The -k is important, because it saves the previous bad block table, and adds any new bad blocks to that table. Without -k, you loose all of the prior bad block information.
The -fccky parameter...
-f Force checking even if the file system seems clean.
-c This option causes e2fsck to use badblocks(8) program to do
a read-only scan of the device in order to find any bad blocks.
If any bad blocks are found, they are added to the bad block
inode to prevent them from being allocated to a file or direc‐
tory. If this option is specified twice, then the bad block scan
will be done using a non-destructive read-write test.
-k When combined with the -c option, any existing bad blocks in the
bad blocks list are preserved, and any new bad blocks found by
running badblocks(8) will be added to the existing bad blocks
list.
-y Assume an answer of `yes' to all questions; allows e2fsck to be
used non-interactively. This option may not be specified at the
same time as the -n or -p options.