What is a bad block?

Project:Linux hardware
Component:Documentation
Category:task
Priority:normal
Assigned:Unassigned
Status:active
Project wiki:Hardware
Related pages:#94: e2fsck: file system check
Description

What is a bad block?
How are they discovered?
How are they handled?
What guarantee do we have that they won't be used?
Are there any 'hidden' bad block?
Can we recover the data from a bad block using special techniques?