As far as the harddisk is concerned, the LBA (logical block address) is supposed to be the "physical" address of the block.
For modern harddisks this is no longer true, there is an additional level of indirection which maps bad LBAs no blocks from a spare list. There is no way to get at this list, unless you hack the harddrive's firmware. However, SMART values will tell you how many blocks are mapped this way, and how many are left.
This is also the reason badblocks
is basically useless for modern harddisks: The harddisk itself will transparently remap the block on the next write (or whenever it feels like it) as soon as it discovers a problem. So badblocks
will nearly always tell you "there are no bad blocks", and the harddisk will remap them until it runs out of spares, at which point you'll be in trouble, because by then the harddisk is at the end of its life, and will fail completely and catastrophically very soon.
I am not sure what you mean by "logical errors" and "physical errors": The harddisk doesn't distinguish between different kinds of bad blocks in the error messages you'll see from the harddisk controller.
If this is an XY problem, and your Y is "I need to distinguish between logical and physical bad blocks", please edit the question and describe the X you want to achieve.