Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 26 Jun 2012 16:50:36 +0400
From:      "Andrey V. Elsukov" <bu7cher@yandex.ru>
To:        freebsd-current <freebsd-current@freebsd.org>,  freebsd-hackers <freebsd-hackers@freebsd.org>
Cc:        Doug Rabson <dfr@freebsd.org>, Pawel Jakub Dawidek <pjd@FreeBSD.org>, Andriy Gapon <avg@FreeBSD.org>
Subject:   [CFC/CFT] large changes in the loader(8) code
Message-ID:  <4FE9B01C.30306@yandex.ru>

next in thread | raw e-mail | index | archive | help
This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
--------------enig3DF35FE7979D7795EBCBB2D2
Content-Type: text/plain; charset=KOI8-R
Content-Transfer-Encoding: quoted-printable

Hi All,

Some time ago i have started reading the code in the sys/boot.
Especially i'm interested in the partition tables handling.
I found several problems:
1. There are several copies of the same code in the libi386/biosdisk.c
and common/disk.c, and partially libpc98/biosdisk.c.
2. ZFS probing is very slow, because the ZFS code doesn't know how many
disks and partitions the system has:
	http://www.freebsd.org/cgi/query-pr.cgi?pr=3D148296
	http://www.freebsd.org/cgi/query-pr.cgi?pr=3D161897
3. The GPT support doesn't check CRC and even doesn't know anything
about the secondary GPT header/table.

So, i have created the branch and committed the changes:
	http://svnweb.freebsd.org/base/user/ae/bootcode/
The patch is here:
	http://people.freebsd.org/~ae/boot.diff

What i already did:
1. The partition tables handling now is machine independent,
and it is compatible with the kernel's GEOM_PART implementation.
There is new API for disk drivers in the loader to get information
about partitions and tables:
        common/Makefile.inc
 	common/part.c
	common/part.h

2. The similar and general code from the disk drivers merged in the
disk.c:
        common/disk.c
        common/disk.h
        i386/libi386/libi386.h
        i386/libi386/biosdisk.c
        userboot/test/test.c
        userboot/userboot/userboot_disk.c
        userboot/userboot.h
3. ZFS code now uses new API and probing on the systems with many disks
should be greatly increased:
        zfs/zfs.c
        i386/loader/main.c
4. The gptboot now searches the backup GPT header in the previous sectors=
,
when it finds the "GEOM::" signature in the last sector. PMBR code also
tries to do the same:
        common/gpt.c
        i386/pmbr/pmbr.s

5. Also the pmbr image now contains one fake partition record.
When several first sectors are damaged the kernel can't detect GPT
(see RECOVERING section in the gpart(8)). We can restore PMBR with dd(1)
command, but the old pmbr image has an empty partition table and
loader doesn't able to boot from GPT, when there is no partition record
in the PMBR. Now it will be able. When pmbr is installed via 'gpart bootc=
ode'
command, the kernel correctly modifies this partition record. So, this is=
 only
for the first rescue step.

6. I have changed userboot interface. I guess there is none consumers exc=
ept
the one test program. But if it isn't that, i can make it compatible.

Any comments are welcome.

--=20
WBR, Andrey V. Elsukov



--------------enig3DF35FE7979D7795EBCBB2D2
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="signature.asc"

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (MingW32)

iQEcBAEBAgAGBQJP6bAlAAoJEAHF6gQQyKF6yvwH/1+awIGkwRcAA/sKs1NGoEt7
85mZZ2t8KUKUy0Yjxe4p8doCVHQoeppBjEUChTW1yWncLWstOuoO/JQ8nUi8mlH5
WetoHH4dtShSuuaXB+N2dMv6g3ETyo0/uIMqX18V4FniLUXBwFjP2UnMc6JMJDkZ
L7cUgTnvbeGU08GU9L6jDwA6xN/nwMSYN0U9fbGYbNhabtIL3JNb1MMsUAAwdijB
a4EPPD3k4ZTOW/DBI+NQeYjpi3q0bEO1lmvEB/rSOq3ivMLxZHtV+Z9MMpEiPWTI
q4eayZFalrT70RVjG/0Vxy3w0ISQcE5yfWMA0U2GLLt8k9kqPtePV8CH7pQXaHo=
=1xLc
-----END PGP SIGNATURE-----

--------------enig3DF35FE7979D7795EBCBB2D2--



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