Debian マシンを USBメモリ から立ち上げるようにすると、OSのバージョンアップが有った時等、USBメモリ を準備し差し替えれば良いのでとても便利です。

何か問題があっても元の USBメモリ に戻せば良いので安心です。

  • SDメモリをUSBカードリーダーに刺して使用した場合は、ハードディスクと同じに扱えばなんなく思った通りの事ができます。
  • USBメモリの場合は、色々上手くいかず、散々試行錯誤したところ、「Live USBの技法」を使うと上手くいくことを発見しました。

Live USBの技法

  • ハイブリッド形式のISOイメージを作成して、デバイスにコピーし、その後、デバイスの空き領域にパーティションを作成して利用するもの。
  • デバイスの初めの部分からべったり書き込まれるせいか、今のところ確実にブートする。公式のLive USBが採用しているのだから、充分に検証されているのだろう。
  • 但し、ISOイメージの部分は当然書き込みできない。従って、カーネルとラムディスク(initramfs)の更新だけは出来なくなる。
  • そこで、
  • の2通りの方法を検証した。

[Live USB のパーティションの例]
  • Partition1 => ブートローダーとDebian本体
      ハイブリッド形式のISOイメージ(Read only)
      Debian本体は、squashfsで圧縮されている

    マージン
    (任意)

    Partition2 => 読み書きエリア
      ファイルシステム:ext4等
      LABEL=persistence(予約語)

    Partition3
      => swap

    • <!> カーネルのブートパラメータに persistence が指定され、persistence というラベルの付いたパーティションのルートに persistence.conf がないと、読み書きエリアは使えるようにならない。

    • (!) ここで言っている読み書きエリアとは、単なるユーザーエリアではなく、リードオンリーのdebian本体に加えた変更を記録するためのエリア。

  • 作成方法
    1. 公式サイトからLiveシステムのISOファイルをダウンロード。
    2. cp コマンドでUSBメモリに直接書込み。
      • コマンド:cp debianXXXXXXXXX.iso /dev/sdx
      • (コピーするだけで、MBR、パーテションテーブル、Partition1まで書き込まれる)
    3. 読み書きエリアのパーティションを切り、ラベルを persistence に設定し、mkfsでフォーマットする。
    4. 読み書きエリアをマウントし、ルートに persistence.conf を作成する。
      • コマンド:echo '/ union' > /mount/point/persistence.conf

      • (persistence.conf は行末に改行コードが必須)
    5. ブートするとisolinuxが立ち上がるので、Tabキーでブートパラメーターに persistence を書き加えてブートする。
      • ブートする毎に書き加えるのが面倒

[ブートローダーに応用した方法のパーティションの例]
  • Partition1 => ブートローダー
      ハイブリッド形式のISOイメージ(Read only)

    マージン
    (任意)

    Partition2 => Debian本体
      ファイルシステム:ext4等
      LABEL=UsbOnDebian(例)

    Partition3
      => swap

    作成方法
    1. isolinux から grub4dos を呼び出す形式で、ハイブリッドISOファイルを作成。
    2. cp コマンドでUSBメモリに直接書込み。
    3. コマンド:cp bootloader.iso /dev/sdx
    4. (コピーするだけで、MBR、パーテションテーブル、Partition1まで書き込まれる)
    1. parted で Debian 用パーティションを切り、フォーマット。
    2. /dev/sdx2 にDebian のファイルシステム全体を展開する。
    3. ブート時の動作は、grub4dos の設定で自由に出来る。

Live USB をカスタマイズする方法

Live USB をスクラッチから作成する事も出来ますが、ツールがバギーな上、時間がやたらと掛かります。

Level 1(成功)

Level 2(成功)

  • ダウンロードしてきた Live USB のisoファイルの中身のうち、Debian本体をカスタマイズする。(アカウント作成、パスワード設定、パッケージ追加削除、等)

Level 3(成功)

パーティションの切り方を改善する

  • ハイブリッドISOファイルを何らかの事情で作り直したい場合を考慮して、パーティションを工夫すると手間が省ける。

ブートローダーのみ hybrid ISO にする方法

isolinux と grub4dos による方法(成功)

参考ページ

syslinux のメモ   grub4dos のメモ

作成方法
  1. isolinux から grub4dos を呼び出す形式で、ハイブリッドISOファイルを作成。
  2. cp コマンドでUSBメモリに直接書込み。
    • コマンド:cp bootloader.iso /dev/sdx
    • コピーするだけで、MBR、パーテションテーブル、第一パーティションまで書き込まれる。
  3. gparted で Debian 用パーティションを切り、フォーマット。
  4. /dev/sdx2 にDebian のファイルシステム全体を展開する。

設定方法
  • grub4dos の設定ファイル menu.lst から、Debian 本体を起動するには以下の方法がある。
    • パーテションのラベルから起動する
    • Debian 本体の Grub2、extlinux などをチェーンロードする

kexec-loader による方法(ほぼ成功)

  1. kexec-loader に必要なモジュール(ext2.tldとか)を組み込んで isoイメージを作成する。(kexec-loader のshファイルはそのままでは、Debian - Wheezy で動かない)(mkiso.sh kexec-loader.iso)

  2. isohybrid コマンドにより、USBメモリでもブートできるようにする。(isohybrid kexec-loader.iso)
  3. cp コマンドでUSBメモリに直接書込み。(cp kexec-loader.iso /dev/sdx)
  4. fdisk で Debian 用パーティションを切り、フォーマット。(fdisk /dev/sdx ; mkfs.ext4 /dev/sdx2)
  5. /dev/sdx2 にDebian のファイルシステム全体を展開する。
  6. /boot/grub/menu.list を編集して、ブートメニューを構成する。

isolinux と grub2 による方法(放置中)

grub-mkrescue を応用する方法(失敗)

SDメモリをUSBカードリーダーに刺して使用した場合

syslinux と kexec-loader による方法

  • syslinux は、syslinux と同じパーティションにあるカーネルと initramfs しかブートできない。
  • そこで、syslinux から kexec-loader を起動し、そこから目的のパーティションを起動する。検証中。[1]

grub4dosによる方法


Web ページ エラーの詳細

ユーザー エージェント: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)
タイムスタンプ: Wed, 24 Feb 2016 06:53:08 UTC


メッセージ: オブジェクトがありません。
ライン: 631
文字: 5
コード: 0
URI: http://ultra.tank.jp/moinmoin/moin_htdocs/common/js/common.js


脚注