420 likes | 824 Views
GUID Partition Table. Unified Extensible Firmware Interface (UEFI) GUID Partition Table (GPT) gpart(8) Root On ZFS FreeBSD9 – bsdinstall Soft-Update Journaling (SU+J). Unified Extensible Firmware Interface. BIOS limitations 16-bit processor mode 1MB addressable space UEFI advantages
E N D
GUID Partition Table Unified Extensible Firmware Interface (UEFI) GUID Partition Table (GPT) gpart(8) Root On ZFS FreeBSD9 – bsdinstall Soft-Update Journaling (SU+J)
Unified Extensible Firmware Interface • BIOS limitations • 16-bit processor mode • 1MB addressable space • UEFI advantages • UEFI v2.3.1 in April 2011 • Disk device compatibility (GUID Partition Table) • Processor compatibility (x86, x64, ARM)
GUID Partition Table – (1) • Limitation of MBR partition table • Partition record • active(1)、first CHS(3)、type(1)、last CHS(3)、start LBA(4)、size(4) • Maximum capacity • (232-1) x 512 bytes ~ 241 bytes = 2TBytes • GPT • Maximum capacity: 8ZBytes (273 bytes) • Used on some BIOS system
GUID Partition Table – (2) • GPT • LBA 0: Legacy MBR • LBA 1: GPT Header • LBA 2~33: Partition Entries • 128 partitions • LBA 34~: Partitions • LBA -34 ~ -1: Secondary GPT data • Misaligned block • SSD (1K LBA) • WD (4K sector)
GUID Partition Table – (3) • Legacy MBR (LBA 0) • A single partition of type 0xEE, and of whole disk size (max 2T) • For OSes which cannot read GPT: unknown partition, no space • For GPT-aware OSes: check the “protective MBR”
GUID Partition Table – (4) • Partition header table (LBA 1)
GUID Partition Table – (5) • Partition header table (LBA 1) # dd if=/dev/ada0 bs=512 count=1 skip=1 | hd 00000000 45 46 49 20 50 41 52 54 00 00 01 00 5c 00 00 00 |EFI PART....\...| 00000010 e6 f0 27 96 00 00 00 00 01 00 00 00 00 00 00 00 |..'.............| 00000020 2f 60 38 3a 00 00 00 00 22 00 00 00 00 00 00 00 |/`8:....".......| 00000030 0e 60 38 3a 00 00 00 00 7f a3 90 90 46 b4 de 11 |.`8:........F...| 00000040 8e b8 00 21 85 12 22 74 02 00 00 00 00 00 00 00 |...!.."t........| 00000050 80 00 00 00 80 00 00 00 e0 9d 1a 52 00 00 00 00 |...........R....| 00000060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00000200
GUID Partition Table – (6) • Partition entries (LBA 2~33) • 128 bytes for each partition entry
GUID Partition Table – (7) • Partition type GUID
FreeBSD – gpart (1) • gpart(8) • Control utility for the disk partitioning GEOM class (ad0) • GEOM_PART_MBR (ad0 ad0s1) • GEOM_PART_BSD (ad0s1 ad0s1a) • GEOM_PART_GPT (ad0 ad0p1) • gpart create -s mbr ad0 • gpart add -t freebsd ad0 (ad0 ad0s1) • gpart create -s bsd ad0s1 • gpart create -s gpt ad0 • gpart destroy [ -F ] ad0 • -F: forced destroying of the partition table
FreeBSD – gpart (2) • gpart(8) • gpart add -t type [ … ] ad0 • type: freebsd-boot, freebsd-swap, freebsd-ufs, freebsd-zfs, freebsd • -b start • -s size • -a alignment: -a 4k for 4K-sector HDD • -i index • -l label: used on partitioning schemes that support partition labels • gpart delete –i index ad0 • gpart show [ -l | -r ] [ -p ] ad0 • -l: print partition labels instead of partition type • -r: show GUID • -p: show provider names instead of partition indexes
FreeBSD – gpart (3) • gpart(8) • gpart bootcode [ -b bootcode ] [ -p partcode -i index ] ad0 • -b: embed bootstrap code into the partitioning scheme’s metadata • -p: write bootstrap code into a partition • Bootstraping for MBR scheme • /boot/mbr or /boot/boot0 in partition table’s metadata • /boot/mbr searches partition with active attribute • /boot/boot0 has a boot manager • /boot/boot in BSD partition table’s metadata • Bootstraping for GPT scheme • /boot/pmbr in the first disk sector (Protective MBR) • /boot/pmbr searches the freebsd-boot partition • /boot/gptboot or /boot/gptzfsboot in freebsd-boot partition • /boot/gptboot searches the freebsd-ufs partition to run /boot/loader • /boot/gptzfsboot searches the freebsd-zfs partition to run /boot/zfsloader
FreeBSD – gpart (4) • gpart(8) • gpart modify -i index [ -l label ] [ -t type ] ad0 • gpart resize -i index [ -a alignment ] [ -s size ] ad0 • gpart { set | unset } -a attrib -i index ad0 • Set "Active" for MBR scheme • gpart set -a active –i 1 ad0 • gpart { backup | restore } ad0 • gpart recover ad0 • GPT-only • gpart { command … -f x | commit | undo } ad0
Root On ZFS – (1) • Root On ZFS • Using MBR disk • UFS /boot • FreeBSD-ZFS partition in a FreeBSD MBR slice • dd if=/mnt2/boot/zfsboot of=/dev/ad0s3 count=1 • dd if=/mnt2/boot/zfsboot of=/dev/ad0s3a skip=1 seek=1024 • FreeBSD MBR slice • Fails to boot • Using GPT disk • Disadvantage • Can’t dual boot using FreeBSD commercial bootcode • Using GPT-aware grub setup and hybrid GPT/MBR • http://wiki.freebsd.org/RootOnZFS now for 8.x • 9.0 http://www.aisecure.net/2011/05/01/root-on-zfs-freebsd-current/
Root On ZFS – (2) • Creating a bootable ZFS Filesystem • Create GPT disk • gpart create -s gpt ad0 • Create the boot, swap and zfs partitions • gpart add -s 64k -t freebsd-boot ad0 • gpart add -s 4g -t freebsd-swap -l swap0 ad0 • gpart add -t freebsd-zfs -l disk0 ad0 • Install the Protected MBR (pmbr) and gptzfsboot loader • gpart bootcode -b pmbr -p gptzfsboot -i 1 ad0 • Load ZFS kernel module • kldload zfs • Create ZFS Pool zroot • zpool create zroot /dev/gpt/disk0 • zpool set bootfs=zroot zroot
Root On ZFS – (3) • Installing FreeBSD to the ZFS filesystem • Create ZFS filesystem hierarchy
Root On ZFS – (4) • Installing FreeBSD to the ZFS filesystem • Install FreeBSD to zroot • Manually install base, kernel(s), lib32, games, doc, … • Make /var/empty readonly • zfs set readonly=on zroot/var/empty • Manually configure • chroot • /etc/rc.conf • hostname, networks, zfs_enable, sshd, ntpd, … • /boot/loader.conf • zfs_load, vfs.root.mountfrom • root password • Time zone • …
Root On ZFS – (5) • Installing FreeBSD to the ZFS filesystem • Install zpool.cache to the ZFS filesystem • zpool export zroot • zpool import –o cachefile=/tmp/zpool.cache zroot • Copy /tmp/zpool.cache into zroot/boot/zfs/ • Finish install • Create /etc/fstab • swap • Set mount points for zfs filesystems • zfs set mountpoint=blah zroot/blah • Alternatively, you can specify these in /etc/fstab
Root On ZFS – (6) • gpart show • swapinfo # gpart show => 34 83886013 ada0 GPT (40G) 34 128 1 freebsd-boot (64k) 162 4194304 2 freebsd-swap (2.0G) 4194466 79691581 3 freebsd-zfs (38G) # swapinfo Device 1K-blocks Used Avail Capacity /dev/gpt/swap0 2097152 0 2097152 0%
Root On ZFS – (7) • zpool status -v # zpool status -v pool: zroot state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM zroot ONLINE 0 0 0 ada0p3 ONLINE 0 0 0 errors: No known data errors
Root On ZFS – (8) • zfs list # zfs list NAME USED AVAIL REFER MOUNTPOINT zroot 657M 36.5G 344M legacy zroot/home 31K 36.5G 31K legacy zroot/tmp 36K 36.5G 36K /tmp zroot/usr 311M 36.5G 311M /usr zroot/usr/ports 95K 36.5G 33K /usr/ports zroot/usr/ports/distfiles 31K 36.5G 31K /usr/ports/distfiles zroot/usr/ports/packages 31K 36.5G 31K /usr/ports/packages zroot/usr/src 31K 36.5G 31K /usr/src zroot/var 461K 36.5G 126K /var zroot/var/crash 31.5K 36.5G 31.5K /var/crash zroot/var/db 116K 36.5G 85K /var/db zroot/var/db/pkg 31K 36.5G 31K /var/db/pkg zroot/var/empty 31K 36.5G 31K /var/empty zroot/var/log 45K 36.5G 45K /var/log zroot/var/mail 31K 36.5G 31K /var/mail zroot/var/run 48.5K 36.5G 48.5K /var/run zroot/var/tmp 32K 36.5G 32K /var/tmp
Root On ZFS – (9) • mount # mount zroot on / (zfs, local, noatime) devfs on /dev (devfs, local, multilabel) zroot/tmp on /tmp (zfs, local, nosuid) zroot/usr on /usr (zfs, local, noatime) zroot/usr/ports on /usr/ports (zfs, local, noatime, nosuid) zroot/usr/ports/distfiles on /usr/ports/distfiles (zfs, local, noatime, noexec, nosuid) zroot/usr/ports/packages on /usr/ports/packages (zfs, local, noatime, noexec, nosuid) zroot/usr/src on /usr/src (zfs, local, noatime, noexec, nosuid) zroot/var on /var (zfs, local, noatime) zroot/var/crash on /var/crash (zfs, local, noatime, noexec, nosuid) zroot/var/db on /var/db (zfs, local, noatime, noexec, nosuid) zroot/var/db/pkg on /var/db/pkg (zfs, local, noatime, nosuid) zroot/var/empty on /var/empty (zfs, local, noatime, noexec, nosuid, read-only) zroot/var/log on /var/log (zfs, local, noatime, noexec, nosuid) zroot/var/mail on /var/mail (zfs, local, noatime, noexec, nosuid) zroot/var/run on /var/run (zfs, local, noatime, noexec, nosuid) zroot/var/tmp on /var/tmp (zfs, local, nosuid)
bsdinstall (FreeBSD 9) – (1) • http://www.freebsd.org/doc/handbook/bsdinstall.html
bsdinstall (FreeBSD 9) – (2) • Install、Shell、Live CD
bsdinstall (FreeBSD 9) – (3) • Setting hostname
bsdinstall (FreeBSD 9) – (4) • Selecting components to install
bsdinstall (FreeBSD 9) – (5) • Partitioning methods • Shell – gpart(8)、fdisk(8)、bsdlabel(8)
bsdinstall (FreeBSD 9) – (6) • Guided Partitioning • Select disk • Replace { ad | da } by ada • { ad | da }’s are linkedto ada’s • How to partition the disk • Entire Disk • Partition – use free space
bsdinstall (FreeBSD 9) – (7) • Guided Partitioning result
bsdinstall (FreeBSD 9) – (8) • Manual Partitioning
bsdinstall (FreeBSD 9) – (9) • Choose a partitioning scheme • GPT、MBR • DON’T use BSD!!!
bsdinstall (FreeBSD 9) – (10) • Add partitions • freebsd-boot • FreeBSD boot code. This partition must be first on the disk.
bsdinstall (FreeBSD 9) – (11) • Final confirmation
bsdinstall (FreeBSD 9) – (12) • Fetching Checksum Verification Extraction
bsdinstall (FreeBSD 9) – (13) • Post-installation • root password • Network interfaces • Wired – Static IPv4 / DHCP / Static IPv6 / SLAAC • Wireless • DNS • Time Zone • Services • Add users
bsdinstall (FreeBSD 9) – (14) • Final configuration
Soft Updates Journaling – (1) • To maintain filesystem metadata consistency • Synchronous write • Non-Volatile RAM • Journaling • COW • Soft Updates
Soft Updates Journaling – (2) • Ordering constrains • Name in on-disk directory must be deleted • Deallocate on-disk inode • Release file’s blocks to free-space bitmap • Soft Updates • Dependency structures • Only inconsistencies • Blocks marked in use that are free • Inodes marked in use that are free
Soft Updates Journaling – (3) • Soft Updates Journaling (SUJ, SU+J) • Only need to journal operations that orphan resources • Increased link count • Decreased link count • … • Need a maximum 16Mb • .sujournal (a 32Mb file…) • Recovery steps • Scan the journal • Modify link counts • Free inodes with zero count or unlinked • Free unallocated blocks
Soft Updates Journaling – (4) • First appeared in 9.0-CURRENT (r207141) in April 2010 • Now 9.0-RC3 … • Enable SU+J • newfs –j … • tunefs –j { enable | disable } for SUJ • Different from gjournal (-J) • tunefs –J { enable | disable } for gjournal