On Fri, Aug 09, 2013 at 04:54:01PM -0400, Kenneth R Westerback wrote:
> On Fri, Aug 09, 2013 at 11:38:16AM +0200, Federico Giannici wrote:
> > I don't know how I made it (probably in previous releases of OS),
> > but now I have a disk with the following disklabel:
> > 
> > # /dev/rsd2c:
> > type: SCSI
> > disk: SCSI disk
> > label: ST1000DM003-9YN1
> > duid: b0e3fc037df87899
> > flags:
> > bytes/sector: 512
> > sectors/track: 63
> > tracks/cylinder: 255
> > sectors/cylinder: 16065
> > cylinders: 121601
> > total sectors: 1953525168
> > boundstart: 64
> > boundend: 1953520065
> > drivedata: 0
> > 
> > 16 partitions:
> > #                size           offset  fstype [fsize bsize  cpg]
> >   a:       1953519936               64  4.2BSD   8192 65536    1 # /bu
> >   c:       1953525168                0  4.2BSD   2048 16384    1
> > 
> > 
> > As you can see the "c" partition is not of type "unused", and some
> > commands complain of this.
> > 
> > I wasn't able to change this situation. I tried with "disklabel -E
> > sd2", "disklabel -d sd2", "disklabel -R sd2 proto" (with a proper
> > "proto" file), but nothing changed.
> > 
> > What is the proper way to handle this?
> > Please note that "a" partition contains data that must be preserved
> > (I umounted that partition before all disklabel commands).
> > 
> > The system is a 5.3 amd64, and sd2 is a normal SATA disk.
> > 
> > Thanks.
> > 
> 
> disklabel(8) contains a description of the 'z' command available
> in the -E mode. It should kill 'c' dead. Just add 'a' back with the
> same parameters it had brfore.
> 
> Not that Nick's solution isn't more fun!
> 
> .... Ken
> 

Or it could be a nifty snare in the kernel that is accidentally preserving
info that should not be preserved. This is probably not the best patch, but
it does let me use 'disklabel -e sd2' to set 'c' to 'unused'.

.... Ken

Index: subr_disk.c
===================================================================
RCS file: /cvs/src/sys/kern/subr_disk.c,v
retrieving revision 1.150
diff -u -p -r1.150 subr_disk.c
--- subr_disk.c 3 Jul 2013 15:21:40 -0000       1.150
+++ subr_disk.c 10 Aug 2013 03:23:26 -0000
@@ -655,6 +674,8 @@ setdisklabel(struct disklabel *olp, stru
                if (DL_GETPOFFSET(npp) != DL_GETPOFFSET(opp) ||
                    DL_GETPSIZE(npp) < DL_GETPSIZE(opp))
                        return (EBUSY);
+               if (i == RAW_PART)
+                       continue;
                /*
                 * Copy internally-set partition information
                 * if new label doesn't include it.             XXX

Reply via email to