USBメモリからのPuppy Linux起動

急に思い立って、USBメモリからのLinuxの起動を試してみました。

予備調査として少しググってみたところでは、Puppy LinuxUSBメモリ起動に向いたディストリビューションらしい。ということで、Puppy LinuxUSBメモリに入れて、そこからの起動を試しました。

USBメモリからのブートで一般に難しいとされる点、

  • BIOSUSBメモリからのブートに対応しているとは限らない
  • USBメモリがブートに対応しているとは限らない

に加えて、

という固有の状況により、問題の切り分けが難しいのが最大の問題でした。

結果的には、多少の試行錯誤を要したものの、大きなトラブルなく起動に成功しました。さすがにPuppy Linuxは最初からUSBメモリからのブートを対象に含めているだけはありますね。

以下、作業メモです。

予備知識

作業環境

手順1: Puppy Linux ISOイメージの入手&マウント

適当なミラーサイトからPuppy LinuxのISOイメージをダウンロードし、適当なディレクトリ上にループバックマウントする。ここでは、/mnt/puppylinux/ と仮定する。

# mount /tmp/puppy-4.00.3-JP.iso /mnt/puppylinux -o ro,loop

手順2: USBメモリのフォーマット

SYSLINUXはFAT (FAT16/32) パーティションからの起動を前提としているので、必要に応じてUSBメモリをFATでフォーマットする必要がある。
fdiskで確認した限りでは、今回使用したUSBメモリは事前にFAT16でフォーマットされているようなので、特に作業は行わなかった。

手順3: Puppy Linux ISOイメージ上のファイルのコピー

「手順1」でマウントしたディレクトリ (/mnt/puppylinux/) 上の全ファイルを、「手順2」のUSBメモリにコピーする。今回の作業環境では、USBメモリは /media/disk/ にマウントされるので、コマンドラインとしては以下のようになる。

# cp /mnt/puppylinux/* /media/disk

手順4: syslinux設定ファイルの作成&編集

USBメモリ上に、syslinux経由で起動するカーネルの情報を記述する (grub.confに相当)。ここでの記述方法について、一次情報には当たっていないが、検索でヒットしたブログ記事を参考にして以下の作業を行った。

  1. /media/disk/ 直下のisolinux.cfgを、syslinux.cfg にリネーム
  2. syslinux.cfg中の pmedia=cd の部分を、pmedia=usbflash に修正

手順5: USBメモリへのsyslinuxインストール

念のためUSBメモリをアンマウントした後で、以下のコマンドでUSBメモリにsyslinuxをインストールした。ここで、-s オプションを外してもOKかどうかは未確認。

# syslinux -s /dev/sda1


ここで、/dev/sda1 は、USBメモリを指すデバイスファイルである。今回の作業環境では、USBメモリを差したときに自動的にマウントされるので、その後でmountコマンドを実行してデバイスファイル名を取得した。一般にどうやって取得できるかについては未調査。

なお、syslinuxコマンドは、Synapticを用いて事前にインストールしておいた。

手順6: 再起動→BIOS上での起動順序の設定

ブートデバイスとして内蔵HDDよりもUSBメモリを優先するように設定する。
今回の作業環境であるK8MM-Vでは、ブートデバイスとしてUSBメモリに相当するものが選択肢に現れないので、多少はまった。

試行錯誤の結果、以下のような仕掛けと判明した。

  • ブートデバイス優先順位とは別に「Hard Disk Boot Priotity」というメニューがあり、この中で接続したHDD間での優先順位を指定する。
  • USBメモリを接続した状態で起動すると、上記メニュー内に「USB 2.0 Flash Disk」という選択肢が現れる。

通常ではHDDがブートデバイスなので、Hard Disk Boot Priority の中で USB 2.0 Flash Disk を最優先に指定することで、期待通りPuppy Linuxが起動した。

まだPuppy Linux自体初めてなので、パッケージ追加などのカスタマイズは、Puppy Linuxの操作に慣れてから行う予定。