Linux 上で fedora12 の LiveUSB を作成する方法 (CentOS 5.4版)


1、作業場所と必要なツールを用意する。
    Fedora12 の LiveCD 用のイメージファイル(例:Fedora-12-i686-Live.iso)
    USB から linux を起動するためのローダー(syslinuxの最新版:syslinux-3.83.zip)
[root@centos ~]# mkdir  /mnt/cd /mnt/usb
[root@centos ~]# mkdir  /opt/LiveUSB
[root@centos ~]# cd  /opt/LiveUSB
[root@centos LiveUSB]# wget http://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-3.83.zip
    :
[root@centos LiveUSB]# wget http://download.fedoraproject.org/pub/fedora/linux/releases/12/Live/i686/Fedora-12-i686-Live.iso
    :
[root@centos LiveUSB]#

2、使用するUSBメモリーの状況を確認する。
[root@centos LiveUSB]# fdisk -l | grep -i fat
/dev/sdb1   *           1        4310     3986431+   c  W95 FAT32 (LBA)
[root@centos LiveUSB]# mount /dev/sdb1 /mnt/usb
[root@centos LiveUSB]# ls -als /mnt/usb
合計 16
4 drwxr-xr-x 3 root root 4096  1月  1  1970 .
8 drwxr-xr-x 4 root root 4096 12月  2 16:38 ..
4 drwxr-xr-x 3 root root 4096 12月  2 16:37 old-data
[root@centos LiveUSB]# umount /mnt/usb
[root@centos LiveUSB]#

3、USBメモリーを LibeUSB 用に初期化する。
[root@centos LiveUSB]# dd if=/dev/zero of=/dev/sdb bs=512 count=1
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.003384 seconds, 151 kB/s
[root@centos LiveUSB]# fdisk /dev/sdb
デバイスは正常な DOS 領域テーブルも、Sun, SGI や OSF ディスクラベルも
含んでいません
新たに DOS ディスクラベルを作成します。あなたが書き込みを決定するまで、変更は
メモリ内だけに残します。その後はもちろん以前の内容は修復不可能になります。
警告: 領域テーブル 4 の不正なフラグ 0x0000 は w(書き込み)によって
正常になります

コマンド (m でヘルプ): m
コマンドの動作
   a   ブート可能フラグをつける
   b   bsd ディスクラベルを編集する
   c   dos 互換フラグをつける
   d   領域を削除する
   l   既知の領域タイプをリスト表示する
   m   このメニューを表示する
   n   新たに領域を作成する
   o   新たに空の DOS 領域テーブルを作成する
   p   領域テーブルを表示する
   q   変更を保存せずに終了する
   s   空の Sun ディスクラベルを作成する
   t   領域のシステム ID を変更する
   u   表示/項目ユニットを変更する
   v   領域テーブルを照合する
   w   テーブルをディスクに書き込み、終了する
   x   特別な機能 (エキスパート専用)

コマンド (m でヘルプ): o
新たに DOS ディスクラベルを作成します。あなたが書き込みを決定するまで、変更は
メモリ内だけに残します。その後はもちろん以前の内容は修復不可能になります。
警告: 領域テーブル 4 の不正なフラグ 0x0000 は w(書き込み)によって
正常になります

コマンド (m でヘルプ): w
領域テーブルは交換されました!

ioctl() を呼び出して領域テーブルを再読込みします。
ディスクを同期させます。
[root@centos LiveUSB]#

4、USB メモリーにパーティションを作成し、FAT32 でフォーマット、ブートフラグをセットする。
[root@centos LiveUSB]# parted /dev/sdb
GNU Parted 1.8.1
/dev/sdb を使用
GNU Parted へようこそ! コマンド一覧を見るには 'help' と入力してください。
(parted) help
  check NUMBER                  ファイルシステムの簡単なチェックする
  cp [転送元デバイス] 転送元NUMBER 転送先NUMBER
                    ファイルシステムを他のパーティションにコピーする
  help [コマンド]               ヘルプ表示。コマンド指定でそのヘルプを表示
  mklabel,mktable LABEL-TYPE               create a new disklabel (partition table)
  mkfs NUMBER ファイルシステムの種類
                    指定した種類のファイルシステムを作る
  mkpart パーティションの種類 [ファイルシステムの種類] 開始 終了
                    パーティションを作る
  mkpartfs パーティションの種類 ファイルシステムの種類 開始 終了
                    パーティションとファイルシステムを作る
  move NUMBER 開始 終了          パーティションを移動する
  name NUMBER 名前               パーティションに名前をつける
  print [free|NUMBER|all]       パーティションテーブルを表示する
  quit                          プログラムを終了する
  rescue 開始 終了               開始、終了で指定した範囲付近にあるパーティションを復活させる
  resize NUMBER 開始 終了       パーティションとその中のファイルシステムをリサイズする
  rm NUMBER                     パーティションを削除する
  select デバイス               操作するデバイスを選択
  set NUMBER フラグ 状態        ファイルシステムのフラグと状態を設定する
  toggle [NUMBER [FLAG]]        パーティションのフラグの状態を反転する
  unit UNIT                     デフォルトの単位を UNIT にする
  version                       GNU Parted のバージョンと著作権情報を表示
(parted) p

モデル: Kingmax USB2.0 FlashDisk (scsi)
ディスク /dev/sdb: 4082MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos

番号  開始  終了  サイズ  タイプ  ファイルシステム  フラグ

(parted)mkpart
パーティションの種類?  primary/プライマリ/extended/拡張? primary
ファイルシステムの種類?  [ext2]? fat32
開始? 1
終了? 4082MB
(parted) p

モデル: Kingmax USB2.0 FlashDisk (scsi)
ディスク /dev/sdb: 4082MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos

番号  開始    終了    サイズ  タイプ      ファイルシステム  フラグ
 1    0.51kB  4082MB  4082MB  プライマリ  fat32             lba   

(parted) set 1 boot on
(parted) mkfs
警告: The existing file system will be destroyed and all data on the partition will be lost. Do you want to continue?
はい(Y)/Yes/いいえ(N)/No? y
パーティション番号? 1
ファイルシステム?  [ext2]? fat32
(parted) p

モデル: Kingmax USB2.0 FlashDisk (scsi)
ディスク /dev/sdb: 4082MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos

番号  開始    終了    サイズ  タイプ      ファイルシステム  フラグ   
 1    0.51kB  4082MB  4082MB  プライマリ  fat32             boot, lba

(parted) q
通知: 必要であれば /etc/fstab を更新するのを忘れないようにしてください。  

5、USB メモリーに LiveCD のデータをコピーする。 ( LiveOS、isolinux )
    CD-ROMの LiveOS 配下は、USBにも同じ名前のディレクトリを作成しコピーする。
    CD-ROMでは isolinux ディレクトリに配置されるが、 USBでは、syslinux ディレクトリ配下に変更する。
    CD-ROMの設定ファイル名は isolinux.cfg であるが、USBの場合の設定ファイル名は syslinux.cfg でなければならない。
    USBでは使用しないので削除可能なファイル GPL、EFIディレクトリ配下の全ファイル、LiveOS/livecd-iso-to-disk
        isolinux/boot.cat、isolinux/isolinux.bin、isolinux/isolinux.cfg
[root@centos LiveUSB]# mount `pwd`/Fedora-12-i686-Live.iso /mnt/cd -o loop
[root@centos LiveUSB]# mount /dev/sdb1 /mnt/usb
[root@centos LiveUSB]# ls -als /mnt/usb
合計 12
4 drwxr-xr-x 2 root root 4096  1月  1  1970 .
8 drwxr-xr-x 4 root root 4096 12月  2 16:38 ..
[root@centos LiveUSB]# cp -r /mnt/cd/LiveOS/ /mnt/usb
[root@centos LiveUSB]# mkdir /mnt/usb/syslinux
[root@centos LiveUSB]# cp /mnt/cd/isolinux/* /mnt/usb/syslinux/
[root@centos LiveUSB]# cp /mnt/usb/syslinux/isolinux.cfg /mnt/usb/syslinux/syslinux.cfg

6、USB メモリーの UUID を確認し、LiveUSB 用の設定ファイル syslinux.cfg を変更する。
    CD-ROMでは、LABELを使ってメディアをマウントするが、USBでは、UUIDを用いてメディアのマウントする様に変更する。
    UUIDは、blkid コマンドで確認し、マウントするメディアの指定部(CDLABEL=Fedora-12-i686-Live)を変更する。
[root@centos LiveUSB]# blkid | grep -i vfat
/dev/sdb1: UUID="5239-FC1F" TYPE="vfat"
[root@centos LiveUSB]# vi /mnt/usb/syslinux/syslinux.cfg
[root@centos LiveUSB]# diff /mnt/usb/syslinux/isolinux.cfg /mnt/usb/syslinux/syslinux.cfg
22c22
<   append initrd=initrd0.img root=live:CDLABEL=Fedora-12-i686-Live rootfstype=auto ro liveimg quiet  rhgb rd_NO_LUKS rd_NO_MD noiswmd
---
>   append initrd=initrd0.img root=live:UUID=5239-FC1F rootfstype=auto ro liveimg quiet  rhgb rd_NO_LUKS rd_NO_MD noiswmd
27c27
<   append initrd=initrd0.img root=live:CDLABEL=Fedora-12-i686-Live rootfstype=auto ro liveimg quiet  rhgb check
---
>   append initrd=initrd0.img root=live:UUID=5239-FC1F rootfstype=auto ro liveimg quiet  rhgb check
[root@centos LiveUSB]#

7、syslinux を使用して、USB メモリーを linux ブータブルにする。
    ダウンロードした、syslinux のアーカイブを展開する。
    linux ディレクトリにあるELF形式の実行ファイル syslinux を用いて USB を linux ブータブルにする。
    【 Usage: syslinux [-sf] [-d direcotory] device 】
    sync により、キャッシュされているデータ分についても USB に書き込む。
[root@centos LiveUSB]# mkdir 83
[root@centos LiveUSB]# cd 83
[root@centos 83]# unzip -q ../syslinux-3.83.zip
[root@centos 83]# cd linux
[root@centos linux]# ./syslinux -f -d syslinux /dev/sdb1
[root@centos linux]# 
[root@centos linux]# sync
[root@centos linux]# sync


fedora 12 の LiveUSB 化が完了したので、システムを再起動し、正しく動作する事を確認する。