あおしまの日記

あおしまさんの日記らしいです。個人的に興味がある事を時々書きます。スマートウォッチPebble日本語パックを作成、公開しています。

HP microserver gen8の起動

HP microserver gen8を購入。

HP microserver gen8の中古が手頃な値段*1になっていたので購入してみた。

この機械にシステム用のHDDを積むには、ドライブベイに入っている薄型DVD-ROMを
置き換えるしかありません。配線を最大に利用するには、薄型ドライブケースに
HDD/SSDを入れるのがスマートでしょう。私は以下を使いました。

このドライブに向けて、UbuntuServer20.04LTSを導入しました。

ただし、この機種が起動できるのは

からだけで、ドライブベイにつながるSATAケーブルの先にあるHDD/SSDドライブからは起動できません。
という事は、先にインストールしたUbuntuも普通は起動できません。
そこで、USBまたはmicroSDメモリにgrubを入れてジャンプさせる必要が出てきます。
そこでこちらを参考にしました。
rabbit-note.com

起動microSDの作成

ただ上のサイト通りにやっても私の場合起動しませんでしたので、試行錯誤をして以下の作業が
実際に効果がありました。

  • 手持ちの2GBのmicroSDカード*2を、以下のアダプタに入れて別のLinuxマシンに差し込み。

  • 先頭のMBRを飛ばし dd if=/dev/zero of=/dev/sdx bs=1 count=512
  • gdiskで区画割り gptでprotectMBRにする。

  1: 34 2047 1007.0KiB EF02 BIOS Boot
  2: 2048 3932126 1.9GiB 8300 Linux filesystem

  • grubのファーストローダー部分のインストール sudo grub-install --target=i386-pc /dev/sdx
  • ここでいったん取り出し。
  • microserver gen8のUSBに差し込み、USBメモリから起動する。
  • grubがレスキューモードで起動するはずなので、そこからコマンド操作でインストールしたUbuntuを起動する。
grub rescue> ls
 (hd0)(hd0,gpt1)(hd0,gpt2)(hd0,gpt3)(hd1)(hd2)(hd3) (hd3,gpt1)(hd3,gpt2)  ((注:hd1,hd2はサーバー内に入っているHDD2台が見えていたので今回とは無関係。))
grub rescue> ls (hd3,2)/   (Ubuntu入れたドライブベイHDDの中身リスト出てきた!)
grub rescue> ls (hd3,2)/boot  (それぞれ中身が出てくる)
grub rescue> ls (hd3,2)/boot/grub  (それぞれ中身が出てくる)
grub rescue> ls (hd3,2)/boot/grub/i386-pc/  (normal.modがあることを確認)
grub rescue> set root=(hd3,2)
grub rescue> insmod (hd3,2)/boot/grub/i386-pc/normal.mod
grub rescue> normal
  • 起動したUbuntu上から、今度はmicroSDカードに向けてgrubのインストールする。
$ sudo mkfs.ext4 /dev/sdd2
$ sudo mount /dev/sdd2 /mnt
$ sudo grub-install --no-floppy --root-directory=/mnt --force /dev/sdd
  • マウントした領域内の/boot/grub/grub.cfgの名前を変えてバックアップした上で、新しいgrub.cfgを作成。内容はレスキューモードの時の状況を基に作成。(バックアップした最初のgrub.cfgは後で使います。)
set prefix=(hd3,2)/boot/grub
set root=(hd3,2)
insmod normal
normal
  • 再起動して、microSDからの起動ができるか確認。
  • アダプタから取り出し、microSDスロットに挿入。
  • BIOS設定から、USB起動の順序をmicroSD優先に設定。
  • microSDからの起動を確認する。

grub.cfgを改良

ドライブベイにつながるSATAポートは常にHDDドライブのあとの序列になるため、先に説明した
状況では、実はHDDドライブの台数が変わるとgrub上のドライブ番号も変わり、起動先が
わからなくなるはずです。(試しにドライブを1台引き抜いたら起動しなくなりました)

そこで、HDDの本数に依存しないでドライブベイのHDDから起動させるために、UUIDを使った
指定方法でUbuntuの起動ディスクを指定するよう、grub.cfgを書き換えます。
この時、最初に書き込まれたgrub.cfgの中から、menuentry 'Ubuntu' の部分を拝借します。
既に目的のドライブのUUIDも書き込まれている事から、そのまま便利に使えます。
末尾にbootを挿入する事、カーネルとinitrdは更新を見据えてシンボリックリンクを呼びに行くこと
あたりを書き換えればいいでしょう。

insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod ext2
set root='hd2,gpt2'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd2,gpt2 --hint-efi=hd2,gpt2 --hint-baremetal=ahci2,gpt2  <uuid>
else
search --no-floppy --fs-uuid --set=root <uuid>
fi
linux   /boot/vmlinuz root=UUID=<uuid> ro  maybe-ubiquity
initrd  /boot/initrd.img
boot

以上で無事起動できました。

*1:NAS用ケースとCPU吟味して、とかやってるだけでこの 値段を超えてしまうので、今やありがたい機械です。

*2:余りもの