Загрузка с внутреннего SATA порта HPE Microserver Gen8
Всплыла одна интересная особенность сервера HPE Microserver Gen8. Пока система грузилась с жёсткого диска, который был установлен в корзину — всё было отлично. Но тут я решил добавить в сервер SSD под систему и подключить его в внутреннему SATA порту, который изначально предназначался для подключения DVD-привода. И выяснилось, что система умеет грузиться только с ПЕРВОГО по счёту жёсткого диска, и если SSD подключить к внутреннему порту и вставить в корзину ещё 4 диска, то он станет пятым. Впрочем, сервер умеет грузиться ещё с трёх мест: внешних USB-портов, внутреннего USB-порта на материнской плате и microSD-карты. Эту особенность мы и используем для обхода ограничений, установив загрузчик операционной системы на USB-флэшку.

MicroSD слот, USB-порт и SATA-порт на материнской плате сервера:

Нам понадобится любая ненужная USB флэшка. Так как на ней будет располагаться только загрузчик GRUB, то в процессе работы на неё не будет производиться никаких записей, поэтому за ресурс можно не переживать. Я взял давно лежащую без дела флэшку на 4 ГБ.
Извлекаем из корзины все диски и подключаем SSD к внутреннему SATA порту. Сам SSD я разместил в верхней части сервера в отсеке для DVD-привода:

Кстати, при подключении ждал ещё один сюрприз: на блоке питания не было провода питания SATA — вместо него предлагался Molex для подключения FDD… Ага, вот такой:

Поэтому, вооружившись паяльником, я просто заменил этот разъём на стандартный SATA.
Как обычно устанавливаем систему на SSD — здесь никаких проблем не возникло. Далее подключаем флэшку к ВНЕШНЕМУ USB-порту и выполняем следующие команды уже из установленной системы:
- Обнуляем содержимое флэшки. (ВНИМАНИЕ! Удостоверьтесь, что у вас флэшка тоже обозначается как /dev/sdb, иначе исправьте команду)
# dd if=/dev/zero of=/dev/sdb
2. Создаём на ней раздел размером 128 МБ:
# fdisk /dev/sdb
Command: Нажимаем "n".
Partition type: выбираем "p".
Partition number: нажимаем Enter.
First sector: нажимаем Enter.
Last sector: Вводим +128M
3. Там же, делаем раздел загрузочным:
Command (m for help): a
Selected partition 1
The bootable flag on partition 1 is enabled now.
4. Проверяем, что всё нормально:
Command (m for help): p
Disk /dev/sdb: 3,73 GiB, 4007657472 bytes, 7827456 sectors
Disk model: -power
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xefb6449b
Device Boot Start End Sectors Size Id Type
/dev/sdb1 * 2048 264191 262144 128M 83 Linux
4. Записываем изменения на накопитель:
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
5. Создаём файловую систему:
# mkfs -t ext2 /dev/sdb1
6. Монтируем ФС и создаём необходимые каталоги:
# mkdir /tmp/usb
# mount /dev/sdb1 /tmp/usb
# mkdir /tmp/usb/boot
7. Устанавливаем GRUB:
# grub-install --boot-directory=/tmp/usb/boot /dev/sdb
8. Обновляем конфигурацию GRUB:
# update-grub --output=/tmp/usb/boot/grub/grub.cfg
При необходимости в файле grub.cfg затем меняем параметры загрузки или время ожидания команды в загрузочном меню.
9. Вставляем флэшку во ВНУТРЕННИЙ USB-порт на материнской плате и перезагружаем сервер.
10. В RBSU заходим в System Options —> USB options —> Removable Flash Media Boot Sequence и выбираем пункт «Internal DriveKeys First«:

Также заходим в пункт меню Standard Boot Order (IPL):

И там устанавливаем следующий порядок загрузки (главное, чтобы USB DriveKey находился выше Hard Drive):

11. Выходим из RBSU, проверяем, что система загружается нормально.
12. При необходимости возвращаем диски в корзину.