3

I issued dd command to zero out my hard disk. The command completed successfully but only part of the hard drive was overwritten:

mint@mint ~ $ sudo dd if=/dev/zero of=/dev/sda
dd: writing to ‘/dev/sda’: Input/output error
258416001+0 records in
258416000+0 records out
132308992000 bytes (132 GB) copied, 3741.09 s, 35.4 MB/s

The following shows the configuration of the hard drive:

mint@mint ~ $ sudo fdisk -l /dev/sda
Disk /dev/sda: 320.1 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders, total 625142448 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x8f45867a

Device Boot      Start         End      Blocks   Id  System

Notes:

  1. I recreated the partition table after I issued the dd command. That's why the partition table shows up.
  2. The hard drive has bad sectors, 200 of which in pending state. I issued the dd command to force the reallocation of these bad sectors.
  3. The write speed seems good at 34MB/s and accordingly I would like to install Linux on a partition located beyond the worn out part of the disk. I do not care about data loss as I do not plan to store any valuable data on the hard disk.
  4. In spite of the bad sectors, the dd command did not result in any I/O error.

smartctl output:

mint@mint ~ $ sudo smartctl -a /dev/sda 
smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.13.0-37-generic] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family:     Western Digital Scorpio Black
Device Model:     WDC WD3200BEKT-75PVMT0
Serial Number:    WD-WXC1A2127646
LU WWN Device Id: 5 0014ee 6abb45855
Firmware Version: 01.01A01
User Capacity:    320,072,933,376 bytes [320 GB]
Sector Size:      512 bytes logical/physical
Rotation Rate:    7200 rpm
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   ATA8-ACS (minor revision not indicated)
SATA Version is:  SATA 2.6, 3.0 Gb/s
Local Time is:    Sat Jun 13 05:27:23 2015 UTC
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: FAILED!
Drive failure expected in less than 24 hours. SAVE ALL DATA.
See vendor-specific Attribute list for failed Attributes.

General SMART Values:
Offline data collection status:  (0x00) Offline data collection activity
                    was never started.
                    Auto Offline Data Collection: Disabled.
Self-test execution status:      (   0) The previous self-test routine completed
                    without error or no self-test has ever 
                    been run.
Total time to complete Offline 
data collection:        ( 5760) seconds.
Offline data collection
capabilities:            (0x7b) SMART execute Offline immediate.
                    Auto Offline data collection on/off support.
                    Suspend Offline collection upon new
                    command.
                    Offline surface scan supported.
                    Self-test supported.
                    Conveyance Self-test supported.
                    Selective Self-test supported.
SMART capabilities:            (0x0003) Saves SMART data before entering
                    power-saving mode.
                    Supports SMART auto save timer.
Error logging capability:        (0x01) Error logging supported.
                    General Purpose Logging supported.
Short self-test routine 
recommended polling time:    (   2) minutes.
Extended self-test routine
recommended polling time:    (  60) minutes.
Conveyance self-test routine
recommended polling time:    (   5) minutes.
SCT capabilities:          (0x7035) SCT Status supported.
                    SCT Feature Control supported.
                    SCT Data Table supported.

SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x002f   200   200   051    Pre-fail  Always       -       0
  3 Spin_Up_Time            0x0027   163   160   021    Pre-fail  Always       -       816
  4 Start_Stop_Count        0x0032   099   099   000    Old_age   Always       -       1156
  5 Reallocated_Sector_Ct   0x0033   133   133   140    Pre-fail  Always   FAILING_NOW 561
  7 Seek_Error_Rate         0x002e   100   253   000    Old_age   Always       -       0
  9 Power_On_Hours          0x0032   073   073   000    Old_age   Always       -       19736
 10 Spin_Retry_Count        0x0032   100   100   000    Old_age   Always       -       0
 11 Calibration_Retry_Count 0x0032   100   100   000    Old_age   Always       -       0
 12 Power_Cycle_Count       0x0032   099   099   000    Old_age   Always       -       1151
191 G-Sense_Error_Rate      0x0032   001   001   000    Old_age   Always       -       2733
192 Power-Off_Retract_Count 0x0032   200   200   000    Old_age   Always       -       64
193 Load_Cycle_Count        0x0032   137   137   000    Old_age   Always       -       191394
194 Temperature_Celsius     0x0022   105   090   000    Old_age   Always       -       38
196 Reallocated_Event_Count 0x0032   194   194   000    Old_age   Always       -       6
197 Current_Pending_Sector  0x0032   200   200   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0030   100   253   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x0032   200   200   000    Old_age   Always       -       0
200 Multi_Zone_Error_Rate   0x0008   100   253   000    Old_age   Offline      -       0
240 Head_Flying_Hours       0x0032   074   074   000    Old_age   Always       -       19078
241 Total_LBAs_Written      0x0032   200   200   000    Old_age   Always       -       37643305479
242 Total_LBAs_Read         0x0032   200   200   000    Old_age   Always       -       31320890404
254 Free_Fall_Sensor        0x0032   197   197   000    Old_age   Always       -       3

SMART Error Log Version: 1
ATA Error Count: 48 (device log contains only the most recent five errors)
    CR = Command Register [HEX]
    FR = Features Register [HEX]
    SC = Sector Count Register [HEX]
    SN = Sector Number Register [HEX]
    CL = Cylinder Low Register [HEX]
    CH = Cylinder High Register [HEX]
    DH = Device/Head Register [HEX]
    DC = Device Command Register [HEX]
    ER = Error register [HEX]
    ST = Status register [HEX]
Powered_Up_Time is measured from power on, and printed as
DDd+hh:mm:SS.sss where DD=days, hh=hours, mm=minutes,
SS=sec, and sss=millisec. It "wraps" after 49.710 days.

Error 48 occurred at disk power-on lifetime: 19723 hours (821 days + 19 hours)
  When the command that caused the error occurred, the device was active or idle.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  01 51 08 81 1d 67 ef  Error: AMNF 8 sectors at LBA = 0x0f671d81 = 258416001

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  c8 00 08 80 1d 67 ef 00      00:36:32.852  READ DMA
  ef 10 02 00 00 00 a0 00      00:36:32.852  SET FEATURES [Enable SATA feature]
  ec 00 00 00 00 00 a0 00      00:36:32.850  IDENTIFY DEVICE
  ef 03 46 00 00 00 a0 00      00:36:32.850  SET FEATURES [Set transfer mode]

Error 47 occurred at disk power-on lifetime: 19723 hours (821 days + 19 hours)
  When the command that caused the error occurred, the device was active or idle.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  40 51 08 81 1d 67 ef  Error: UNC 8 sectors at LBA = 0x0f671d81 = 258416001

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  c8 00 08 80 1d 67 ef 00      00:36:31.120  READ DMA
  ef 10 02 00 00 00 a0 00      00:36:31.119  SET FEATURES [Enable SATA feature]
  ec 00 00 00 00 00 a0 00      00:36:31.118  IDENTIFY DEVICE
  ef 03 46 00 00 00 a0 00      00:36:31.118  SET FEATURES [Set transfer mode]

Error 46 occurred at disk power-on lifetime: 19723 hours (821 days + 19 hours)
  When the command that caused the error occurred, the device was active or idle.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  40 51 08 81 1d 67 ef  Error: UNC 8 sectors at LBA = 0x0f671d81 = 258416001

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  c8 00 08 80 1d 67 ef 00      00:36:29.389  READ DMA
  ef 10 02 00 00 00 a0 00      00:36:29.389  SET FEATURES [Enable SATA feature]
  ec 00 00 00 00 00 a0 00      00:36:29.387  IDENTIFY DEVICE
  ef 03 46 00 00 00 a0 00      00:36:29.387  SET FEATURES [Set transfer mode]

Error 45 occurred at disk power-on lifetime: 19723 hours (821 days + 19 hours)
  When the command that caused the error occurred, the device was active or idle.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  40 51 08 81 1d 67 ef  Error: UNC 8 sectors at LBA = 0x0f671d81 = 258416001

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  c8 00 08 80 1d 67 ef 00      00:36:27.657  READ DMA
  ef 10 02 00 00 00 a0 00      00:36:27.657  SET FEATURES [Enable SATA feature]
  ec 00 00 00 00 00 a0 00      00:36:27.655  IDENTIFY DEVICE
  ef 03 46 00 00 00 a0 00      00:36:27.655  SET FEATURES [Set transfer mode]

Error 44 occurred at disk power-on lifetime: 19723 hours (821 days + 19 hours)
  When the command that caused the error occurred, the device was active or idle.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  40 51 08 81 1d 67 ef  Error: UNC 8 sectors at LBA = 0x0f671d81 = 258416001

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  c8 00 08 80 1d 67 ef 00      00:36:25.926  READ DMA
  ef 10 02 00 00 00 a0 00      00:36:25.926  SET FEATURES [Enable SATA feature]
  ec 00 00 00 00 00 a0 00      00:36:25.924  IDENTIFY DEVICE
  ef 03 46 00 00 00 a0 00      00:36:25.924  SET FEATURES [Set transfer mode]

SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Short offline       Completed without error       00%         8         -
# 2  Short offline       Completed without error       00%         8         -
# 3  Short offline       Completed without error       00%         8         -
# 4  Short offline       Completed without error       00%         8         -
# 5  Short offline       Completed without error       00%         8         -
# 6  Short offline       Completed without error       00%         8         -
# 7  Short offline       Completed without error       00%         7         -
# 8  Short offline       Completed without error       00%         7         -
# 9  Short offline       Completed without error       00%         1         -
#10  Short offline       Completed without error       00%         1         -
#11  Short offline       Completed without error       00%         1         -
#12  Short offline       Completed without error       00%         1         -
#13  Short offline       Completed without error       00%         1         -
#14  Short offline       Completed without error       00%         1         -
#15  Short offline       Completed without error       00%         1         -
#16  Short offline       Completed without error       00%         1         -

SMART Selective self-test log data structure revision number 1
 SPAN  MIN_LBA  MAX_LBA  CURRENT_TEST_STATUS
    1        0        0  Not_testing
    2        0        0  Not_testing
    3        0        0  Not_testing
    4        0        0  Not_testing
    5        0        0  Not_testing
Selective self-test flags (0x0):
  After scanning selected spans, do NOT read-scan remainder of disk.
If Selective self-test is pending on power-up, resume after 0 minute delay.
2
  • Don't do this. The drive is already failed; replace it. If you try to reuse this drive, you are guaranteed to lose data. Jun 13, 2015 at 18:33
  • @MichaelHampton I will eventually replace it. Although I do not care much as I only plan to use this laptop for watching movies or playing with development tools.
    – Tarik
    Jun 13, 2015 at 19:47

2 Answers 2

7

dd output clearly state an I/O error happened. Probably the underlying disk is unable to reallocate a spare sector, or it failed in an unrecoverable manner (eg: SATA link lost).

Do a try with ddrescue, issuing the following command: ddrescue /dev/zero /dev/sda -f -D. Does it change something?

2
  • Can you believe this, I missed the error message right in front of my eyes! Thanks :-)
    – Tarik
    Jun 13, 2015 at 19:45
  • @Tarik The kernel won't give dd sufficient information for dd to know for sure what went wrong. dd makes a system call and get an error code back which says nothing more than I/O error. That's a very generic error, and what really went wrong cannot be deduced from the error message from dd, because dd was never given that information in the first place. The kernel log is the place to look for detailed information about what the error was.
    – kasperd
    Jun 13, 2015 at 21:43
10

I have seen the same thing happen due to writes going through the cache. dd by default does write system calls 512 bytes at a time. This goes through a cache layer operating with 4096 byte blocks. But the underlying media still uses 512 byte sectors.

So when dd does a write system call, the kernel will load the 4096 byte block from disk in order to change the 512 bytes and write it back. When this happens it is the reading step which fails, so the kernel never makes it to the writing step.

The way I have been getting around that is to bypass the cache. Specifying oflag=direct bypasses the caching layer for the write operations. Since that can cause a significant reduction in performance, I only used it to write the single bad sector by using seek=(offset) and count=1.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.