Re: writing zeros to bad sector results in persistent read error

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



All of this is probably the reason that this command exists:

hdparm --write-sector <sectornum>

I believe it directly sends the scsi/ata layer commands.

On Sun, Jun 29, 2014 at 6:50 PM, Martin K. Petersen
<martin.petersen@xxxxxxxxxx> wrote:
>>>>>> "Chris" == Chris Murphy <lists@xxxxxxxxxxxxxxxxx> writes:
>
> Chris,
>
> Chris> The SCSI layer is clearly combining the bs=512 count=8 into a
> Chris> single write command. This is inhibited with oflag=direct.
>
> It's not really the SCSI layer that does any of this but the VM and/or
> the I/O scheduler (depending on how things were submitted).
>
> Chris> I also found intermittent issuance of READ_10 to the drive,
> Chris> before WRITE_10, but wasn't able to figure out why it's
> Chris> intermittant.
>
> It's either the page cache doing readahead or you doing partial writes
> to uncached pages.
>
> You can flush the page cache like this:
>
>         echo 3 > /proc/sys/vm/drop_caches
>
>>> You do know that drives are physically incapable of writing partial
>>> sectors?  It has to be emulated, either in drive firmware or OS
>>> driver stack.  What you've written suggests you've missed that basic
>>> reality.  The rest is operator error.  Roman and Wolfgang were too
>>> polite when pointing out the need for bs=4096 -- it isn't 'should',
>>> it is 'must'.
>
> Chris> That's true for oflag=direct, it's not true without it.
>
> Correct.
>
> In general, a buffered write() call in dd or any other userland app does
> not have a 1:1 mapping with a SCSI WRITE command at the bottom of the
> stack. The pages in question will simply be marked dirty and eventually
> flushed to disk.
>
> You can force a more block-centric behavior by using synchronous/direct
> I/O.
>
> Chris> Also included for interest is the result of issue an hdparm write
> Chris> command. It works without a size specification, so I don't
> Chris> actually know what happens on the drive itself, plus the command
> Chris> that gets issued to the drive isn't "WRITE_10" but "ATA_16".
>
> That's because the ATA command gets encapsulated in a SCSI command so it
> can pass through the SCSI layer.
>
> --
> Martin K. Petersen      Oracle Linux Engineering
> --
> To unsubscribe from this list: send the line "unsubscribe linux-raid" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-raid" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux RAID Wiki]     [ATA RAID]     [Linux SCSI Target Infrastructure]     [Linux Block]     [Linux IDE]     [Linux SCSI]     [Linux Hams]     [Device Mapper]     [Device Mapper Cryptographics]     [Kernel]     [Linux Admin]     [Linux Net]     [GFS]     [RPM]     [git]     [Yosemite Forum]


  Powered by Linux