Linux を、USB メモリだけで起動して動かす方法 (Knoppix)

このソリューションは、Linux を、CD だけで起動して動かす方法 (Knoppix) をベースにしているものであり、必要なものとしては以下の通り。

  • Knoppix を焼いた CD-R(このエントリー執筆段階ではバージョン 5.0.1)
  • 1GB 以上の USB メモリ
  • USB メモリからブート可能な PC

USB メモリからブート可能な PC なんてわりと最近のじゃないとないと思うんだけど、Knoppix を CD-ROM から起動する方法に比べて何より音が静かだし(笑)、HDD や CD-ROM ドライブのように物理的に稼動する部分がない(突っ込まれないように言っておくと CPU ファンは動くけど)ので PC にもやさしい気がする。

CD-ROM の起動の場合と比べて USB メモリだから起動が速くなるかといえば、USB メモリの読み書きのスピードにもよると思うけど、体感的には私が試したものではそんなに変わらなかったような感じだ。ただ、CD-ROM からの起動の場合でも結局は永続ストレージとして USB メモリに作業環境を保存しておくのであれば、すべて USB メモリで完結していた方が美しいと思う。

その USB だが、「1GB 以上」という条件がつくのは、Knoppix は CD-ROM の容量ギリギリまで利用しているからであり、512MB の USB メモリだと残念ながら CD-ROM の容量に届かないから 1GB の USB メモリということになる。現時点で Knoppix のバージョンは 5.0.1 だけど、実は Knoppix のバージョンを落とせば 256MB の USB メモリ64MB の USB メモリに収めることはできるようだ。私も試しに一度 256MB のメモリに Knoppix を入れてみたのだけれど、KNOPPIX 3.6 とあって 5.0.1 を目にしてしまうとやはり 5.0.1 を動かしてみたいと思ったのであった。

そこでまずは「KNOPPIX のUSB化について」試した。このページには「この原理を利用すれば、CD-ROMから起動する、ほとんど全てのKUNOPPIXをUSB化することが可能になります。」とあったので 5.0.1 の CD-R からファイルを USB メモリに転送してみたのだが、 結論を言うとうまくいかなかった。USB メモリを認識して起動しかけるのだが、途中で「KNOPPIX のファイルシステムが見つからない」という英語のエラーメッセージが出てプロンプト状態になってしまう。そこで既存の情報を元に、力ずくで USB メモリへのインストールを試みた。


※以下は、Knoppipx 5.0.1 の起動後、コンソール上で作業を行った。

root@ttyp0[knoppix]# <font color="blue"><strong>su</strong></font>
↑ルートになる

root@ttyp0[knoppix]# <font color="blue"><strong>fdisk /dev/sda</strong></font>
↑fdisk コマンドでOS 用とデータ用に 2つ、パーティションを切る(以下)。

コマンド (m でヘルプ): <font color="blue"><strong>p</strong></font> <font color="gray">←現在のパーティションリストを表示</font>

Disk /dev/sda: 1023 MB, 1023934464 bytes
32 heads, 62 sectors/track, 1008 cylinders
Units = シリンダ数 of 1984 * 512 = 1015808 bytes

 デバイス Boot      Start         End      Blocks   Id  System
/dev/sda1               1        1008      999905   83  Linux

コマンド (m でヘルプ): <font color="blue"><strong>d</strong></font> <font color="gray">←パーティションを削除</font>
領域番号 (1-4): <font color="blue"><strong>1</strong></font> <font color="gray">←1番</font>

コマンド (m でヘルプ): <font color="blue"><strong>n</strong></font> <font color="gray">←新しいパーティションを作る</font>
コマンドアクション
   e   拡張
   p   基本領域 (1-4)
<font color="blue"><strong>p</strong></font> <font color="gray">←パーティションリストを表示</font>
領域番号 (1-4): <font color="blue"><strong>1</strong></font> <font color="gray">←最初のパーティション</font>
最初 シリンダ (1-1008, default 1): <font color="blue"><strong>[Enter キーを押す]</strong></font>
Using default value 1
終点 シリンダ または +サイズ または +サイズM または +サイズK (1-1008, default 1008): <font color="blue"><strong>717</strong></font> <font color="gray">←このくらいのサイズを用意する</font>

コマンド (m でヘルプ): <font color="blue"><strong>n</strong></font> <font color="gray">←2番目のパーティション</font>
コマンドアクション
   e   拡張
   p   基本領域 (1-4)
<font color="blue"><strong>p</strong></font>
領域番号 (1-4): <font color="blue"><strong>2</strong></font>
最初 シリンダ (718-1008, default 718): <font color="blue"><strong>[Enter キーを押す]</strong></font>
Using default value 718
終点 シリンダ または +サイズ または +サイズM または +サイズK (718-1008, default 1008): <font color="blue"><strong>[Enter キーを押す]</strong></font>
Using default value 1008

コマンド (m でヘルプ): <font color="blue"><strong>a</strong></font> <font color="gray">←ブートパーティションを</font>
領域番号 (1-4): <font color="blue"><strong>1</strong></font> <font color="gray">←最初のパーティションにマーク</font>

コマンド (m でヘルプ): <font color="blue"><strong>t</strong></font> <font color="gray">←FAT32のファイルシステムを</font>
領域番号 (1-4): <font color="blue"><strong>1</strong></font> <font color="gray">←最初のパーティションに設定</font>
16進数コード (L コマンドでコードリスト表示) : <font color="blue"><strong>b</strong></font>
領域のシステムタイプを 1 から b (W95 FAT32) に変更しました。

コマンド (m でヘルプ): <font color="blue"><strong>p</strong></font> <font color="gray">←パーティションリストを表示</font>

Disk /dev/sda: 1023 MB, 1023934464 bytes
32 heads, 62 sectors/track, 1008 cylinders
Units = シリンダ数 of 1984 * 512 = 1015808 bytes

 デバイス Boot      Start         End      Blocks   Id  System
/dev/sda1     *         1         717      711233    b  W95 FAT32
/dev/sda2             718        1008      288672   83  Linux

コマンド (m でヘルプ): <font color="blue"><strong>w</strong></font> <font color="gray">←変更を書き込む</font>
領域テーブルは交換されました!

ioctl() を呼び出して領域テーブルを再読込みします。
ディスクを同期させます。
root@ttyp0[knoppix]# <font color="blue"><strong>mkfs.vfat -v /dev/sda1</strong></font>
↑KNOPPIX が入るパーティションをフォーマット

root@ttyp0[knoppix]# <font color="blue"><strong>mount /dev/sda1 /media/sda1</strong></font>
↑USB メモリ中の最初のパーティションをマウントする

root@ttyp0[knoppix]# <font color="blue"><strong>mkdir /media/sda1/KNOPPIX</strong></font>
↑ディレクトリを作成

root@ttyp0[knoppix]# <font color="blue"><strong>cp -R /cdrom/KNOPPIX/* /media/sda1/KNOPPIX/</strong></font>
↑KNOPPIX のイメージをすべてコピー

root@ttyp0[knoppix]# <font color="blue"><strong>cp -R /cdrom/boot/isolinux/* /media/sda1/</strong></font>
↑ブートに関連するファイルをコピー

root@ttyp0[knoppix]# <font color="blue"><strong>syslinux /dev/sda1</strong></font>
↑ブートローダを書き込む

root@ttyp0[knoppix]# <font color="blue"><strong>mv /media/sda1/isolinux.cfg /media/sda1/syslinux.cfg</strong></font>
↑ブートローダは syslinux にするので名前変更

root@ttyp0[knoppix]# <font color="blue"><strong>shutdown -r now</strong></font>
↑システムをリブートする。
(シャットダウンしたらCD-R を抜き、USB メモリから起動するようにBIOS のチェックを忘れずに)

シェルスクリプト


#/!bin/sh

mkfs.vfat -v /dev/sda1
mount /dev/sda1 /media/sda1
mkdir /media/sda1/KNOPPIX
cp -R /cdrom/KNOPPIX/* /media/sda1/KNOPPIX/
cp -R /cdrom/boot/isolinux/* /media/sda1/
syslinux /dev/sda1
mv /media/sda1/isolinux.cfg /media/sda1/syslinux.cfg
shutdown -r now

※これでうまくいかない場合は、Windows から syslinux.exe -m を試してみること(syslinux はダウンロード )。