On 2020-06-23 09:28, Hashim Aziz via Cygwin wrote:
> I hadn't checked with 512 byte block sizes because of the amount of time it 
> would have taken, but sure enough have just finished trying with bs=512 and 
> no block size at all (so dd's default block size, which is either 512 or 
> 1024) and although each wipe took over 24 hours, they did indeed wipe all of 
> the sectors. So it seems that there's a bug with regards to how Cygwin 
> handles the last block when a large (i.e. sane) block size is selected, and 
> that this bug doesn't occur on actual UNIX-based systems.
> 
> ________________________________
> From: Cygwin <cygwin-boun...@cygwin.com> on behalf of Eliot Moss 
> <m...@cs.umass.edu>
> Sent: 20 June 2020 9:26 PM
> To: The Cygwin Mailing List <cygwin@cygwin.com>
> Subject: Re: [cygwin] DD bug fails to wipe last 48 sectors of a disk
> 
> On 6/20/2020 1:31 PM, Hashim Aziz via Cygwin wrote:
>> To reproduce simply run the following command on a drive (obviously, this 
>> will irreversibly wipe all data):
>>
>> dd if=/dev/zero of=/dev/sdX bs=4M status=progress
>>
>> Both drives were attached via internal SATA (by way of a PCIE to SATA Host 
>> Bus Adapter).
>>
>> Cygwin was running in an elevated window as dd cannot run in Cygwin without 
>> administrator access, at least not on Windows 10 and not when dealing with 
>> raw disks. I was running Avast the first time I discovered this, and am 
>> currently running Windows Defender, so doubt that the AV is the cause of 
>> this.
>>
>> The hard drives are a Western Digital WD10PURX-64E5EY0 (Serial: 
>> WD-WCC4J6HX189U) and a Kingston SV200S3128G (Serial: 12BA315PKAWK).
>>
>> I just ran DD for Windows 0.6beta3 with variations of the following command:
>>
>> dd.exe if=/dev/zero of=\\.\PHYSICALDRIVEX --progress bs=4M
>>
>> ...and can confirm that the bug also manifests here, but in a slightly 
>> different way - irrespective of the disk or block size, it fails to wipe the 
>> last 176 sectors of the drive.
> 
> I was going to ask: even with block size 512 bytes?  But I guess you checked 
> that ...

I don't have the facilities to test, and there appear to be *NO* Windows
documentation details on error condition handling, but my suspicion is that Unix
reads and writes fail only *AFTER* reading or writing at the end of the device,
but Windows reads and writes extents may be checked and failed *BEFORE* reading
or writing any data near the end of the device.
If the actual Windows error code returned is generic, Cygwin would need to
pre-check the device size as Windows does, and reduce read and write sizes to
the allowed maximum at the end of the device.

-- 
Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada

This email may be disturbing to some readers as it contains
too much technical detail. Reader discretion is advised.
[Data in IEC units and prefixes, physical quantities in SI.]
--
Problem reports:      https://cygwin.com/problems.html
FAQ:                  https://cygwin.com/faq/
Documentation:        https://cygwin.com/docs.html
Unsubscribe info:     https://cygwin.com/ml/#unsubscribe-simple

Reply via email to