気の向くままに辿るIT/ICT/IoT
システム開発

各種Rescue Live CDをUSBメモリ/GRUB2/GPTでマルチブート

ウェブ造ホーム前へ次へ
各種Rescue Live CDをUSBメモリ/GRUB2/GPTでマルチブートするには?

各種Rescue Live CDをUSBメモリ/GRUB2/GPTでマルチブート

各種Rescue Live CDをUSBメモリ/GRUB2/GPTでマルチブート

2016/08/02

 元々インストーラを中心にCentOS/Fedora、Debian/Ubuntu、FreeBSD/NetBSD/OpenBSD、更にレスキューツールとしてClonezilla、GpartedのLive版をマルチブート構成としたLive USBに、ついては、パーティションテーブル形式はGPT、ブートローダはGRUB 2がよさそうということで始めたのですが、結果的に単独で基本パーティションを要したのがFreeBSDのみでGRUB用とデータ保存用にパーティションを確保しても4つで事足りる為、MBRパーティションでも、よってGRUB LegacyでもOKでした。

 これに加えて今回、レスキュー用USBメモリ差し替えに伴い、追加でSystemRescueCd 4.8.0(Gentooベース)、PLoP Boot Manager、FreeDOS 1.1もISOブートすることに。

 尚、GParted、Clonezillaについては、Debian LiveベースなのでDebian系に書いています。

[追記:2016/09/29]
 更に高機能レスキューTrinity Rescue Kit、アンチウィルスソフトとしてAVGレスキューCD、Comodo Rescue Disk、F-Secure Rescue CDなどもTrinityのみファイル展開、その他はISOブートで追加(これでもまだ、MBR形式でも事足ります)。

SystemRescueCdをGRUB2で設定

menuentry 'SystemRescueCd-x86-4.8.0' {
    set root=(hd0,2)
    loopback loop /systemrescuecd-x86-4.8.0.iso
    linux (loop)/isolinux/rescue32 isoloop=systemrescuecd-x86-4.8.0.iso
    initrd (loop)/isolinux/initram.igz
}
menuentry ' ' { echo }

 本家を参考にSystemRescueCd x86 4.8.0をISOブート。

 [linux]行に[setkmap=jp]などと追記するとキーボードのキーマップを指定できたり、[dostartx]フラグを追記するとデフォルトでGUI起動(追記しなくてもログイン後、startxすればXfceが起動)したりします。

PLoP Boot ManagerをGRUB2で設定

menuentry 'PLoP Boot Manager' {
    set root=(hd0,2)
    loopback loop /multi_boot1.iso
    legacy_kernel (loop)/plop/plpbt.bin
}
menuentry ' ' { echo }

 PLoP Boot ManagerをISOブート。

 少なくともPLoP Boot ManagerのISOをloopbackしてplpbt.binを起動する場合、GRUB 2では、[linux16]でもよいですが、[legacy_kernel]でも可。

 但し、ISOディスクイメージではなく、plpbt.binをパーティション内に直接コピーして起動する場合には、GRUB 2でも[linux16]とするか、[legacy_kernel plpbt.bin root=/dev/...]のようにplpbt.binのパスの後に起動後のrootデバイス(かUUID指定でもいけるはず)を追記する必要あり。

 PLoP Boot Managerは、ブートローダであり、チェーンローダでハードディスクやCD/DVDドライブ、USBメモリの自動検出とメニュー選択による起動が可能、特にPC/AT互換機(IBM PC系)のBIOSがUSBメモリに非対応な場合に便利。

【追記:2016/10/09】

 USBハブに接続したブータブルUSBメモリは、PLoP Boot Managerの[USB]メニューでは検出できない??

 たまたま、e-oneにこれまた古いUSB 1.1のUSBハブをつなげてUSB無線LANアダプタ正常に機能するっけ?と試した(結果正常に機能することが確認できた)際にUSBメモリも挿して試してみたら、USBハブがバスパワーだからか?(セルフパワーにも対応なのでACアダプタを探して試してみるもダメっぽい。。。)認識できるのが(1つめの)USBハブまでなのか?なんなのか理由はわからないものの、その先のUSBメモリは認識されませんでした。

 今時、USB起動できないPCにUSBハブを付けてみるってケースも相当、稀だとは思いますし、e-oneでもUSBブート時は、もう1つあるUSBポートを使うので問題ありませんが。

【追記:2016/09/19】

 USBメモリがMBR形式でもGPT形式でもBIOSからUSBブートもできるし、PLoP Boot Managerで[USB]を選んでも起動できることもあって最新マシンはもちろん、SOTEC e-one 500のように素直にUSBブートできないような古いマシンでも起動できる点で一連の記事でも書いている通り、USBメモリ/GPT/GRUB2の組み合わせは柔軟性が高くオススメと思っている次第。

(PLoP Boot Manager自体はUEFI/GPT形式のHDDは未対応の模様もUSBメモリはUEFI/EFIとは無縁だからか、GPT形式のUSBメモリの起動は可能だった。)

 ただ、最近、当初確認した8GBのUSBメモリならGPT形式でもPLoP Boot Manager経由で起動できるが、使用するマシン(BIOS)に関わらず、32GBのUSBメモリだとBIOSでなら認識・起動可能だが、PLoP Boot Managerを介すと起動できない状況に遭遇。

 なお、検証には、8GBのUSBメモリ2本(Transcend JetFlash 590とLexar JumpDrive S50 Orange)、32GBのUSBメモリ1本(Silicon Power Ultima U02)を使った。

 8GB2本は、GPartedでGPTに初期化、第1パーティションに(何が適切なのか、これによって挙動にどういう変化があるのか今ひとつ把握できていないが、)起動フラグに[boot]、[esp]、[legacy_boot]を指定したFAT32、または、ext3でGRUB 2、残りをISOブートやdd埋め込みとし、32GBの方は、GPT形式であることは間違いない一方、最近のことながら、他のUSB含め、NetBSD上でgptコマンドとか、Debian上でfdiskとかpartedとか、いろいろやったので記憶が曖昧。。。32GBのUSBメモリはGParted使わなかったかもしれないが、今回、GPartedで起動フラグは合わせてみたりもした。

 これって、もしかして8GB(容量)の壁?

 でも、8GBの壁は、ディスクではなく、概ね1998年あたりまでに製造されたPCにおいてBIOSやSCSIコントローラに起因するものと言われており、e-oneがあるが、これは今回の検証では使っていないので当てはまるPCはない。

 また、MBR形式の16GB、32GBのUSBメモリでは未検証、過去、MBR形式の13GB HDD、80GB HDD、128GB SSD、160GB HDD、2TB HDDでも確認含め、1度や2度は、PLoP Boot Managerを使ったはずだが、ほぼ、USBメモリの起動確認に終始したこともあり、HDD/SSD内のOSが起動するか否かも定かではなかったので、改めて2台のPC(128GB SSDと2TB HDD)で試してみるべく、この32GBのUSBメモリに入れてあるPLoP Boot Managerを起動してみると何れもMBR形式固有の論理パーティションは読めない模様も、少なくとも基本パーティションは認識されたので、これらと共にSCSI機器として扱われることが多いUSBメモリも同様と思われるし、何れにしてもGPTでもBIOS経由ではこの32GBのUSBメモリも起動できるのでPCのBIOSやSCSIコントローラに起因するものではなさ気。

 ただ、例えば、PLoP Boot ManagerがBIOSをエミュレーションしてる?とか、これを起動する際にlinux16かlegacy_kernelを使う(前者が16bitを意味するとしても8GBの壁とは無縁だと思うが)GRUB 2が、SCSIコントローラをエミュレーションしてるとか?そういった可能性もあるのかなとか。。。?

 が、検証マシンの内、1台は未使用領域を間に挟んだ状態とはいえ、ディスク先頭から200GB程度の位置にあるパーティション内のOSもPLoP Boot Manager経由で起動できた為、HDDに対しては、8GBの壁なんてものはないようだ。

 とするとPLoP Boot Managerが、USBメモリをIDEとして認識している可能性?もし、そうなら、これに加え、LBAアドレッシングを利用可能にする拡張INT13に対応していないBIOSをPLoP Boot Managerがエミュレーションしているとしたら、8GBの壁にぶつかるが、その可能性もある?

 更に微妙でさり気なく状況を複雑にする(頭を混乱させる)のが、8GB、32GBに関わらず、他の2本はそんなことはないが、JetFlash 590 8GBに関しては、GPTの場合、BIOSがUSBとして認識しないのか、マシン/BIOSによって(Phoenix BIOS 5.09のデスクトップPCでは起動するが、BIOS画面ではベンダがわからなかったため、dmidecodeコマンドで確認したところPhoenix 1.40のノートPCだと)USBを指定してもブートせず、スルーされる点。(ん?同時期に買ったPCでBIOSベンダもRelease Dateも変わらないのにバージョンが全然違うのなんで?デスクトップとノートで違う?PCメーカーで違う?その気はないけど今更、2007年物のBIOSアップグレードなんてできるんだっけ?)

 ちなみにUltima U02 32GBは、データ量はそうでもないが、既に16GB分程度はパーティションを切ってあり、中間を空けて末尾にもパーティションを作成するというちょっとイレギュラーなこと?もやっていて、これを間も開けずに8GBに収めたらどうなるのかも未検証。

 というわけで原因不明もPLoP Boot Managerを使わないとUSBブートできないようなマシンを持っていてGPT形式の(USBメモリをIDEとして認識かつ、拡張INT13非対応BIOS機能をPLoP Boot ManagerがエミュレートしているというようなことがあるとしたらモノによってはMBR形式でも)USBメモリをブートしたい場合には、8GB以下のものを使うのが無難かも。

FreeDOSをGRUB2で設定

menuentry 'FreeDOS-1.1' {
    insmod fat
    set root=(hd0,2)
    loopback loop /fd11src.iso
    linux16 (loop)/ISOLINUX/MEMDISK
    initrd16 (loop)/ISOLINUX/FDBOOT.IMG
}
menuentry ' ' { echo }

 FreeDOS 1.1をISOブート。

 DOSやWindowsなど大文字・小文字を区別しないファイルシステム上の文字列については、大文字・小文字を区別する*BSD/PC-UNIX/Linuxで扱う場合、注意が必要。

 これらについては、mountコマンドでマウントしてみるなり、ISO Masterを使うなり、isoファイルをGRUBから認識できる場所に置いた上、GRUBを起動、grubプロンプトからmenuentry内の記述と同様に操作してloopback後、ls (loop)/するなりして事前に確認しておくとよいでしょう。

 MSDOSのサポートが終わった近年、MSDOS代替+アルファを志向、実現しているFreeDOSがあると、いつか役に立つ日がくるかも?

【追記:2016/09/25】

 この方法だと起動するPCと起動しないPCがあることがわかりました。。。

 また、起動するPCでも、FreeDOS 1.1のインストーラISOをそのままUSBメモリからISOブートすると認識されたディスクが表示される場合もありますが、fdiskかツールロードするかの2択でキー入力を促すメッセージが表示され、ツールロードは失敗するため、実質fdiskしか選べず、認識しているのが、USBメモリ自体なのでfdiskを実行してもパーティション情報がUSBメモリのものとなってしまうことが判明。

 当初、たまたま起動できるPCで起動した時点で即終了させるような確認しか行わなかったため、今まで、これに気づきませんでした。。。

menuentry 'FreeDOS-1.1 from HDD Boot' {
    set root=(hd0,1)
    chainloader +1
}
menuentry ' ' { echo }

 一方、数台のPCにFreeDOSを入れた時は、インストーラをCD/DVDに焼いてブートしたんだっけな。。。?思い出せないのですが、PCにインストール済みのFreeDOS 1.1は、chainloader +1でブートできます。

 当時は、そうすべきなんだろうと思って、すべて入れたPCでは、FreeDOSを第1パーティションにインストールしましたが、それが無難かと。

 入れるには入れたものの、全く使ったことはなかったのですが、ふとしたことからe-oneに入れてあったFreeDOSが起動できなくなっていることに気づき、USBメモリからインストールしようとしてISOブートだと起動できるPCとできないPCがあること、起動できたにしても、そのままでは、PCにはインストールできないことが判明した次第。

 USBメモリからFreeDOSをISOブートしてインストールするにはどうしたら。。。と調べていろいろやってみたものの、うまくいかずじまい。

$ sudo dd if=FreeDOS-1.1-USB-Boot.img of=/dev/sdb

 他方、マイナビニュース記事からFreeDOS 1.1 USB Boot Imageに飛び、FreeDOS-1.1-USB-Boot.img.bz2をダウンロードさせて頂き、展開した結果のFreeDOS-1.1-USB-Boot.imgを初期化したUSBメモリ全体にddしてみたところUSBブートでFreeDOSを起動させることができました。

debian:~$ sudo mount /dev/sdb1 /mnt/usb
debian:~$ sudo grub-install --force --boot-direcotry=/mnt/usb /dev/sdb
debian:~$ less /mnt/usb/grub/grub.cfg
...
menuentry 'FreeDOS-1.1 USB Live' {
    set root=(hd0,1)
    chainloader +1
}
menuentry ' ' { echo }
...

 後からGRUB 2をインストール・利用することもでき、GRUB 2メニューからなら、やはり、chainloader +1でいけました。

 このFreeDOS-1.1-USB-Boot.imgで起動すると最初は日付・時刻の設定を促され、異なる場合は、設定、合っている場合は、[Enter]でプロンプト[C:\]が表示されました。

 つまり、これは、Liveイメージだったのですが、GPartedで見るとファイルシステムはfat16、パーティションサイズは40MB弱(30MB台)、dirしてみると中身は、command.comとkernel.sysしか入っていません。

 なお、MBR込みで設定してあるからか、予め作成した任意のパーティションに埋め込もうとするとGPartedでは不明デバイスとなり、USBブートもできませんでしたが、最初にUSB全体に対してこれをddで書き込んでおきさえすれば、GRUBのインストールはもとより、USBメモリに空きがある(今回8GBのUSBメモリを使ったので有り余っている)場合、先のイメージ分以外は、[未割り当て]となるのでパーティションを追加してマルチブートすることもできます。

 ただ、コマンドを追加するにも40MB弱じゃ、心もとないかな。。。ということで何も考えずにGPartedで拡張してみたところパーティションは拡張できたものの、ファイルシステムfat16ボリュームの拡張ができないエラー。

debian:~$ sudo parted /dev/sdb
...
(resizeコマンドは3.0で削除されたよ。。。)
...
debian:~$

 partedとかだったらできるんじゃ?と思って探すとresizeコマンドでできるらしいということでやってみたら、resizeコマンドは3.0で削除された。。。とのメッセージ、バージョンを確認すると3.2。。。おっ惜しい。。。!?

 MSのサイトなども調べてみると、どうやら後にFAT16/32もボリューム拡張できるようになった模様もブートパーティションは拡張できないようなことが書いてある。。。が、ダメ元で仮想マシンのWindows 7を起動してみたら、案の定、後ろにまだ未使用領域はあるが、拡張メニューがグレー反転していて選択できず、ダメ。。。

 っていうか、起動できるんだっけ?と思って試すと拡張を試みたのがいけなかったようで起動できなくなっている。。。それなら、試行錯誤の中、発見したFreeDOS Liveの作り方も解説してくれている模様のFreeDOS prebuilt bootable USB flash drive image Download pageの FreeDOS-1.1-memstick-2-2048M.img.bz2ならFAT容量拡張バージョンでファイル名からして容量も大きそうだし、追加コマンドも結構ありそうだということで出来合いのこれを利用させて頂くことに。

 実は、これ先のLiveに行き着く以前に既にddでパーティションに書き込もうと思って失敗していたのですが、ドキュメントをよく見ると/dev/sdzのようにUSB全体ならいけるだろうが、/dev/sdz1のようにするとダメかもねって書いてあった。。。

 というわけで32GB/GPT形式のレスキューUSBメモリとは別に、このMBR形式の8GBのUSBメモリもレスキュー用にしておこうということで、とりあえず、先のUSBメモリから(SystemRescueCdにはGPartedも入ってるけど)GParted LiveとSystemRescueCd、PLoP Boot Manager(plpbt.bin)をコピー、SystemRescueCdはログインシェル起動としてgrub.cfgを編集しておくことに。

 e-oneのFreeDOSが入っていたパーティションは、フォーマットしただけになってるけど思いがけず、FreeDOS Liveをゲットできたから、まぁいいか。。。(というかマルチブートしているNetBSDは未だ正常に機能するものの、起動できていたインストール済みFreeDOSが起動できなくなったわけだから、さすがにHDDがそろそろ。。。ってことだと思いますが。)

[追記:2016/09/29]

Trinity Rescue KitをGRUB2で設定

 Linuxのリカバリにも使えますが、Windowsマシンのリカバリ(回復)やリペア(修復)を主目的としたTrinity Rescue KitをUSBブートさせてみるにあたり、ISOディスクイメージtrinity-rescue-kit.3.4-build-372.iso(151MB)を利用させて頂きました。

menuentry 'Trinity Rescue Kit 3.4-build-372' {
    set root=(hd0,2)
    set directory=/trinity-rescue-kit.3.4-build-372
    legacy_configfile $directory/menu.lst
}
menuentry ' ' { echo }

 Trinity Rescue Kitについては、ISOブートではなく、58 - Trinity Rescue Kit - boot from USBの通りにISOディスクイメージから/trkディレクトリ、initrd.trk、kernel.trk、memtest.x86といった中身の一部をUSBメモリに作成したディレクトリにコピー、GRUB 2のlegacy_configfileコマンドに新規作成、リンク先から中身をコピーしたmenu.lstを指定したところGRUB 2からTrinity Rescue Kitをブートさせることができました。

 この時、リンク先にサラッと太字で書いてあるディレクトリ名の通り、ディレクトリはtrk3にしておくのが無難。

 USBメモリに作成するディレクトリ、legacy_configfileで呼ぶmenu.lst内とそのパス、これを呼ぶことになる今回は、grub.cfg内のディレクトリ名を合わせておけば大丈夫だと思いますが、自身はディレクトリ名を変え、grub.cfgも変えたのに、うっかり、menu.lst内のパスをコピペした(trk3の)ままにした為、ここで結構な時間、無駄にハマり、若干迷いましたが、全てtrk3にしたら無事起動、操作できるようになりました。

 このパスでハマった場合、Trinity Rescue Kit自体は起動できますが、メニューから何を選んでも「CDドライブが見当たらない」に続き、「HDDやUSBでも検索してみたけどtrkramfsが見つからないよ」、「直接、存在するパスを入力してね(例:'sda1')」といったようなメッセージが出てどんなデバイス名を入れてみたところでシェルに落ち、ドツボ。(この場合、デバイスではなくディレクトリの指定違いとなるから。)

 ちなみにGRUB 2のgrub.cfgのset root=(hd0,2)を元にするのか、検索しまくるのか、Trinity Rescue KitはUSBメモリのディレクトリを自動認識できるようで、これを/trkにマウントしていました。(先のミスで/trk/trk3/trkramfsがない旨のエラーメッセージが表示され、df -hしてみると当該デバイスのパーティションが/trkにマウントされていました。)

 当初、このエラーメッセージからUSBメモリの当該パーティション上のディレクトリ内にも/trk/trk3/trkramfsが必要なのかと勘違いし、/trk/trk3を作ってディレクトリトップからtrkramfsをコピーするという、ただただ無意味で無駄なだけの度重なる失態。

 が、PCによって?タイミングによって?は、USBメモリのデバイスの割り当てでsdaにならないこともあり、その場合は、起動メッセージの直前に検出された当該USBメモリと関連付けられたデバイスが表示されているはずなので...(ex. sda1):...にそのデバイス(sdc2とか、ISOディスクイメージのあるパーティション)を入力すれば、処理が継続されます。(故障したCD/DVDドライブを外していたPCでは、やはり、CDドライブが見つからない旨のメッセージも表示されましたが、前述の通り、パスを修正したためか、外付けCDドライブを装着する必要もなく、USBが割り当てられたデバイスのパーティションを入力するだけでOKでした。)

 まぁ、結果できたのでよしとして。。。以前、Windowsしか使っていなかった頃、確か、マルチセッション(マルチブート)CD作成ソフトXBootでDVD-RWにTrinity他を入れてみたことがありますが、手作業でやったらなかなかできず、ほんとにできるのか?というところからXBootを使ってみたという具合にCD/DVDマルチセッションしてみること自体が主な動機だったこともあり、全く使ったことはなく、いざ使ってみようと入れたそんな今は、*BSD/LinuxマシンばかりでWindowsマシンはない。。。かろうじてFreeDOSがあるか。。。まぁ入れてみたかったということで。

 Trinity Rescue Kit、改めて見てみるとWindowsのパスワードのリセット、Windows Network Server(たぶんSamba?)、SSHサーバなどの起動、クローンとしてバックアップできるパーティションツール、消失したパーティションやファイルの復元ツールがあったり、ウイルススキャンとしてClamAV、F-PROT、BitDefender、Vexira、Avastなど複数利用できる模様だったりと思っていた以上に高機能。

 ただ、ウイルススキャンをしようとすると、どれを選んでも[Neither DNS nor proxy parameters for wget found so no internet connection...]といったメッセージが表示されるだけで機能しない。。。このフレーズをキーに検索してみると6件しかない。。。少なっ!でも、その中のTrinity Rescue Kit (TRK) 3.4 does not resolve DNS out of the boxに明快な解決策がありました。

 なんとDHCPクライアントが起動していないということでメインメニューに戻り、[Go to a shell]で単にdhcpcdと入力してEnterするだけ。。。exitしてメニューに戻ってウイルススキャンを選択・実行すると、ものによっては、そんなURLないといわれますが、ウイルスデータベースのダウンロードなどが実行されるものもあり。。。とりあえず、ネットにはつながりました。

 デフォルトは、すべてのローカルパーティションがスキャン対象となるので必要なら[Set the Scan destination]でスキャンしたいデバイスを選択します。

 ClamAVは、ダウンロード開始、パッチとか一部ないよ的な警告が出たり、ClamAVのバージョンが古いぞ、だが動揺してはいかん!落ち着いてドキュメントを読んでね。。。なんてメッセージが出つつもスキャンを実行してくれます。

 F-Protは、Not Foundで終了。

 BitDefenderは、ウイルスデータベースのダウンロードを完了し、[Enter]で同意書が表示され、末尾に同意するなら[Enter]を。。。とあるが、ページ送りを[Enter]するmoreコマンド表示において、どうやったら同意できるのか不明。。。しかも、同意したらインストール処理が継続されると書いてある気がするけど、インストールするのか??

 Vexiraは、Forbiddenで終了。

 Avast!は、カッコ書きではじめにライセンスキーが必要な旨書いてあり、実行してみるとライセンスキー以前にNot Foundで終了。

 そこでメニューの[Help on virusscan]を見るとラッパースクリプトとしての一連の説明とディトロ・man作成時点における各種バグが書いてある程度。。。このキットからしてみればウイルス検知は、おまけだろうから、まぁ、いっか。

ウェブ造ホーム前へ次へ