Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 23 May 2023 04:43:52 -0600
From:      Warner Losh <imp@bsdimp.com>
To:        Steve Kargl <sgk@troutmask.apl.washington.edu>
Cc:        FreeBSD Hackers <freebsd-hackers@freebsd.org>
Subject:   Re: gpart destroy efi partition?
Message-ID:  <CANCZdfqjAAQJLa14OyzhqjruJPZE9fYROo5YQwYhqB0nRVeM3Q@mail.gmail.com>
In-Reply-To: <ZGxCgdOOZHZsKRnh@troutmask.apl.washington.edu>
References:  <ZGw2tRM9edxKxXqO@troutmask.apl.washington.edu> <CANCZdfrPwX=1SXnqu4_i0cyt-R38KH8_Jt97PDjRqci0cOXTAw@mail.gmail.com> <ZGxCgdOOZHZsKRnh@troutmask.apl.washington.edu>

next in thread | previous in thread | raw e-mail | index | archive | help
--000000000000dd841805fc5a1027
Content-Type: text/plain; charset="UTF-8"

On Mon, May 22, 2023, 10:35 PM Steve Kargl <sgk@troutmask.apl.washington.edu>
wrote:

> On Mon, May 22, 2023 at 09:51:40PM -0600, Warner Losh wrote:
> > On Mon, May 22, 2023, 9:45 PM Steve Kargl <
> sgk@troutmask.apl.washington.edu>
> > wrote:
> >
> > > Is there a secret incantation for destroying an EFI
> > > partition on a USB memstick?  After installing FreeBSD,
> > > I would like to re-use a memstick, but
> > >
> > > % gpart destroy da0
> > > gpart: geom 'da0': Read-only file system
> > > % gpart destroy -F da0
> > > gpart: geom 'da0': Read-only file system
> > > % gpart show da0
> > > =>      40  60063664  da0  GPT  (29G)
> > >         40  60063664    1  ms-basic-data  (29G)
> > > % gpart delete -i 1 da0
> > > gpart: geom 'da0': Read-only file system
> > > % dd if=/dev/zero of=/dev/da0 bs=1m
> > > dd: /dev/da0: Read-only file system
> > >
> >
> > What's mounted?
> >
>
> Nothing mounted other than the boot partition on
> an internal hard drive.  I plugged the memstick into
> a usb port, and use gpart to list disk info.
>
> % df
> Filesystem  1M-blocks  Used  Avail Capacity  Mounted on
> /dev/ada0p2    458231 62032 359539    15%    /
> devfs               0     0      0     0%    /dev
>
> ada0p1 is the EFI boot partition on the internal drive.
> ada0p3 is swap.
>
> % gpart list da0
> Geom name: da0
> modified: false
> state: OK
> fwheads: 255
> fwsectors: 63
> last: 60063703
> first: 40
> entries: 128
> scheme: GPT
> Providers:
> 1. Name: da0p1
>    Mediasize: 30752595968 (29G)
>    Sectorsize: 512
>    Stripesize: 0
>    Stripeoffset: 20480
>    Mode: r0w0e0
>    efimedia: HD(1,GPT,a2e07858-a4b6-11ec-ac6a-fcaa142bc587,0x28,0x3947fb0)
>    rawuuid: a2e07858-a4b6-11ec-ac6a-fcaa142bc587
>    rawtype: ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
>    label: (null)
>    length: 30752595968
>    offset: 20480
>    type: ms-basic-data
>    index: 1
>    end: 60063703
>    start: 40
> Consumers:
> 1. Name: da0
>    Mediasize: 30752636928 (29G)
>    Sectorsize: 512
>    Mode: r0w0e0
>
> I did find
>
> % sysctl -a | grep da01
> kern.geom.disk.da0.flags:
> 1a8<CANFLUSHCACHE,DIRECTCOMPLETION,CANZONE,WRITEPROTECT>
>
> So, I suppose the question is how to clear WRITEPROTECT.
>

Assuming you are running as root...

WRITEPROTECT gets set when we do a MODE SENSE of the disk when we're
probing it. That returns a status that indicates that the device is
indicating it is write protected. So we set the write_protect flags in the
disk structure which is what's reported above and used to generate the read
only errors.

if you are lucky, this is a software write protect. That's on mode page
0xa. camcontrol can read that:
# camcontrol modepage da0 -m 0xa
will report it. if SWP is 1, then it's a software lock. Add -e to the
above to edit it and change the line with  SWP on it from  1->0 and save.
this will set the current value, turning it off temporarily. You can then
proceed to write to the device, with luck.

Without  luck the drive encountered a condition that made it decide to lock
you out forever from  writing again.

Warner

--000000000000dd841805fc5a1027
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"auto"><div><br><br><div class=3D"gmail_quote"><div dir=3D"ltr" =
class=3D"gmail_attr">On Mon, May 22, 2023, 10:35 PM Steve Kargl &lt;<a href=
=3D"mailto:sgk@troutmask.apl.washington.edu" rel=3D"noreferrer noreferrer" =
target=3D"_blank">sgk@troutmask.apl.washington.edu</a>&gt; wrote:<br></div>=
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex">On Mon, May 22, 2023 at 09:51:40PM -0600, Wa=
rner Losh wrote:<br>
&gt; On Mon, May 22, 2023, 9:45 PM Steve Kargl &lt;<a href=3D"mailto:sgk@tr=
outmask.apl.washington.edu" rel=3D"noreferrer noreferrer noreferrer" target=
=3D"_blank">sgk@troutmask.apl.washington.edu</a>&gt;<br>
&gt; wrote:<br>
&gt; <br>
&gt; &gt; Is there a secret incantation for destroying an EFI<br>
&gt; &gt; partition on a USB memstick?=C2=A0 After installing FreeBSD,<br>
&gt; &gt; I would like to re-use a memstick, but<br>
&gt; &gt;<br>
&gt; &gt; % gpart destroy da0<br>
&gt; &gt; gpart: geom &#39;da0&#39;: Read-only file system<br>
&gt; &gt; % gpart destroy -F da0<br>
&gt; &gt; gpart: geom &#39;da0&#39;: Read-only file system<br>
&gt; &gt; % gpart show da0<br>
&gt; &gt; =3D&gt;=C2=A0 =C2=A0 =C2=A0 40=C2=A0 60063664=C2=A0 da0=C2=A0 GPT=
=C2=A0 (29G)<br>
&gt; &gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A040=C2=A0 60063664=C2=A0 =C2=A0 1=
=C2=A0 ms-basic-data=C2=A0 (29G)<br>
&gt; &gt; % gpart delete -i 1 da0<br>
&gt; &gt; gpart: geom &#39;da0&#39;: Read-only file system<br>
&gt; &gt; % dd if=3D/dev/zero of=3D/dev/da0 bs=3D1m<br>
&gt; &gt; dd: /dev/da0: Read-only file system<br>
&gt; &gt;<br>
&gt; <br>
&gt; What&#39;s mounted?<br>
&gt; <br>
<br>
Nothing mounted other than the boot partition on<br>
an internal hard drive.=C2=A0 I plugged the memstick into<br>
a usb port, and use gpart to list disk info.<br>
<br>
% df<br>
Filesystem=C2=A0 1M-blocks=C2=A0 Used=C2=A0 Avail Capacity=C2=A0 Mounted on=
<br>
/dev/ada0p2=C2=A0 =C2=A0 458231 62032 359539=C2=A0 =C2=A0 15%=C2=A0 =C2=A0 =
/<br>
devfs=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A00=C2=A0 =C2=A0 =
=C2=A00=C2=A0 =C2=A0 =C2=A0 0=C2=A0 =C2=A0 =C2=A00%=C2=A0 =C2=A0 /dev<br>
<br>
ada0p1 is the EFI boot partition on the internal drive.<br>
ada0p3 is swap.<br>
<br>
% gpart list da0<br>
Geom name: da0<br>
modified: false<br>
state: OK<br>
fwheads: 255<br>
fwsectors: 63<br>
last: 60063703<br>
first: 40<br>
entries: 128<br>
scheme: GPT<br>
Providers:<br>
1. Name: da0p1<br>
=C2=A0 =C2=A0Mediasize: 30752595968 (29G)<br>
=C2=A0 =C2=A0Sectorsize: 512<br>
=C2=A0 =C2=A0Stripesize: 0<br>
=C2=A0 =C2=A0Stripeoffset: 20480<br>
=C2=A0 =C2=A0Mode: r0w0e0<br>
=C2=A0 =C2=A0efimedia: HD(1,GPT,a2e07858-a4b6-11ec-ac6a-fcaa142bc587,0x28,0=
x3947fb0)<br>
=C2=A0 =C2=A0rawuuid: a2e07858-a4b6-11ec-ac6a-fcaa142bc587<br>
=C2=A0 =C2=A0rawtype: ebd0a0a2-b9e5-4433-87c0-68b6b72699c7<br>
=C2=A0 =C2=A0label: (null)<br>
=C2=A0 =C2=A0length: 30752595968<br>
=C2=A0 =C2=A0offset: 20480<br>
=C2=A0 =C2=A0type: ms-basic-data<br>
=C2=A0 =C2=A0index: 1<br>
=C2=A0 =C2=A0end: 60063703<br>
=C2=A0 =C2=A0start: 40<br>
Consumers:<br>
1. Name: da0<br>
=C2=A0 =C2=A0Mediasize: 30752636928 (29G)<br>
=C2=A0 =C2=A0Sectorsize: 512<br>
=C2=A0 =C2=A0Mode: r0w0e0<br>
<br>
I did find <br>
<br>
% sysctl -a | grep da01<br>
kern.geom.disk.da0.flags: 1a8&lt;CANFLUSHCACHE,DIRECTCOMPLETION,CANZONE,WRI=
TEPROTECT&gt;<br>
<br>
So, I suppose the question is how to clear WRITEPROTECT.<br></blockquote></=
div></div><div dir=3D"auto"><br></div><div dir=3D"auto">Assuming you are ru=
nning as root...=C2=A0=C2=A0</div><div dir=3D"auto"><br></div><div dir=3D"a=
uto">WRITEPROTECT gets set when we do a MODE SENSE of the disk when we&#39;=
re probing it. That returns a status that indicates that the device is indi=
cating it is write protected. So we set the write_protect flags in the disk=
 structure which is what&#39;s reported above and used to generate the read=
 only errors.</div><div dir=3D"auto"><br></div><div dir=3D"auto">if you are=
 lucky, this is a software write protect. That&#39;s on mode page 0xa. camc=
ontrol can read that:</div><div dir=3D"auto"># camcontrol modepage da0 -m 0=
xa</div><div dir=3D"auto">will report it. if SWP is 1, then it&#39;s a soft=
ware lock. Add -e to the=C2=A0 above to edit it and change the line with=C2=
=A0 SWP on it from=C2=A0 1-&gt;0 and save. this will set the current value,=
 turning it off temporarily. You can then proceed to write to the device, w=
ith luck.</div><div dir=3D"auto"><br></div><div dir=3D"auto">Without=C2=A0 =
luck the drive encountered a condition that made it decide to lock you out =
forever from=C2=A0 writing again.</div><div dir=3D"auto"><br></div><div dir=
=3D"auto">Warner</div><div dir=3D"auto"><br></div><div dir=3D"auto"><br></d=
iv></div>

--000000000000dd841805fc5a1027--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CANCZdfqjAAQJLa14OyzhqjruJPZE9fYROo5YQwYhqB0nRVeM3Q>