Наконец-то сумел продвинуться со своим виртуалбоксом.
Как ни странно, помогло совершенно не связанное событие - пришлось помучаться с восстановлением загрузчика на копии боевго сервера, загруженной в виртуалку для поиска совершенно другого бага.
В общем, процесс установки на виртуалку выглядел так:
Загрузиться с диска в UEFI.
Установить с разбиением разделов вручную.
sda - GPT
sda1 - 120Mb EFI +boot
sda2 - 1.3Gb Linux Swap
sda3 - 8.5Gb Linux ext4 /
Загрузчик в /dev/sda
После установки система, скорее всего, нифига не загрузится, будет валиться в UEFI шелл. Пролечить просто.
Грузим систему в UEFI с LiveCD. Желательно той же версии, какой ставили на диск.
Открываем рутовую консоль.
Монтируем /dev/sda3 на /mnt/p3/
Перебиндиваем все системные устройства в /mnt/p3
mount -o bind /dev/ /mnt/p3/dev
mount -o bind /dev/pts /mnt/p3/dev/pts
mount -o bind /sys /mnt/p3/sys
mount -o bind /proc /mnt/p3/proc
Чрутимся в препарированную систему.
Делаем последнее телодвижение для запуска в космос.
mount /dev/sda1 /boot/efi
И взлетаем:
grub-install /dev/sda
По сути, всё, но не совсем. Ребутаем систему, убираем LiveCD.
По-прежнему падаем в UEFI шелл, но! Выходим из него и идём в Boot Management.
Добавляем новое устройство загрузки - HD0,0 partition 1 (там будет длинная невнятнся строка, просто выберите HDD, 1) - EFI - ubintu - grubx64.efi - ввести внятное описание в первую строку (Description) - да - да.
Идём в настройки Boot Order, выбираем список устройств и кнопками +/- подгоняем Grub EFI в начало списка.
Сохранить, перезагрузить... Оно работает. Может, не летает, но требуемый результат был достигнут.