SyslinuxでUSBメモリからWindowsインストールメディアを起動する
大学のメディアを使うときにちょっと詰まったのでメモ
コピペでできるように書いておきます
USBメモリ/インストールメディアに限定した話ではないけど、よく使うのがUSBメモリなのでとりあえずタイトルはこれで。
Arch Linuxで作ります。Ubuntuとか他のLinuxでも同じ感じでできるはず
必要なもの:
環境設定(Arch)
$ sudo pacman -S syslinux $ sudo pacman -S dosfstools # mkfs.vfat用 $ sudo pacman -S parted # fdiskでもOK
USBのフォーマットとパーティショニング
まずUSBメモリを特定する。適当に以下のコマンドを駆使して目星をつける。
$ sudo fdisk -l $ lsblk $ dmesg # USBを挿してすぐに見てみる
今回は/dev/sdkがUSBでした。
次にフォーマットとパーティショニング。partedを使う。
USBの中身は完全に消去されるので注意
$ sudo parted /dev/sdk (parted) p (parted) mklabel msdos (parted) mkpart primary fat32 0% 100% (parted) set 1 boot on (parted) p (parted) quit
ブートフラグを立てておく。
作成した/dev/sdk1をfat32でフォーマット
$ sudo mkfs.vfat /dev/sdk1
インストールメディアの書き込み
USBメディアとisoメディアをマウントしてisoのファイルをUSBにコピー。
$ sudo mkdir /mnt/{iso,usb} $ sudo mount -o loop ~/path_to_iso/Win_Installer.iso /mnt/iso $ sudo mount -o rw /dev/sdk1 /mnt/usb $ sudo cp -r /mnt/iso/* /mnt/usb/
おそらく/mnt/usb/boot/ができているはず...
Syslinuxをいれる
Syslinuxの本体のコピーとインストール
$ sudo mkdir /mnt/usb/boot/syslinux $ sudo cp -r /usr/lib/syslinux/bios/*.c32 /mnt/usb/boot/syslinux/ $ sudo extlinux --install /mnt/usb/boot/syslinux
これだけでは起動できないのでmbrを書き込む
$ sudo dd if=/usr/lib/syslinux/bios/mbr.bin of=/dev/sdk bs=440 count=1 conv=notrunc
設定ファイル(syslinux.cfg)がないので作成する
$ cd /mnt/usb/boot/syslinux/ $ sudo vim syslinux.cfg --------- vim --------- PROMPT 1 TIMEOUT 30 DEFAULT menu.c32 LABEL BOOTMGR MENU LABEL ^Windows-installer COM32 /boot/syslinux/chain.c32 APPEND fs ntldr=/bootmgr -----------------------
Windowsは/bootmgrを呼び出す必要があるみたいなので、chain.c32のオプションのntdlrで指定する。
bootmgrはWindows Vista以降で使われるブートローダー。
chain.c32はチェインロードを可能にするモジュール。syslinuxからbootmgrへとチェインロードする。
fsはパーティションを検出してくれる(らしい。よくわからないけど、消すとbootmgrを読み込んだあとエラーで落ちた)
ntldrはWindowsのブートローダーをロードするchain.c32のオプション。
Comboot/chain.c32 - Syslinux Wiki
あとかたづけ
$ cd $ sudo umount /mnt/usb $ sudo umount /mnt/iso
これで終了 qemu-KVMでは無事インストーラーが起動しました。 boot:が表示されて3秒後に起動するけど、起動しない場合はmenuと打ってみるといいかも?