grub4dos の partnew コマンド利用で簡単isoマルチブートしてみたYO!
partnew コマンドの詳細については grub4dos の ReadMe をご参照あれ。
設定は簡単ですが汎用性は低そうかなと思います。パーティションテーブルを弄るので壊れる可能性も若干ありそうな気がしないでもない(※ partnew で作成した仮想?パーティション以外の実在パーティションやisoと別のドライブのパーティションはエラーとなりますけど)。バックアップを取ったうえで、自分専用や実験・確認用にはいいかも。
やることはこんだけ
- isoをUSBメモリのルートへコピー
- ルートに
menu.lst
をちょちょっと書く - USBメモリへ grub4dos をインストール
元のisoファイルは触る必要なっしんぐ。
- どんなかんじでブートすんの?
-
- Puppy Linux Precise-550JP
title precise-550JP.iso partnew (hd0,3) 0x00 (hd0,0)/precise-550JP.iso map (hd0,0)/precise-550JP.iso (0xff) map --hook chainloader (0xff)
- partnew で
hd0,3
(=sdx4
)作成- iso の内容を
hd0,3
にマウント(これは仮想パーティションみたいなかんじ)
- iso の内容を
- 実在isoをマウントして kernel, initrd をロードして小さなLinux起動
- 小さなLinux起動後に
hd0,3
内のルートイメージをマウントして大きなLinux起動
sdx4 は Windows のディスクの管理では存在しない、Linux の parted, GParted でも同じ。fdisk では下記の通り表示されます。サイズはisoと同量。type は
00
(Empty
)。Disk /dev/sdb: 3965 MB, 3965714432 bytes 255 heads, 63 sectors/track, 482 cylinders, total 7745536 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: 0x0000f788 Device Boot Start End Blocks Id System /dev/sdb1 * 2048 7745535 3871744 b W95 FAT32 /dev/sdb4 19016 371843 176414 0 Empty
マウントすると type は iso9660。
/dev/sdb4 on /mnt/sdb4 type iso9660 (ro,relatime,iocharset=utf8)
- menu.lst 一例
-
【追記】万が一の為、
(hd0,3)
にファイルが存在する場合は partnew を実行せずにメインメニューに戻るようにしてみた。(ls (hd0,3)/ && configfile /menu.lst
)color white/blue yellow/cyan title ubuntu-ja-13.04-desktop-i386.iso ls (hd0,3)/ && configfile /menu.lst partnew (hd0,3) 0x00 (hd0,0)/ubuntu-ja-13.04-desktop-i386.iso map (hd0,0)/ubuntu-ja-13.04-desktop-i386.iso (0xff) map --hook chainloader (0xff) title knoppix_v7.0.2DVD_20120530-20120615.iso ls (hd0,3)/ && configfile /menu.lst partnew (hd0,3) 0x00 (hd0,0)/knoppix_v7.0.2DVD_20120530-20120615.iso map (hd0,0)/knoppix_v7.0.2DVD_20120530-20120615.iso (0xff) map --hook chainloader (0xff) title KNOPPIX_V7.2.0CD-2013-06-16-JA-LCR.iso ls (hd0,3)/ && configfile /menu.lst partnew (hd0,3) 0x00 (hd0,0)/KNOPPIX_V7.2.0CD-2013-06-16-JA-LCR.iso map (hd0,0)/KNOPPIX_V7.2.0CD-2013-06-16-JA-LCR.iso (0xff) map --hook chainloader (0xff)
※ KNOPPIX DVD版は 4 GiB あるので FAT32フォーマットではだめです。
Puppy はこんなかんじの方がいいかもしれない。(もしくは、iso内の menu.lst 修正でも)
title precise-550JP.iso ls (hd0,3)/ && configfile /menu.lst partnew (hd0,3) 0x00 (hd0,0)/precise-550JP.iso map (hd0,0)/precise-550JP.iso (0xff) map --hook root (0xff) kernel /vmlinuz pmedia=usbflash pfix=fsck initrd /initrd.gz
- 注意点
-
- PLoP Boot Manager 経由では書き込み不可となるので partnew コマンド実行不可
- isoが断片化してるとだめ
- 毎回パーティションテーブルを書き換えるのでちょっとコワいYO!
確認したもの・・・
- Ubuntu 日本語 Remix
- ubuntu-ja-13.04-desktop-i386.iso
- ubuntu-ja-11.10-desktop-i386
- KNOPPIX 日本語版
- KNOPPIX_V7.2.0CD-2013-06-16-JA-LCR.iso (ライブCDの部屋)
- knoppix_v7.0.2DVD_20120530-20120615.iso (産総研)
- Puppy Linux 日本語版
- precise-550JP.iso
- lupu-528JP.iso
- wary-511-01j-k2.6.32.28-small.iso
- pup_431JP2012.iso
KNOPPIX や Ubuntu は元々isoブート対応ですけど、Puppy などマルチにするには楽でいいかもしれない。
grub4dos のインストール
RMPrepUSB、または BOOTICE がおすすめ。
※ フォーマットは必須ではござらぬ。ブートできない時は試行するべし。(ファイルはすべて消えるのでご注意!)
BOOTICE の方はなんかウイルス疑惑されてるみたいなのでリンクは割愛しときます。
【追記】パーティション・テーブル
sdb4 の位置は sdb1 内になってるので、sdb1 内のisoを配置(loopback マウント?)してるみたいです。つまり、sdb4 は実体のない仮想的なパーティションってことかな。
- RMPrepUSB フォーマット + Ubuntu 13.04 起動後
-
- ubuntu-ja-13.04-desktop-i386.iso (898 MiB)
- RMPrepUSB v2.1.709 使用
- Boot as HDD (C: 2PTNS) 指定でフォーマット
- fdisk の出力
ディスク /dev/sdb: 3965 MB, 3965714432 バイト ヘッド 122, セクタ 62, シリンダ 1024, 合計 7745536 セクタ Units = セクタ数 of 1 * 512 = 512 バイト セクタサイズ (論理 / 物理): 512 バイト / 512 バイト I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト ディスク識別子: 0x2ea082ee デバイス ブート 始点 終点 ブロック Id システム /dev/sdb1 * 63 7743329 3871633+ b W95 FAT32 /dev/sdb2 7743330 7743392 31+ 21 不明 /dev/sdb4 2032712 3871815 919552 0 空
- パーティション・テーブル
--------------------------------------------------------- ADDRESS 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F --------------------------------------------------------- 000001B0 00 00 00 00 00 00 00 00 EE 82 A0 2E 00 00 80 01 000001C0 01 00 0B FE 7F E1 3F 00 00 00 23 27 76 00 00 00 000001D0 41 E2 21 00 7F E2 62 27 76 00 3F 00 00 00 00 00 000001E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 87 000001F0 12 7E 00 02 19 F1 48 04 1F 00 00 10 1C 00 55 AA
sdb4 の詳細は、
- 開始位置 : 0x001f0448 = 2032712 = 992 MiB (終了 = 3871815 =1890 MiB)
- セクタ数 : 0x001c1000 = 1839104 = 898 MiB
- BOOTICE フォーマット + Puppy precise-550JP 起動後
-
- precise-550JP.iso (172 MiB)
- BOOTICE 1.0.4 使用
- USB-HDD mode (Single Partition)
- Start LBA = 2048 指定でフォーマット
- fdisk の出力
Disk /dev/sdb: 3965 MB, 3965714432 bytes 255 heads, 63 sectors/track, 482 cylinders, total 7745536 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: 0x0000f788 Device Boot Start End Blocks Id System /dev/sdb1 * 2048 7745535 3871744 b W95 FAT32 /dev/sdb4 19016 371843 176414 0 Empty
- パーティション・テーブル
--------------------------------------------------------- ADDRESS 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F --------------------------------------------------------- 000001B0 00 00 00 00 00 00 00 00 88 F7 00 00 00 00 80 FE 000001C0 FF FF 0B FE FF FF 00 08 00 00 00 28 76 00 00 00 000001D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 000001E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 2E 000001F0 36 01 00 25 12 17 48 4A 00 00 3C 62 05 00 55 AA
sdb4 の詳細は、
- 開始位置 : 0x00004a48 = 19016 = 9.28 MiB (終了 = 371842 = 181 MiB)
- セクタ数 : 0x0005623c = 352828 = 172 MiB
ほなの。