For bad and/or marginal blocks on hard disks, can anything be more effective than a single pass of zeros?
Thanks – that's the first write, which is reportedly not enough. In an edition to your answer, can you explain why in alternative advice, there's emphasis on the first re-write
  Blockquote


I'm not sure I'm following your question.

When a drive detects an unwritable, or bad sector, it's supposed to mark the unwritable block as bad, then re-map the bad sector to a spare sector. It makes no difference what type of data is contained in the data to be written to the drive. This will happen until the amount of spare sectors are used up. After they are, then with most drives, the bad sector is simply left in place and the drive should be considered bad.

From the post from your Apple link, I would tend to agree more with Martin Joseph than some of the others. If the number of bad sectors is increasing with any degree of regularity, then it likely means bearings are failing in either the actuator or the drive motor. This allows too much play in the mechanisms and results in more and more head crashes as the problem gets worse, which causes more and more bad sectors. Either the drive will fail from mechanical problem (bad bearings,) the heads will eventually become damaged, or the platters will become so damaged no more spare sectors will be available and they'll just be left on the drive platters to cause more and more problems.

If the bad sector problem is due to a one time head crash (impact or a small particle entering the drive chamber) it's quite possible that the drive may be corrected by "zeroing" and may last years.

The only time a multi-pass overwrite would be needed that I could think of would be to "clear" weak sectors. The amount of time it takes to read a weak sector should raise a flag to the controller, but if the amount of time never exceeds the drive's threshold it won't be re-mapped. With weak sectors, the amount of time to read it may vary enough that at one point it might actually, finally flag the sector as failed and re-map it.

The process of "zeroing" the drive is really something of a misnomer. You could fill the blocks with "Hello, World!" data and it should still remap the bad sectors if spares are available. The reason people suggest using the "zeroing" technique is because it's built into Disk Utility, not as a drive repair procedure but as a security procedure. It just incidentally happens to force the controller to remap bad sectors when it encounters them.

I would suggest the term "re-write" refers to the fact that the sector once held data and now, in the zeroing or overwriting process it's being re-written.