More than 8 partitions
Jon Theil Nielsen
jontheil at gmail.com
Wed May 12 10:08:42 UTC 2010
2010/5/2 Christopher Key <cjk32 at cam.ac.uk>
> Jon Theil Nielsen wrote:
> > 2010/5/1 Christopher Key <cjk32 at cam.ac.uk>
> >
> >
> >> Jon Theil Nielsen wrote:
> >>
> >>> Hi
> >>>
> >>> I'm running 8.0-Release on an external usb hard drive. and have
> dual-boot
> >>> with FreeBSD on da0s2 and Windows XP on da0s1. I made a setup via
> >>>
> >> Sysinstall
> >>
> >>> with 7 partitions:
> >>>
> >>> /dev/da0s2a on / (ufs, local)
> >>> /dev/da0s2b (swap)
> >>> /dev/da0s2d on /var (ufs, local, soft-updates)
> >>> /dev/da0s2e on /tmp (ufs, local, soft-updates)
> >>> /dev/da0s2f on /usr (ufs, local, soft-updates)
> >>> /dev/da0s2h on /var/log (ufs, local, soft-updates)
> >>> /dev/da0s2g on /home (ufs, local, soft-updates)
> >>>
> >>> I have about 660 GB left unused on da0s2 that I would like to use for
> >>> backups. But I can't figure out how to create one more partition.
> >>> If i create a file for bsdlabel like
> >>>
> >>> # size offset fstype
> >>> i: * 0 4.2BSD
> >>>
> >>> I get the following error message: "line 2: partition name out of range
> >>>
> >> a-h:
> >>
> >>> i"
> >>> I have also tried with gpart:
> >>>
> >>> gpart add -s 500G -t freebsd -f x da0s2
> >>>
> >>> I get something like "gpart: index '9': No space left on device"
> >>>
> >>> I thought that 8.0 should support more than 8 partitions. Maybe it
> does,
> >>>
> >> but
> >>
> >>> then I don't know how to do.
> >>> Any ideas?
> >>>
> >>>
> >>>
> >> I believe that FreeBSD does support more than 8 partitions on a disk
> >> (apparently up to 20 using gpart), but that you need sufficient entries
> >> for these partitions to be created in the disklabel, viz.
> >>
> >> gpart create -n 20 ...
> >>
> >> Some testing seems to indicate that you can manually override this by
> >> changing by byte 0x28a of the disk from 0x08 to 0x14, and that bsdlabel
> >> / gpart will then allow you to create further partitions on the disk.
> >>
> >>
> >>
> >> Kind regards,
> >>
> >> Christopher Key
> >>
> >
> >
> > Thanks Christopher
> >
> > I am not sure if I understand all of if. And I wouldn't like to wipe the
> > drive to test if is possible to "mass produce" partitions like that.
> Could
> > be useful in another situation, though.
> >
> > My knowlodge of GEOM and its utilities is very limited. Since I have
> > succeded in creating the two slices with fdisk and subsequently populate
> > them with bsdlabel, my only problem is how to create the last partition
> from
> > the unpartioned space on da0s2. As mentioned in the beginning of this
> post,
> > I have tried with both bsdlabel (from a file) and by issuing the gpart
> add
> > command. With no luck. Would it be any help to give more specific about
> the
> > drive/slice? The output of df -h | grep dev/da0 is:
> >
> > /dev/da0s2a 3.9G 630M 2.9G 17% /
> > /dev/da0s2g 97G 160K 89G 0% /home
> > /dev/da0s2e 3.9G 129M 3.4G 4% /tmp
> > /dev/da0s2f 48G 6.6G 38G 15% /usr
> > /dev/da0s2d 9.7G 151M 8.8G 2% /var
> > /dev/da0s2h 3.9G 1.5M 3.6G 0% /var/log
> >
> > and of gpart show da0:
> >
> > => 0 1759551255 da0s2 BSD (839G)
> > 0 1048576 - free - (512M)
> > 1048576 8318064 2 freebsd-swap (4.0G)
> > 9366640 7303168 - free - (3.5G)
> > 16669808 8388608 1 freebsd-ufs (4.0G)
> > 25058416 20971520 4 freebsd-ufs (10G)
> > 46029936 8388608 5 freebsd-ufs (4.0G)
> > 54418544 104857600 6 freebsd-ufs (50G)
> > 159276144 209715200 7 freebsd-ufs (100G)
> > 936891344 8388608 8 freebsd-ufs (4.0G)
> > 377379952 1382171303 - free - (659G)
> >
> > and, finaly, of bsdlabel da0s2:
> >
> > # /dev/da0s2:
> > 8 partitions:
> > # size offset fstype [fsize bsize bps/cpg]
> > a: 8388608 16669808 4.2BSD 0 0 0
> > b: 8318064 1048576 swap
> > c: 1759551255 0 unused 0 0 # "raw" part,
> > don't edit
> > d: 20971520 25058416 4.2BSD 0 0 0
> > e: 8388608 46029936 4.2BSD 0 0 0
> > f: 104857600 54418544 4.2BSD 0 0 0
> > g: 209715200 159276144 4.2BSD 0 0 0
> > h: 8388608 368991344 4.2BSD 0 0 0
> >
> > In my desparate effort to understand these informations/data, i have put
> > them into a spreadsheet and rearranged them - including some of my own
> > calculations and assumptions.
> >
> > bsdlabel output - sorted by sector offset:
> >
> > # size offset (GB*)
> > c 1.759.551.255 0 839
> > b 8.318.064 1.048.576 4
> > a 8.388.608 16.669.808 4
> > d 20.971.520 25.058.416 10
> > e 8.388.608 46.029.936 4
> > f 104.857.600 54.418.544 50
> > g 209.715.200 159.276.144 100
> > h 8.388.608 368.991.344 4
> >
> > gpart show output - sorted by sector offset:
> >
> > (#) (size) (offset) (GB) (offset*) (GiB*) (i)
> > 1.048.576 0 0,5 0 1 free
> > b 8.318.064 1.048.576 4 1.048.576 4 2
> > 7.303.168 9.366.640 3,5 9.366.640 3 free
> > a 8.388.608 16.669.808 4 16.669.808 4 1
> > d 20.971.520 25.058.416 10 25.058.416 10 4
> > e 8.388.608 46.029.936 4 46.029.936 4 5
> > f 104.857.600 54.418.544 50 46.029.936 50 6
> > g 209.715.200 159.276.144 100 159.276.144 100 7
> > 1.382.171.303 377.379.952 659 368.991.344 659 free
> > h 8.388.608 936.891.344 4 1.759.551.255 4 8
> >
> > In the first place, I wondered why gpart would not let me add anoter
> > partiotion. There *should *be lots of free space left. But on closer
> > inspection, it seems that the 659 somehow is '"squezzed'" in. Don't
> really
> > know what all this is about. Allthough this might be a vaste of time,
> since
> > I kan copy, reslice/repartition and copy back, any more comments are
> > welcome.
> >
> > Regards,
> >
> I'm not very familiar with geom either, so my apologies if the
> terminology / detail is incorrect.
>
> I think that there are two issues at work here:
>
> Firstly, the size of the partition table. At the start of the da0s2
> there is a header, with a entries for partition information, i.e.
> offset, size, type etc. There are a fixed number of entries (8 are
> created by default), and as you create partitions, each of these entries
> gets used up. The error message "gpart: index '9': No space left on
> device", is a little bit misleading. It is reporting that all 8 entries
> have been used, and that there is nowhere to store the metadata for a
> 9th partition. Incidentally, the error message indicating that the
> desired partition wouldn't fit anywhere on the disk would have been
> "gpart: autofill: No space left on device"
>
> There are two ways round this. The first, only available when you are
> starting from scratch, is to pass "-n 20" to "gpart create", which
> instructs it to create 20 entries for partitions. The second, somewhat
> dubious method, is to manually edit this header, creating extra
> entries. By changing byte 0x28a of the disk from 0x08 to 0x14, you are
> effectively creating an extra 12 entries, which can then be used for
> partitions. This is a bit dangerous, as the extra 12 entries created
> haven't been initialised with any data. On a new, blank disk, freebsd
> appears to interpret the blank entry as meaning 'no partition defined',
> but I wouldn't want to guarantee this behaviour.
>
> It's possible that there are also other complications that I'm unaware
> of. Nevertheless, if you're prepared to rebuild the system anyway, I'd
> recommend giving it a try. Firstly, get a copy of the first 1024 bytes
> of the slice:
>
> dd if=/dev/da0s2 of=/tmp/hdr count=2
>
> Next, edit byte 0x28a (650) of this file, changing it from 0x08 to 0x14
> (or if you know that you only want to add one extra partition then 0x09
> might be safer). editors/hexedit will probably do what you need, or
> alternatively transfer the file to a Windows box and use something like
> frhed. Next write the data back to the disk:
>
> dd if=/tmp/hdr of=/dev/da0s2
>
> You should now find that gpart add will work.
>
> The second issue at hand is the fact that the free space is in the
> middle of the disk, with partition h following it. I don't know why the
> disk has ended up like this, but some testing suggests that gpart knows
> how to deal with this correctly.
>
>
> I hope this helps to explain whats going on.
>
> Kind regards,
>
> Christopher Key.
>
> Thanks Christopher
Unfortunately, I have not seen your reply until now. But I appreciate it
anyway. I think I'll start over like you suggest. From the beginning, I just
thought that bsdlabel could handle up to 26 partitions in 8.0-Release, but
obviously this is not the case. So I'll dd the existing partitions to
another drive, use gpart to create "enough" partitions and then dd the old
content back. I could easily use a standard disk layout, but the other
approach will add some to my FreeBSD knowledge..
Regards,
Jon
More information about the freebsd-questions
mailing list