LinuxでのマルチブートHDDの作成(GRUB2 + memdisk + grub4dos)

LinuxでのマルチブートHDDの作成(GRUB2 + memdisk + grub4dos)



ある特定の瞬間、私は数十個のブート可能なフラッシュドライブを持ち歩くのに疲れていました。 そして、マルチブートUSB HDDを自分で作成しました。

必要なもの:



この方法はフラッシュドライブで機能するはずですが、テストは行われていません。

追加の説明:



ディスクの準備


まず、将来の起動可能なハードディスクをいくつかのパーティションに分割する価値があります。 私は2つのセクションに分割することにしました。1つはブート、もう1つはさまざまなファイル用です。

パーティションテーブルを変更した後、ディスク上のすべてのデータは現在失われます!

パーティションを作成する


#fdisk /dev/sdX
      
      



空のパーティションテーブルを作成します。

 Command (m for help): o
      
      



マルチブート用のセクションを作成します。

 Command (m for help): n Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-XXXXXXXXX, default 2048): Last sector, +sectors or +size{K,M,G} (2048-XXXXXXXXX, default XXXXXXXXX): +32G
      
      



データのセクションを作成します。

 Command (m for help): n Select (default p): p Partition number (1-4, default 2): 2 First sector (67110912-XXXXXXXXX, default 67110912): Last sector, +sectors or +size{K,M,G} (67110912-XXXXXXXXX, default XXXXXXXXX):
      
      



最初のセクションを起動可能としてマークし、変更をディスクに書き込みます。

 Command (m for help): a Partition number (1-4): 1 Command (m for help): w
      
      





ファイルシステムの作成


ファイルシステムを作成します。



 #mkfs.vfat -n boot /dev/sdX1 #mkfs.ntfs -f -L data /dev/sdX2
      
      





ブートローダーをインストールする


マルチブート用のパーティションをマウントし、その上にgrub2をインストールします。

 #mount /dev/sdX1 /mnt #grub-install --no-floppy --root-directory=/mnt /dev/sdX
      
      



syslinuxアーカイブから「memdisk / memdisk」ファイル、grub4dosアーカイブから「grub.exe」ファイル、Plopアーカイブから「plpbt.bin」ファイル、firadiskを含むアーカイブから「firadisk.img」ファイルを抽出します。

 $unzip -j -d /mnt/boot/ syslinux-XXzip memdisk/memdisk $unzip -j -d /mnt/ grub4dos-XXXzip grub4dos-XXX/grub.exe $unzip -j -d /mnt/ grub4dos-XXXzip grub4dos-XXX/grldr $unzip -j -d /mnt/boot/ plpbt-XXXzip plpbt-XXX/plpbt.bin $7zx -o/mnt/boot/ firadisk-driver-0.0.1.30-f6.7z
      
      





画像の準備


isoファイル用のディレクトリを作成します。 Ultimate Boot CD、SystemRescue CD、Clonezilla CD(clz16.iso-バージョンi486、clz32.iso-バージョンi686pae、clz64.iso-バージョンamd64)、Memtest CD、Debian Netinstall、Ubuntu、Lubuntu、Windows XPのファイルをコピーします。

 $mkdir /mnt/iso $cp ./iso/{clz16.iso,clz32.iso,clz64.iso,ubcd.iso,sysr.iso,memtest.iso,debian32.iso,debian64.iso,ubuntu32.iso,ubuntu64.iso,lbuntu32.iso,lbuntu64.iso,xp.iso} /mnt/iso/
      
      





ハイレンのブートCD


isoファイルから「HBCD」ディレクトリを解凍します。 その後、ファイル「grub.exe」をマルチブート用のパーティションのルートに抽出します。

 $7zx ./iso/hiren.iso -o/mnt/ -ir\!HBCD
      
      





Dr.Web Live CD


isoファイルから「boot」ディレクトリを一時ディレクトリに解凍し、その内容をマルチブート用のパーティションの「boot」ディレクトリに移動します。

 $mkdir /mnt/drweb $7zx ./iso/drweb.iso -o/tmp -ir\!boot $mv /tmp/boot/* /mnt/boot/
      
      



BOOT_IDも認識します。

 $cat /mnt/drweb/config|grep BOOT_ID export BOOT_ID=xxxxxxxxxxxxxxxxxxxx
      
      



grub4dosの構成ファイル「/mnt/boot/drweb.lst」を作成し、次の内容を追加します。

 title 1. Dr.Web Russian kernel /boot/vmlinuz ID=<  BOOT_ID> root=/dev/ram0 init=/linuxrc init_opts=4 vga=791 splash=silent,theme:drweb CONSOLE=/dev/tty1 BOOT_LANG=ru_RU.UTF-8 quiet initrd /boot/initrd title 2. Dr.Web Advanced options kernel /boot/vmlinuz ID=<  BOOT_ID> root=/dev/ram0 init=/linuxrc init_opts=3 CONSOLE=/dev/tty1
      
      





Debian Netinstall


debianインストーラーのディレクトリを作成し、それぞれのアーキテクチャのhd-mediaからダウンロードするための「initrd.gz」および「vmlinuz」ファイルをダウンロードします。

 $mkdir /mnt/debian $mkdir /mnt/debian/{amd64,i386} $wget -cO /mnt/debian/i386/initrd.gz http://ftp.nl.debian.org/debian/dists/wheezy/main/installer-i386/current/images/hd-media/initrd.gz $wget -cO /mnt/debian/i386/initrd.gz http://ftp.nl.debian.org/debian/dists/wheezy/main/installer-i386/current/images/hd-media/vmlinuz $wget -cO /mnt/debian/amd64/initrd.gz http://ftp.nl.debian.org/debian/dists/wheezy/main/installer-amd64/current/images/hd-media/initrd.gz $wget -cO /mnt/debian/amd64/initrd.gz http://ftp.nl.debian.org/debian/dists/wheezy/main/installer-amd64/current/images/hd-media/vmlinuz
      
      





究極のブートCD


grub4dosの構成ファイル「/mnt/boot/ubcd.lst」を作成し、次の内容を追加します。

 title Ultimate Boot CD map (hd0,0)/iso/ubcd.iso (hd32) map --hook root (hd32) chainloader (hd32)
      
      





Windows XP CD


grub4dosの構成ファイル「/mnt/boot/win.lst」を作成し、次の内容を追加します。

 title 1. Windows XP (1st) map --mem /boot/firadisk.img (fd0) map --mem /iso/xp.iso (hd32) map --hook chainloader (hd32) title 2. Windows XP (2nd) map --mem /boot/firadisk.img (fd0) map --mem /iso/xp.iso (hd32) map --hook find --set-root --ignore-floppies --ignore-cd /ntldr map () (hd0) map (hd0) () map --rehook find --set-root --ignore-floppies --ignore-cd /ntldr chainloader /ntldr
      
      





GRUB2の構成ファイル


/mnt/boot/grub/grub.cfg
have_grubenv = true

load_env

insmod part_msdos

脂肪を吸う

gfxmode = 640x480を設定

locale_dir = / boot / grub / localeを設定します

lang = ru_RUを設定

menu_color_highlight = yellow / dark-grayに設定します

menu_color_normal =黒/ライトグレーを設定

color_normal = yellow / blackを設定します



サブメニュー「1。 AVP "{

menuentry "1。 Dr.Web»{

linux /grub.exe --config-file = / boot / drweb.lst

}

}

サブメニュー「2。 ブートCD»{

menuentry "1。 HirenのブートCD»{

linux /grub.exe --config-file = / HBCD / menu.lst

}

menuentry "2。 Ultimate Boot CD»{

linux /grub.exe --config-file = / boot / ubcd.lst

}

menuentry "3。 SystemRescue CD(i586)»{

set isofile = "/ iso / sysr.iso"

ループバックループ$ isofile

linux(ループ)/ isolinux / rescue32 setkmap = ru isoloop = $ isofile

initrd(ループ)/isolinux/initram.igz

}

menuentry "4。 SystemRescue CD(amd64)»{

set isofile = "/ iso / sysr.iso"

ループバックループ$ isofile

Linux(ループ)/ isolinux / rescue64 setkmap = ru isoloop = $ isofile

initrd(ループ)/isolinux/initram.igz

}

menuentry "5。 クローンジラ(i468)»{

設定isofile = "/ iso / clz16.iso"

ループバックループ$ isofile

linux(ループ)/ live / vmlinuz boot = live live-config noswap nolocales edd = on nomodeset ocs_live_run = \ "ocs-live-general \" ocs_live_extra_param = \ "\" ocs_live_keymap = \ "\" ocs_live_batch = \ "no \" ocs_lang = \ "\" vga = 788 ip = frommedia nosplash noeject toram = filesystem.squashfs findiso = $ isofile

initrd(ループ)/live/initrd.img

}

menuentry "6。 Clonezilla(i686pae)»{

設定isofile = "/ iso / clz32.iso"

ループバックループ$ isofile

linux(ループ)/ live / vmlinuz boot = live live-config noswap nolocales edd = on nomodeset ocs_live_run = \ "ocs-live-general \" ocs_live_extra_param = \ "\" ocs_live_keymap = \ "\" ocs_live_batch = \ "no \" ocs_lang = \ "\" vga = 788 ip = frommedia nosplash noeject toram = filesystem.squashfs findiso = $ isofile

initrd(ループ)/live/initrd.img

}

menuentry "7。 Clonezilla(amd64)»{

設定isofile = "/ iso / clz64.iso"

ループバックループ$ isofile

linux(ループ)/ live / vmlinuz boot = live live-config noswap nolocales edd = on nomodeset ocs_live_run = \ "ocs-live-general \" ocs_live_extra_param = \ "\" ocs_live_keymap = \ "\" ocs_live_batch = \ "no \" ocs_lang = \ "\" vga = 788 ip = frommedia nosplash noeject toram = filesystem.squashfs findiso = $ isofile

initrd(ループ)/live/initrd.img

}

}

サブメニュー「3。 別れの魔法»{

menuentry "1。 Parted Magic RAM(i586)»{

set isofile = "/ iso / pmagic.iso"

ループバックループ$ isofile

linux(ループ)/ pmagic / bzImage iso_filename = $ isofile edd = off load_ramdisk = 1 prompt_ramdisk = 0 rw vga = normal loglevel = 9 max_loop = 256 vmalloc = 384MiB keymap = en ru_RU

initrd(ループ)/pmagic/initrd.img

}

menuentry "2。 Parted Magic RAM(amd64)»{

set isofile = "/ iso / pmagic.iso"

ループバックループ$ isofile

linux(ループ)/ pmagic / bzImage64 iso_filename = $ isofile edd = off load_ramdisk = 1 prompt_ramdisk = 0 rw vga = normal loglevel = 9 max_loop = 256 vmalloc = 384MiB keymap = en ru_RU

initrd(ループ)/pmagic/initrd.img

}

menuentry "3。 別れのマジックライブ(i586)»{

set isofile = "/ iso / pmagic.iso"

ループバックループ$ isofile

linux(ループ)/ pmagic / bzImage iso_filename = $ isofile edd = off load_ramdisk = 1 prompt_ramdisk = 0 rw vga = normal loglevel = 9 livemedia noeject max_loop = 256 vmalloc = 384MiB keymap = en ru_RU

initrd(ループ)/pmagic/initrd.img

}

menuentry "4。 別れのマジックライブ(amd64)»{

set isofile = "/ iso / pmagic.iso"

ループバックループ$ isofile

Linux(ループ)/ pmagic / bzImage64 iso_filename = $ isofile edd = off load_ramdisk = 1 prompt_ramdisk = 0 rw vga = normal loglevel = 9 livemedia noeject max_loop = 256 vmalloc = 384MiB keymap = en ru_RU

initrd(ループ)/pmagic/initrd.img

}

}

サブメニュー「4。 Debian»{

menuentry "1。 Debian netinstall(i368)»{

linux / debian / i386 / vmlinuz priority = low vga = 788-initrd /debian/i386/initrd.gz

}

menuentry "2。 Debian netinstall(amd64)»{

linux / debian / amd64 / vmlinuz priority = low vga = 788-initrd /debian/amd64/initrd.gz

}

}

サブメニュー「5。 Ubuntu»{

menuentry "1。 Ubuntu Live(i386)»{

set isofile = "/ iso / ubuntu32.iso"

ループバックループ$ isofile

linux(ループ)/ casper / vmlinuz boot = casper iso-scan / filename = $ isofile locale = ru_RU.UTF-8 console-setup / layoutcode = ru noeject noprompt-initrd(loop)/casper/initrd.lz

}

menuentry "2。 Ubuntuライブ(amd64)»{

set isofile = "/ iso / ubuntu64.iso"

ループバックループ$ isofile

linux(ループ)/ casper / vmlinuz boot = casper iso-scan / filename = $ isofile locale = ru_RU.UTF-8 console-setup / layoutcode = ru noeject noprompt-initrd(loop)/casper/initrd.lz

}

}

サブメニュー「6。 Lubuntu»{

menuentry "1。 Lubuntuライブ(i386)»{

設定isofile = "/ iso / lbuntu32.iso"

ループバックループ$ isofile

linux(ループ)/ casper / vmlinuz boot = casper iso-scan / filename = $ isofile locale = ru_RU.UTF-8 console-setup / layoutcode = ru noeject noprompt-initrd(loop)/casper/initrd.lz

}

menuentry "2。 Lubuntuライブ(amd64)»{

set isofile = "/ iso / lbuntu64.iso"

ループバックループ$ isofile

linux(ループ)/ casper / vmlinuz boot = casper iso-scan / filename = $ isofile locale = ru_RU.UTF-8 console-setup / layoutcode = ru noeject noprompt-initrd(loop)/casper/initrd.lz

}

}

menuentry "7。 Windows»{

linux /grub.exe --config-file = / boot / win.lst

}

サブメニュー「8。 ツール»{

menuentry "1。 Memtest»{

set isofile = "/ iso / memtest.iso"

linux16 / boot / memdisk iso

initrd16 $ isofile

}

menuentry "2。 Plop Boot Manager»{

linux16 /boot/plpbt.bin

}

}

menuentry "9。 最初のhdd»{

insmod ext2

insmod ntfs

ルート設定=(hd1)

チェーンロード+ 1

}



テスト中


テストには、 VirtualBoxを使用しました。

次の方法で、物理ディスクを仮想マシンに接続できます。

 VBoxManage internalcommands createrawvmdk -filename ./sdX.vmdk -rawdisk /dev/sdX
      
      



その後、単にsdX.vmdkファイルを仮想マシンに添付します。 仮想マシンを起動する前に、必ずパーティションをアンマウントしてください。



All Articles