Re: read and write back full disk to trigger relocation

From: David Christensen <dpchrist_at_holgerdanske.com>
Date: Mon, 29 May 2023 23:12:24 UTC
On 5/29/23 04:25, Sysadmin Lists wrote:
> David Christensen May 29, 2023, 12:04:41 AM
>> On 5/28/23 14:45, Sysadmin Lists wrote: 
>>>   From the dd(1) manpage:
>>>
>>>        Do a refresh of a disk drive, in order to prevent presently recoverable
>>>        read errors from progressing into unrecoverable read errors:
>>>
>>>              dd if=/dev/ada0 of=/dev/ada0 bs=1m
>>
>>
>> gmirror(8) examples indicate the device node should be:
>>
>> /dev/mirror/name
>>
>>
>> Where "name" is the argument provided when the mirror was created:
>>
>> # gmirror label name prov ...
> 
> One of the examples is:
> 
>             gmirror label -v -b split -s 2048 data da0 da1 da2
> 
> Which tells me to look for /dev/da0, /dev/da1, /dev/da2 for the dd command.


Your mail client and my mail client (Thunderbird) indent things 
differently.  I have reformatted the above per Thunderbird conventions. 
I have had to do this every time I reply to your messages.  I do not 
have this issue with most other messages I reply to.


Testing dd(1) and gmirror(8):

2023-05-29 15:21:32 toor@vf1 ~
# freebsd-version ; uname -a
12.4-RELEASE-p2
FreeBSD vf1.tracy.holgerdanske.com 12.4-RELEASE-p1 FreeBSD 
12.4-RELEASE-p1 GENERIC  amd64

2023-05-29 15:23:05 toor@vf1 ~
# gmirror label mymirror ada3 ada4

2023-05-29 15:24:11 toor@vf1 ~
# gmirror status mymirror
            Name    Status  Components
mirror/mymirror  COMPLETE  ada3 (ACTIVE)
                            ada4 (ACTIVE)

2023-05-29 15:52:41 toor@vf1 ~
# dd if=/dev/ada3 of=/dev/ada3 bs=1m
dd: /dev/ada3: Operation not permitted

2023-05-29 15:53:45 toor@vf1 ~
# dd if=/dev/ada4 of=/dev/ada4 bs=1m
dd: /dev/ada4: Operation not permitted

2023-05-29 15:53:52 toor@vf1 ~
# dd if=/dev/mirror/mymirror of=/dev/mirror/mymirror bs=1m
1023+1 records in
1023+1 records out
1073741312 bytes transferred in 3.299006 secs (325474224 bytes/sec)


This confirms that the kernel will not allow writes to mirror components 
when they are active, as it should.  If a process could write to a 
component of a mirror, that would bypass the mirror driver, defeat the 
purpose of the mirror, allow race conditions, and result in data loss/ 
data corruption.


David