Linux/USBメモリブート

EFI領域を利用してLinuxを起動する

EFIブートはMBRを利用せずに、直接FAT領域にあるローダを読み込む仕様のようだ。
但しディレクトリ名は固定で「/EFI/BOOT/」である必要がある。※もしかするとBOOTは不要?。小文字でもいける?

1. USBメモリの準備(従来のMBR版と同じ)

 VFATパーティションがあるUSBメモリを用意する

 Bootフラグが有効になっていること.有効でない場合はfdiskコマンドで設定しておく.

# /sbin/fdisk -l /dev/sdb

Disk /dev/sdb: 131 MB, 131072000 bytes
5 heads, 50 sectors/track, 1024 cylinders, total 256000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xb0bcd68e

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *        2048      133119       65536    b  W95 FAT32
/dev/sdb2          133120      255999       61440   83  Linux

# /sbin/mkfs.vfat -F32 /dev/sdb1

2. ブートファイル類の配置

Linuxカーネルとinitrd.gz

# mount /dev/sdb1 /mnt
# mkdir -p /mnt/EFI/BOOT
# cp vmlinuz /mnt/EFI/vmlinuz
# cp initrd.gz /mnt/EFI/initrd.gz

ブート設定ファイル

# cat > /mnt/EFI/BOOT/syslinux.cfg <<EOF
default         current
prompt          1
timeout         30
label           current
                kernel  /EFI/vmlinuz
                append  initrd=/EFI/initrd.gz
EOF

3. syslinux のインストール

syslinux の version6.0以上がEFI対応しているらしい。

https://mirrors.edge.kernel.org/pub/linux/utils/boot/syslinux/syslinux-6.03.tar.gz

# mount /dev/sdb1 /mnt/
# tar xvfz syslinux-6.03.tar.gz
# cd syslinux-6.03
# cp com32/elflink/ldlinux/ldlinux.e64 /mnt/EFI/BOOT/
# cp efi/syslinux.efi /mnt/EFI/BOOT/

#MBR起動も併用可能。設定しておくと対応環境が増えて便利。

# syslinux -i /dev/sdb1 -d /EFT/BOOT ※「-d directory」はMountポイントでなく、/dev/sdb1を基準にしたパス
# dd if=/usr/share/syslinux/mbr.bin of=/dev/sdb

MBR + vfat領域を利用してLinuxを起動する

syslinux をUSBメモリ(/dev/sdb)へインストールする

1. USBメモリの準備

 VFATパーティションがあるUSBメモリを用意する

 Bootフラグが有効になっていること.有効でない場合はfdiskコマンドで設定しておく.

# /sbin/fdisk -l /dev/sdb

Disk /dev/sdb: 131 MB, 131072000 bytes
5 heads, 50 sectors/track, 1024 cylinders, total 256000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xb0bcd68e

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *        2048      133119       65536    b  W95 FAT32
/dev/sdb2          133120      255999       61440   83  Linux

# /sbin/mkfs.vfat -F32 /dev/sdb1

2. ブートファイル類の配置

Linuxカーネルとinitrd.gz

# mount /dev/sdb1 /mnt
# mkdir /mnt/syslinux
# cp vmlinuz /mnt/syslinux/vmlinuz
# cp initrd.gz /mnt/syslinux/initrd.gz
# umount /mnt

3. syslinux のインストール

 vfat 領域に syslinux コマンドで起動プログラムをインストールし,

 メモリデバイスのMBRにdd コマンドでブートコードを書き込む(パーティション分割した場合のみ)

# syslinux /dev/sdb1
# dd if=/usr/share/syslinux/mbr.bin of=/dev/sdb

 起動パラメータ類の設定とファイル確認

# mount /dev/sdb1 /mnt
# cat > /mnt/syslinux/syslinux.cfg
default linux
label linux
  kernel /syslinux/vmlinuz
  append root=/syslinux/initrd.gz

... 確認 ...
# ls /mnt
ldlinux.sys syslinux
# ls /mnt/syslinux
initrd.gz vmlinuz syslinux.cfg
# umount /dev/sdb1

MBR + ext2,3領域を利用してLinuxを起動する

extlinux をUSBメモリ(/dev/sdb)へインストールする

1. USBメモリの準備

 ext3パーティションがあるUSBメモリを用意する

 Bootフラグが有効になっていること.有効でない場合はfdiskコマンドで設定しておく.

# /sbin/fdisk -l /dev/sdb

Disk /dev/sdb: 131 MB, 131072000 bytes
5 heads, 50 sectors/track, 1024 cylinders, total 256000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xb0bcd68e

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048      133119       65536    b  W95 FAT32
/dev/sdb2   *      133120      255999       61440   83  Linux

2. ブートファイル類の配置

Linuxカーネルとinitrd.gz

# mount /dev/sdb1 /mnt
# mkdir /mnt/extlinux
# cp vmlinuz /mnt/extlinux/vmlinuz
# cp initrd.gz /mnt/extlinux/initrd.gz
# umount /mnt

3. extlinux のインストール

 ext3 領域に extlinux コマンドで起動プログラムをインストールし,

 メモリデバイスのMBRにdd コマンドでブートコードを書き込む(パーティション分割した場合のみ)

# mount /dev/sdb2 /mnt
# /sbin/extlinux -i /mnt/extlinux
/mnt/extlinux/ is device /dev/sdb2
# dd if=/usr/share/syslinux/mbr.bin of=/dev/sdb

 起動パラメータ類の設定とファイル確認

# mount /dev/sdb1 /mnt
# cat > /mnt/extlinux/extlinux.conf
default linux
label linux
  kernel /extlinux/vmlinuz
  append root=/extlinux/initrd.gz

... 確認 ...
# ls /mnt
lost+found extlinux
# ls /mnt/extlinux
extlinux.conf initrd.gz vmlinuz
# umount /dev/sdb1



---
update at 2022/11/28 16:35:02

※注:当サイトは特定環境において確認できた事象のみを記述しています。他の環境での動作は一切保証しません。