User Tools

Site Tools


linux:debian:map-lba

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
linux:debian:map-lba [2022/10/01 06:23] oscarlinux:debian:map-lba [Unknown date] (current) – removed - external edit (Unknown date) 127.0.0.1
Line 1: Line 1:
-====== Map LBA to File ====== 
-You might see something like this on your console / dmesg: 
-<code> 
-[  394.051961] end_request: I/O error, dev sda, sector 128999424 
-[  394.055674] Buffer I/O error on device sda3, logical block 8800768 
-</code> 
-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: ===== 
-For this example, I'll be using the following information. The second line of the output above was not provided, we need to calculate the logical block offset first. 
- 
-**Bad LBA = 0x0a8ae67d = 176875133** 
- 
-===Find out the partition=== 
-<code> 
-$ 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 
-/dev/sda2          409663   168181822    83886080   83  Linux 
-/dev/sda3       168181823   172376126     2097152   82  Linux swap / Solaris 
-/dev/sda4       172376127   976768064   402195969   83  Linux 
-</code> 
- 
-Therefore this LBA is on partition: /dev/sda4 
- 
-===Get block size of the partition=== 
-<code> 
-$ sudo tune2fs -l /dev/sda4 | grep Block 
-Block count:              100548992 
-Block size:               4096 
-Blocks per group:         32768 
-</code> 
-This partition has block size: 4096 
-===Calculate the block=== 
-<code> 
-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 
-</code> 
-Denotes the integer part (round it DOWN to a whole number). 
-<code> 
-b = (int)((176875133-172376127) * 512 / 4096) 
-b = (int)562375.75 
-b = 562375 
-</code> 
-The block on this partition corresponding to this LBA is: 562375 
-===Identify the file=== 
-Use debugfs to locate the inode stored in this block, and the file that contains that inode:  
-<code> 
-$ 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 
-debugfs:  quit 
-</code> 
-Or if the block appears not in use anymore: 
-<code> 
-$ sudo debugfs 
-debugfs 1.41.9 (22-Aug-2009) 
-debugfs:  open /dev/sda4 
-debugfs:  testb 562375 
-Block 562375 not in use 
-debugfs:  quit 
-</code> 
- 
  
linux/debian/map-lba.1664605383.txt.gz · Last modified: by oscar