Change partitioning scheme for zfs bootable disks to align with the wiki-entries by zol-upstream [0]:
* Still create a bios_boot partition in the beginning * Add 512M for future use as /boot/efi * Optionally leave `minfree` GB unpartitioned (e.g. for swap) * The actual ZFS partition * Leave 8M at the end, accounting for slight differences in disk size * change sgdisk command-order to get partitions aligned to 1MiB [0] https://github.com/zfsonlinux/zfs/wiki/Debian-Stretch-Root-on-ZFS Signed-off-by: Stoiko Ivanov <[email protected]> --- proxinstall | 41 +++++++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/proxinstall b/proxinstall index fac87ee..18679c6 100755 --- a/proxinstall +++ b/proxinstall @@ -937,34 +937,47 @@ sub partition_bootable_zfs_disk { syscmd("sgdisk -Z ${target_dev}"); my $hdsize = hd_size($target_dev); # size in blocks (1024 bytes) - my $hdgb = int($hdsize/(1024*1024)); - die "hardisk '$target_dev' too small (${hdsize}GB)\n" if $hdgb < 8; + my $minfree = defined($config_options->{minfree}) ? int($config_options->{minfree} * 1024*1024) : 0; + my $remaining_hdsize = $hdsize - $minfree; - # 1 - GRUB boot partition: 1M - # 2 - OS/Data partition - # 9 - ZFS reserved partition + my $hdgb = int($remaining_hdsize/(1024*1024)); + die "hardisk '$target_dev' too small (${hdgb}GB)\n" if $hdgb < 8; - my $grubbootdev = get_partition_dev($target_dev, 1); - my $osdev = get_partition_dev ($target_dev, 2); + # 3 - GRUB boot partition: 1M + # 2 - EFI partition: 512M + # 1 - OS/Data partition + # optional minfree unpartitioned space + # 9 - ZFS reserved partition 8M - my $pcmd = ['sgdisk', '-a1']; + my $os_size = $remaining_hdsize - 1024*522; #512M efi + 1M bios_boot +1M alignment + 8M ZFS-reserve - my $pnum = 1; - push @$pcmd, "-n$pnum:34:2047", "-t$pnum:EF02"; + my $grubbootdev = get_partition_dev($target_dev, 2); + my $osdev = get_partition_dev ($target_dev, 1); + + my $pcmd = ['sgdisk']; + + my $pnum = 3; + push @$pcmd, "-n$pnum:1M:+512M", "-t$pnum:EF00"; $pnum = 9; push @$pcmd, "-n$pnum:-8M:0", "-t$pnum:BF07"; - $pnum = 2; - push @$pcmd, "-n$pnum:2048:0", "-t$pnum:BF01", '-c', "$pnum:zfs"; + $pnum = 1; + push @$pcmd, "-n$pnum:513M:+${os_size}K", "-t$pnum:BF01", '-c', "$pnum:zfs"; push @$pcmd, $target_dev; - my $os_size = $hdsize - 1024 - 1024*8; - syscmd($pcmd) == 0 || die "unable to partition harddisk '${target_dev}'\n"; + $pcmd = ['sgdisk', '-a1']; + + $pnum = 2; + push @$pcmd, "-n$pnum:34:2047", "-t$pnum:EF02" , $target_dev; + + syscmd($pcmd) == 0 || + die "unable to create bios_boot partition '${target_dev}'\n"; + &$udevadm_trigger_block(); syscmd("dd if=/dev/zero of=$osdev bs=1M count=16") if -b $osdev; -- 2.11.0 _______________________________________________ pve-devel mailing list [email protected] https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
