Skip to content

Instantly share code, notes, and snippets.

@shimarin
Last active February 13, 2024 03:40
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save shimarin/51435b3cb07bdf1329aa to your computer and use it in GitHub Desktop.
Save shimarin/51435b3cb07bdf1329aa to your computer and use it in GitHub Desktop.
BIOSとEFIの両方で起動出来るブートパーティションの作成
BIOSで起動できないディスク
2TBを超えるディスク
4096bytes/sectorなディスク
fdisk pコマンド
physicalが 4096bytesでも logicalが 512bytesならセーフ
Sector size (logical/physical): 512 bytes / 512 bytes
# 古典的なMS-DOSパーティションテーブルを作成
parted --script /dev/sdX 'mklabel msdos'
# 1MiB-513MiBを境界とする容量512MiBの起動パーティションを作成
# 先頭1MiBを未使用にしておくのは主に grubが使用するから
parted --script /dev/sdX 'mkpart primary 1MiB 512MiB'
# 起動フラグをオンにする (BIOS向け)
parted --script /dev/sdX 'set 1 boot on'
# パーティションタイプをESPにする(EFI向け)
sfdisk --change-id /dev/sdX 1 ef
# 作成した起動パーティションをFAT32でフォーマットする
mkfs.vfat -F 32 /dev/sdX1
# パーティションをマウントする
mount /dev/sdX1 /mnt
# grub用のディレクトリを作成
mkdir /mnt/boot
# BIOS版 grubをインストール。MBR、ブートパーティションより前の未使用領域、ブートパーティションの /boot/grub以下に書き込みがされる
grub2-install --target=i386-pc --recheck --boot-directory=/mnt/boot /dev/sdX
# EFI用のディレクトリを作成
mkdir -p /mnt/EFI/BOOT
# EFI版 grubをインストール。grub本体と必要なモジュールをPE形式の実行ファイルにまとめて所定の名前でブートパーティションに設置する。
grub2-mkimage -o /mnt/EFI/BOOT/bootx64.efi -O x86_64-efi xfs fat part_gpt part_msdos normal linux echo all_video test multiboot multiboot2 search iso9660 gzio lvm chain configfile
# grubの設定ファイルを作成 (BIOS起動の場合もEFI起動の場合もこの設定ファイルが使用される)
vi /mnt/boot/grub/grub.cfg
set default=0
set timeout=3
set UUID=d78c847d-7f5e-4176-ba37-7d09f743c91d
menuentry 'Gentoo Linux' {
search --no-floppy --fs-uuid --set=root $UUID
echo 'Loading kernel...'
linux /boot/kernel root=UUID=$UUID
echo 'Loading initramfs...'
initrd /boot/initramfs
}
menuentry 'Rescue' {
echo 'Loading kernel...'
linux /boot/kernel
echo 'Loading rescue environment...'
initrd /boot/rescue
}
# パーティションをアンマウントして完了
umount /mnt
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment