From 417361f8b794ffe433f1400e043c6bd6e9778ffc Mon Sep 17 00:00:00 2001 From: Francis Rowe Date: Sat, 02 Jan 2016 11:59:41 -0500 Subject: grub.cfg: eliminate use of * wildcard This causes huge boot delays, because GRUB is extremely slow at enumerating the list of available devices/partitions. --- diff --git a/resources/grub/config/menuentries/common.cfg b/resources/grub/config/menuentries/common.cfg index feaefe6..b64b4de 100644 --- a/resources/grub/config/menuentries/common.cfg +++ b/resources/grub/config/menuentries/common.cfg @@ -11,10 +11,15 @@ menuentry 'Load Operating System (incl. fully encrypted disks) [o]' --hotkey='o # a) Try RAID first, they might be used (accross multiple (raw) devices) # b) Try MBR/GPT partitions at last, one might still conviniently uses a single partition - for d in md/0 ahci0 ahci1 (ahci0,*) (ahci1,*); do + for d in md/0 ahci0 ahci1; do # prompt user for passphrase if LUKS header is found cryptomount ${d} done + for j in 1 2 3 4 5 6 7 8 9; do + for d in ahci0 ahci1; do + cryptomount "${d},${j}" + done + done # (This way, we only need to scan for encrypted data once while covering every possible disk setup, # be it BTRFS/ZFS/ext4/etc. (on LUKS) (on RAID) on/across raw devices/MBR/GPT @@ -22,8 +27,8 @@ menuentry 'Load Operating System (incl. fully encrypted disks) [o]' --hotkey='o # 2. Look for user config. If the above routine successfully decrypted a LUKS container, its content # will be searched before everything else for obvious reasons. Regardless of this, the devices' # hirachy stays the same. - for d in crypto0 (crypt0,*) md/0 ahci0 ahci1 (ahci0,*) (ahci1,*); do - set root=${d} + for d in crypto0 md/0 ahci0 ahci1; do + set root="${d}" # a) Check possible file locations... for p in boot/grub/libreboot_ grub/libreboot_ boot/grub/ grub/ boot/grub2 grub2/; do if [ -f "/${p}grub.cfg" ]; then @@ -33,6 +38,20 @@ menuentry 'Load Operating System (incl. fully encrypted disks) [o]' --hotkey='o fi done done + for j in 1 2 3 4 5 6 7 8 9; do + for d in crypto0 ahci0 ahci1; do + set root="${d},${j}" + # a) Check possible file locations... + for p in boot/grub/libreboot_ grub/libreboot_ boot/grub/ grub/ boot/grub2 grub2/; do + if [ -f "/${p}grub.cfg" ]; then + # b) And eventually try to load the config. Using ESC one can still exit and revert back to + # libreboot's menu. + configfile /${p}grub.cfg + fi + done + done + done + # prompt user for passphrase if LUKS header is found but try using external keyfiles first search -n -f /keyfile --set=kf --hint usb0, --hint usb1, if [ $? = 0 ]; then @@ -44,8 +63,14 @@ menuentry 'Load Operating System (incl. fully encrypted disks) [o]' --hotkey='o cryptomount ${kf} ${d} done # 3. Do the same routine again, but for possibly decrypted data this time. - for d in crypto0 (crypt0,*); do - set root=${d} + set root=crypto0 + for p in boot/grub/libreboot_ grub/libreboot_ boot/grub/ grub/ boot/grub2 grub2/; do + if [ -f "/${p}grub.cfg" ]; then + configfile /${p}grub.cfg + fi + done + for j in 1 2 3 4 5 6 7 8 9; do + set root=crypto0 for p in boot/grub/libreboot_ grub/libreboot_ boot/grub/ grub/ boot/grub2 grub2/; do if [ -f "/${p}grub.cfg" ]; then configfile /${p}grub.cfg -- cgit v0.9.1