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>