The idea and commands in this article submitted by Jacques Wagener via email. In his own words, "After nuking my partition by accident (and through my stupidity) I was really disappointed in myself, especially in losing my bookmarks and rss-feeds". The following article is based upon our email communication. I am just putting them as an article.
We have already written about ext2/ext3 file repair using fsck and other utilities. Linux comes with different filesystems and different repair utilities. To repair a ReiserFS filesystem you need to run reiserfsck command, which is a checking tool for the ReiserFS filesystem (just like fsck command for ext2/ext3 file system).
Reiserfsck searches for a Reiserfs filesystem on a device, replays any necessary transactions, and either checks or repairs the file system. ReiserFS saves data or log in a special file for pending disk updates and later on it commit updates to disk resulting into very good filesystem consistency.
Step # 1: Install reiserfsck
You need to install reiserfsprogs package, which includes reiserfsck user level tools for ReiserFS filesystems.
# apt-get install reiserfsprogs
Or if you are using RedHat/Fedor Core Linux:
# yum install reiserfsprogs
Step # 2: Backup partition/disk
Take system down to runlevel 1.
# init 1
Unmount /dev/sda1 (if it is still mounted as read/write only):
# umount /dev/sda1; umount /dev/sda2
Before using any one of the following command you are strongly advised to make a backup copy of the whole partition using dd or ddrescue (recommended) command.
# ddrescue /dev/sda /dev/sdb
OR use dd command:
# dd if=/dev/sda of=/dev/sdb conv=noerror
Step # 3: Check filesystem consistency
Above command makes a backup of your drive. Next check filesystem consistency which will reports problem to you with the following command (assuming that /dev/sda1 is your partition):
# reiserfsck --check /dev/sda1
If you get an error Bad root block 0If you get following message:
Running with --rebuild-tree is required
Then you need to run following command rebuilds the entire filesystem tree using leaf nodes found on the device (this is nothing but indication of corrupted :
# reiserfsck --scan-whole-partition --rebuild-tree /dev/sda1
- --scan-whole-partition: This option causes --rebuild-tree to scan the whole partition but not only the used space on the partition. You should always use this option with --rebuild-tree.
- --check: Checks filesystem consistency and reports, but does not repair any corruption that it finds.
- --rebuild-tree: This option rebuilds the entire filesystem tree using leaf nodes found on the device. Once you passed this option, do not stop or interrupt building operating.
Recovering corrupted superblock
Each file system has a superblock, which contains information about file system such as:
- File system type
- Information about other metadata structures
If this information lost, you are in trouble (data loss) so Linux maintains multiple redundant copies of the superblock in every file system.
During check (reiserfsck --check /dev/sda1) if you get an error superblock was missing, use following command to fix superblock:
# reiserfsck --rebuild-sb /dev/sda1
- --rebuild-sb: This option recovers the superblock on a Reiserfs partition. Normally you only need this option if mount reports "read_super_block: can't find a reiserfs file system".
Caution: Do not run above command twice on same drive. You will damage your partition (data).
Next logical step is mount your partition /dev/sda1 and check for your data:
# mkdir -p /mnt/data
# mount /dev/sda1 /mnt/data
# cd /mnt/data
# ls lost+found/ -l
lost+found is a special directory where recovered files are kept by Linux/reiserfsck. You can examine these files and restore the data.
Better backup entire partition using tar or ssh session:
# tar cvf /dev/nst0 /mnt/data
OR use scp to dump data to remote system:
# scp -r /mnt/data email@example.com:/backup