svn commit: r229049 - head/sbin/bsdlabel
Maxim Sobolev
sobomax at FreeBSD.org
Sat Dec 31 00:09:33 UTC 2011
Author: sobomax
Date: Sat Dec 31 00:09:33 2011
New Revision: 229049
URL: http://svn.freebsd.org/changeset/base/229049
Log:
Use in-label sectorsize to determine position of the label when
writing label into a file image. The most common use - putting disklabel
into ISO file. Before this change the label would always go to
the offset 512, while geom_part code expects it to be in the 1st
sector (i.e. 2048 incase of ISO). BSD disklabels provide good and
lightweight way to logically split livecds. It is non-intrusive as
far as ISO9660 goes (both boot-wise and metadata-wise) and
completely transparent to anything but BSD, so you can have
BSD-specific area appended after regular ISO.
And with a little bit of GEOM trickery you can do even more
interesting stuff with it.
For example we make "hybrid" bootable CDs using this method.
We create bootable ISO with kernel and such and append UFS
image compressed with UZIP and it works like a charm. We put
label based on the offsef of the BSD part into the ISO. The kernel
boots off normal ISO9660 part, tastes label attaches it,
tastes UZIP, attaches it and finally mounts UFS using GEOM_LABEL.
This provides much better way of eliminating waste than doing
"crunched" build.
MFC after: 1 month
Modified:
head/sbin/bsdlabel/bsdlabel.c
Modified: head/sbin/bsdlabel/bsdlabel.c
==============================================================================
--- head/sbin/bsdlabel/bsdlabel.c Sat Dec 31 00:03:13 2011 (r229048)
+++ head/sbin/bsdlabel/bsdlabel.c Sat Dec 31 00:09:33 2011 (r229049)
@@ -400,7 +400,7 @@ writelabel(void)
for (i = 0; i < lab.d_npartitions; i++)
if (lab.d_partitions[i].p_size)
lab.d_partitions[i].p_offset += lba_offset;
- bsd_disklabel_le_enc(bootarea + labeloffset + labelsoffset * secsize,
+ bsd_disklabel_le_enc(bootarea + labeloffset + labelsoffset * lab.d_secsize,
lp);
fd = open(specname, O_RDWR);
@@ -434,7 +434,7 @@ writelabel(void)
gctl_ro_param(grq, "class", -1, "BSD");
gctl_ro_param(grq, "geom", -1, pname);
gctl_ro_param(grq, "label", 148+16*8,
- bootarea + labeloffset + labelsoffset * secsize);
+ bootarea + labeloffset + labelsoffset * lab.d_secsize);
errstr = gctl_issue(grq);
if (errstr != NULL) {
warnx("%s", errstr);
More information about the svn-src-head
mailing list