You are on page 1of 40

GUID Partition Table

• Unified Extensible Firmware Interface (UEFI)


• GUID Partition Table (GPT)
• gpart(8)
• Root On ZFS
• FreeBSD9 – bsdinstall
• Soft-Update Journaling (SU+J)
Computer Center, CS, NCTU
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)

2
Computer Center, CS, NCTU
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

3
Computer Center, CS, NCTU
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)

4
Computer Center, CS, NCTU
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”

5
Computer Center, CS, NCTU
GUID Partition Table – (4)

 Partition header table (LBA 1)


Offset Length Contents
0 8 bytes Signature ("EFI PART", 45 46 49 20 50 41 52 54)
Revision (For GPT version 1.0 (through at least UEFI version 2.3.1), the value is
8 4 bytes
00 00 01 00)
12 4 bytes Header size in little endian (in bytes, usually 5C 00 00 00 meaning 92 bytes)
16 4 bytes CRC32 of header (0 to header size), with this field zeroed during calculation
20 4 bytes Reserved; must be zero
24 8 bytes Current LBA (location of this header copy)
32 8 bytes Backup LBA (location of the other header copy)
40 8 bytes First usable LBA for partitions (primary partition table last LBA + 1)
48 8 bytes Last usable LBA (secondary partition table first LBA - 1)
56 16 bytes Disk GUID (also referred as UUID on UNIXes)
72 8 bytes Partition entries starting LBA (always 2 in primary copy)
80 4 bytes Number of partition entries
84 4 bytes Size of a partition entry (usually 128)
88 4 bytes CRC32 of partition array
92 * Reserved; must be zeroes for the rest of the block (420 bytes for a 512-byte LBA)
6
Computer Center, CS, NCTU
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

7
Computer Center, CS, NCTU
GUID Partition Table – (6)

 Partition entries (LBA 2~33)


• 128 bytes for each partition entry

Offset Length Contents


0 16 bytes Partition type GUID
16 16 bytes Unique partition GUID
32 8 bytes First LBA (little-endian)
40 8 bytes Last LBA (inclusive, usually odd)
48 8 bytes Attribute flags (e.g. bit 60 denotes read-only)
56 72 bytes Partition name (36 UTF-16LE code units)
128 Total

8
Computer Center, CS, NCTU
GUID Partition Table – (7)

 Partition type GUID

freebsd-boot 83BD6B9D-7F41-11DC-BE0B-001560B84F0F
freebsd 516E7CB4-6ECF-11D6-8FF8-00022D09712B
freebsd-swap 516E7CB5-6ECF-11D6-8FF8-00022D09712B
freebsd-ufs 516E7CB6-6ECF-11D6-8FF8-00022D09712B
freebsd-vinum 516E7CB8-6ECF-11D6-8FF8-00022D09712B
freebsd-zfs 516E7CBA-6ECF-11D6-8FF8-00022D09712B

9
Computer Center, CS, NCTU
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

10
Computer Center, CS, NCTU
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

11
Computer Center, CS, NCTU
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

12
Computer Center, CS, NCTU
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

13
Computer Center, CS, NCTU
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/
14
Computer Center, CS, NCTU
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
15
Computer Center, CS, NCTU
Root On ZFS – (3)

 Installing FreeBSD to the ZFS filesystem


• Create ZFS filesystem hierarchy

16
Computer Center, CS, NCTU
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
…
17
Computer Center, CS, NCTU
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

18
Computer Center, CS, NCTU
Root On ZFS – (6)

 gpart show
# 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
# swapinfo
Device 1K-blocks Used Avail Capacity
/dev/gpt/swap0 2097152 0 2097152 0%

19
Computer Center, CS, NCTU
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

20
Computer Center, CS, NCTU
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
21
Computer Center, CS, NCTU
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)

22
Computer Center, CS, NCTU
bsdinstall (FreeBSD 9) – (1)

 http://www.freebsd.org/doc/handbook/bsdinstall.html

23
Computer Center, CS, NCTU
bsdinstall (FreeBSD 9) – (2)

 Install、Shell、Live CD

24
Computer Center, CS, NCTU
bsdinstall (FreeBSD 9) – (3)

 Setting hostname

25
Computer Center, CS, NCTU
bsdinstall (FreeBSD 9) – (4)

 Selecting components to install

26
Computer Center, CS, NCTU
bsdinstall (FreeBSD 9) – (5)

 Partitioning methods
• Shell – gpart(8)、fdisk(8)、bsdlabel(8)

27
Computer Center, CS, NCTU
bsdinstall (FreeBSD 9) – (6)

 Guided Partitioning
• Select disk
• Replace { ad | da }
by ada
• { ad | da }’s are linked
to ada’s

• How to partition the disk


 Entire Disk
 Partition – use free space

28
Computer Center, CS, NCTU
bsdinstall (FreeBSD 9) – (7)

 Guided Partitioning result

29
Computer Center, CS, NCTU
bsdinstall (FreeBSD 9) – (8)

 Manual Partitioning

30
Computer Center, CS, NCTU
bsdinstall (FreeBSD 9) – (9)

 Choose a partitioning scheme


• GPT、MBR
• DON’T use BSD!!!

31
Computer Center, CS, NCTU
bsdinstall (FreeBSD 9) – (10)

 Add partitions
• freebsd-boot
 FreeBSD boot code. This partition must be first on the disk.

32
Computer Center, CS, NCTU
bsdinstall (FreeBSD 9) – (11)

 Final confirmation

33
Computer Center, CS, NCTU
bsdinstall (FreeBSD 9) – (12)

 Fetching  Checksum Verification  Extraction

34
Computer Center, CS, NCTU
bsdinstall (FreeBSD 9) – (13)

 Post-installation
• root password
• Network interfaces
 Wired – Static IPv4 / DHCP / Static IPv6 / SLAAC
 Wireless
 DNS
• Time Zone
• Services
• Add users

35
Computer Center, CS, NCTU
bsdinstall (FreeBSD 9) – (14)

 Final configuration

36
Computer Center, CS, NCTU
Soft Updates Journaling – (1)

 To maintain filesystem metadata consistency


• Synchronous write
• Non-Volatile RAM
• Journaling
• COW
• Soft Updates

37
Computer Center, CS, NCTU
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

38
Computer Center, CS, NCTU
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

39
Computer Center, CS, NCTU
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

40

You might also like