How to zero a failing disk drive before disposal?

From: Ronald F. Guilmette <rfg_at_tristatelogic.com>
Date: Thu, 10 Oct 2024 11:57:49 UTC
I have a pretty ancient 4TB spinning rust drive (WD4001FAEX) that is unambiguously at
death's door:

  1 Raw_Read_Error_Rate     0x002f   200   173   051    Pre-fail  Always       -       0
  3 Spin_Up_Time            0x0027   167   161   021    Pre-fail  Always       -       10641
  4 Start_Stop_Count        0x0032   100   100   000    Old_age   Always       -       155
  5 Reallocated_Sector_Ct   0x0033   200   200   140    Pre-fail  Always       -       1
  7 Seek_Error_Rate         0x002e   200   200   000    Old_age   Always       -       0
  9 Power_On_Hours          0x0032   099   099   000    Old_age   Always       -       829
 10 Spin_Retry_Count        0x0032   100   100   000    Old_age   Always       -       0
 11 Calibration_Retry_Count 0x0032   100   253   000    Old_age   Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       80
192 Power-Off_Retract_Count 0x0032   200   200   000    Old_age   Always       -       24
193 Load_Cycle_Count        0x0032   200   200   000    Old_age   Always       -       130
194 Temperature_Celsius     0x0022   126   098   000    Old_age   Always       -       26
196 Reallocated_Event_Count 0x0032   199   199   000    Old_age   Always       -       1
197 Current_Pending_Sector  0x0032   200   200   000    Old_age   Always       -       36
198 Offline_Uncorrectable   0x0030   200   200   000    Old_age   Offline      -       32
199 UDMA_CRC_Error_Count    0x0032   200   200   000    Old_age   Always       -       0
200 Multi_Zone_Error_Rate   0x0008   200   200   000    Old_age   Offline      -       40

In addition to the above clear indications of failure, "smartctl -t long" dies almost
immediately with a fatal error.

Now I plan to dispose of the drive (appropriately, at a proper e-waste recycling place)
however there may be some confidential data on the thing that should be wiped first...
because I'm paranoid.

I used to own an old RadioShack bulk tape eraser (basically just a big electromagnet)
that I would use on drives before disposing of them but I don't have that any more.

I could try using smartctl to initiate a secure erase, but for various reasons it would
just be more convenient if I could just dd /dev/zero to the thing.  But there's a catch.

According to what I have read, dd will halt if it encounters a write error.  That's a
clear problem in this context.  Also, according to the dd man page, the conv=noerror
option for dd won't really be helpful in this case since that just prevents dd from
stopping on _input_ errors.

Any suggestions?  If worse comes to worse I guess I will end up writing my own tiny
little C program to just write 4KB blocks to a designated output file while ignoring
all output errors, but I don't want to reinvent the wheel if somebody else already
created something I can use in this context.

Suggestions welcome.