21 мая 2014 г.

Подготовка образов HDD с DOS для IPMI

Как удаленно прошить BIOS системной платы или контроллер через IPMI?
В большинстве случаев для этого нужен DOS, но некоторые контроллеры нужно шить в EFI shell. При наличии физического доступа к серверу всегда есть дежурная флешка с DOS. Для удаленного способа нам придется подготовить образ загрузочного HDD с DOS, это проще и удобнее, чем готовить ISO-образ. IPMI в современных платах Supermicro может использовать в качестве Virtual Media образы HDD.
Тривиальная задача, но начинающих администраторов может поставить в тупик. Для начала нам понадобится дистрибутив MSDOS (некоторые платы не шьются под FreeDOS) и любой гипервизор. В данном случае будем использовать VirtualBox, но подойдет, естественно, любой, где запускается DOS и с которым вам удобно работать. Версию MSDOS лучше всего взять с поддержкой длинных имен, например 7.1.
Создаем ВМ с диском, достаточным для размещения образа BIOS. Размер образа для современных плат Supermicro X9 — 16МиБ, можно создать диск с небольшим запасом — 20МиБ. Добавляем установочный ISO c DOS.
Уверен, что с такой увлекательной и сложной задачей, как установка DOS вы можете справиться самостоятельно. Финальная задача — получить удобный способ работы с образом: добавлять/убирать из него файлы с прошивками. IMHO, это удобно делать в Linux. Для начала нужно конвертировать образ диска из формата VDI в простой "сырой" образ:
VBoxManage clonehd -format RAW dos.vdi dos.raw
Далее возникает небольшая проблема. Сразу смонтировать образ не получится, так как монтировать нужно не диск целиком, а раздел на нем. Для этого нужно узнать его смещение. Сделать это можно при помощи parted. Командой unit задаем единицу измерения (в байтах) и командой print выводим информацию о разделах.
[root@stand ~]# parted dos.img
GNU Parted 2.1
Using /root/dos.img
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) unit B
(parted) print
Model:  (file)
Disk /root/dos.img: 20971520B
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End        Size       Type     File system  Flags
 1      32256B  20643839B  20611584B  primary  fat16        boot

(parted)
Нужное смещение — 32256 байт. Можно монтировать:
mkdir /mnt/disk1
mount -o loop,offset=32256 -t vfat dos.img /mnt/disk1
Копируем прошивки и еще какие-нибудь полезности (например, VC или NC, прописываем автозапуск в autoexec.bat), размонтируем образ, и можно грузиться:
При большом количестве администрируемых серверов можно грузить образы при помощи PXELinux, благо он поддерживает загрузку сжатых через gzip образов.