Map LBA to File
From Attie's Wiki
You might see something like this on your console / dmesg:
[ 394.051961] end_request: I/O error, dev sda, sector 128999424 [ 394.055674] Buffer I/O error on device sda3, logical block 8800768
In this situation you can use the following assumptions:
- The bad sector / LBA is 128999424 (
L
) - The bad block is 8800768 in the filesystem on sda3 (
b
)
How To
http://smartmontools.sourceforge.net/badblockhowto.html
For this example, I'll be using the following information. The second line of the output above was not provided, meaning that we need to calculate the logical block offset.
Bad LBA = 0x0a8ae67d = 176875133
Find out some stuff
$ sudo fdisk -lu /dev/sda Disk /dev/sda: 500.1 GB, 500107862016 bytes 255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors Units = sectors of 1 * 512 = 512 bytes Disk identifier: 0x030818eb Device Boot Start End Blocks Id System /dev/sda1 * 63 409662 204800 83 Linux Partition 1 does not end on cylinder boundary. /dev/sda2 409663 168181822 83886080 83 Linux /dev/sda3 168181823 172376126 2097152 82 Linux swap / Solaris /dev/sda4 172376127 976768064 402195969 83 Linux
therefore it's on /dev/sda4
, which is mounted on /home
(ext4)
$ sudo tune2fs -l /dev/sda4 | grep Block Block count: 100548992 Block size: 4096 Blocks per group: 32768
b = (int)(((L-S)*512)/B)
where:
b | = | File System block number |
B | = | File system block size in bytes |
L | = | LBA of bad sector |
S | = | Starting sector of partition as shown by fdisk -lu |
(int) | denotes the integer part (round it DOWN to a whole number). |
b = (int)((176875133-172376127) * 512 / 4096) b = (int)562375.75 b = 562375
$ sudo debugfs debugfs 1.41.9 (22-Aug-2009) debugfs: open /dev/sda4 debugfs: testb 562375 Block 562375 not in use debugfs: quit
** OR **
$ sudo debugfs debugfs 1.41.9 (22-Aug-2009) debugfs: open /dev/sda4 debugfs: testb 562375 Block 562375 marked in use debugfs: icheck 562375 Block Inode number 562375 132344 debugfs: ncheck 132344 Inode Pathname 132344 /attie/banner.jpg ^C debugfs: quit