Re: gpart destroy efi partition?

From: Warner Losh <imp_at_bsdimp.com>
Date: Tue, 23 May 2023 10:43:52 UTC
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