MBR(bios)からもESP(uefi)からも起動できるUSBメモリの作り方

MBR(bios)からもESP(uefi)からも起動できるUSBメモリの作り方

その1 バックアップとパーティション変更、フォーマット、2タイプのgrubのインストール

1 概要

  • UbuntuでブータブルUSBメモリを作成する手順
  • 2019/10/23現在だと、Ubuntu18.04を利用して作成してください。
  • 今後Ubuntu 19系でもgrubのバージョンアップにより不具合なしのものが同じ手順で作成できるようになるかも

2 注意

  • 2019/10/23現在だと、Ubuntu18.04を利用して作成してください。19.10ではgrubが2.04でisoイメージを起動するときに利用するloopbackのところでフリーズしています。

3 手順

**以下の操作を行っている動画




3.1 必要パッケージのインストール

sudo apt install dosfstools e2fsprogs gdisk util-linux

3.2 USBメモリ接続

接続したら、自動マウントされるので、取り出しではなくアンマウント

sudo umount マウントポイント(ディレクトリ)
sudo umount /media/user/xxxx-xxx-xxx

3.3 現状のバックアップ

3.3.1 現状のディスクイメージのパーティション情報保存

  • /dev/sdc はマシンや環境で変化するので、実際に使いたいUSBメモリのデバイスを割り当てたものを使ってください。(/dev/sdb,/dev/sddとかの場合もあり)
sudo gdisk -l /dev/sdc
Number  Start (sector)    End (sector)  Size       Code  Name
   1              34            2047   1007.0 KiB  EF02  BIOS boot partition
   2            2048         1024000   499.0 MiB   EF00  EFI System
   3         1026048        10485726   4.5 GiB     8300  Linux filesystem

3.3.2 初期状態のパーティション情報のバックアップ

  • 以下のコマンドで usborggdisk-l.txt に情報が保存される
  • /dev/sdc はマシンや環境で変化するので、実際に使いたいUSBメモリのデバイスを割り当てたものを使ってください。(/dev/sdb,/dev/sddとかの場合もあり)
sudo gdsik -l /dev/sdc > usb_org_gdisk-l.txt

3.3.3 初期状態のフルバックアップ(USBメモリ)

  • 以下のコマンドで usborg.img.gz っていうファイル名でgzip圧縮したイメージをバックアップできます。
  • 私は32GのUSBメモリで以下のコマンドを実行した時数時間必要になりました。相当時間かかります。
  • パーティション情報から空のディスクを生成可能なので、このバックアップ作業をスキップしても良い
sudo cat /dev/sdc | gzip -9c > usb_org.img.gz

3.4 ディスクパーティション変更

  • 以下のコマンドでパーティションを変更するコマンドを実行
  • /dev/sdc はマシンや環境で変化するので、実際に使いたいUSBメモリのデバイスを割り当てたものを使ってください。(/dev/sdb,/dev/sddとかの場合もあり)
sudo gdisk /dev/sdc

3.4.1 gdisk 起動して、初期のパーティション確認、その後初期パーティション削除

$ sudo  gdisk /dev/sdc
GPT fdisk (gdisk) version 1.0.3

Partition table scan:
  MBR: MBR only
  BSD: not present
  APM: not present
  GPT: not present


***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory. THIS OPERATION IS POTENTIALLY DESTRUCTIVE! Exit by
typing 'q' if you don't want to convert your MBR partitions
to GPT format!
***************************************************************

Warning! Main partition table overlaps the first partition by 2 blocks!
Try reducing the partition table size by 8 entries.
(Use the 's' item on the experts' menu.)

Warning! Secondary partition table overlaps the last partition by
33 blocks!
You will need to delete this partition or resize it in another utility.

Command (? for help): p
Disk /dev/sdc: 61741056 sectors, 29.4 GiB
Model: USB DISK        
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): CC3D509A-4DB7-47F6-B6BC-8A51B37DADEC
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 61741022
Partitions will be aligned on 32-sector boundaries
Total free space is 0 sectors (0 bytes)

Number  Start (sector)    End (sector)  Size       Code  Name
   1              32        61741055   29.4 GiB    0700  Microsoft basic data

Command (? for help): d
Using 1

Command (? for help): p
Disk /dev/sdc: 61741056 sectors, 29.4 GiB
Model: USB DISK        
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): CC3D509A-4DB7-47F6-B6BC-8A51B37DADEC
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 61741022
Partitions will be aligned on 32-sector boundaries
Total free space is 61740989 sectors (29.4 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name

3.4.2 MBRパーティション作成

  • 設定変更
Expert command (? for help): l
Enter the sector alignment value (1-65536, default = 2048): 1

Expert command (? for help): m
  • パーティション追加
Command (? for help): n
Partition number (1-128, default 1): 
First sector (34-61741022, default = 34) or {+-}size{KMGTP}: 
Last sector (34-61741022, default = 61741022) or {+-}size{KMGTP}: 2047
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): ef02
Changed type of partition to 'BIOS boot partition'

  • パーティション確認
Command (? for help): p
Disk /dev/sdc: 61741056 sectors, 29.4 GiB
Model: USB DISK        
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): CC3D509A-4DB7-47F6-B6BC-8A51B37DADEC
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 61741022
Partitions will be aligned on 1-sector boundaries
Total free space is 61738975 sectors (29.4 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1              34            2047   1007.0 KiB  EF02  BIOS boot partition

  • 設定を元に戻す
Command (? for help): x

Expert command (? for help): l
Enter the sector alignment value (1-65536, default = 2048): 

Expert command (? for help): m

3.4.3 ESP用パーティション作成

Command (? for help): n
Partition number (2-128, default 2): 
First sector (2048-61741022, default = 2048) or {+-}size{KMGTP}: 
Last sector (2048-61741022, default = 61741022) or {+-}size{KMGTP}: +500M
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): ef00
Changed type of partition to 'EFI System'

  • パーティション確認
Command (? for help): p
Disk /dev/sdc: 61741056 sectors, 29.4 GiB
Model: USB DISK        
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): CC3D509A-4DB7-47F6-B6BC-8A51B37DADEC
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 61741022
Partitions will be aligned on 2048-sector boundaries
Total free space is 60714975 sectors (29.0 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1              34            2047   1007.0 KiB  EF02  BIOS boot partition
   2            2048         1026047   500.0 MiB   EF00  EFI System

3.4.4 grub関係用パーティション作成

  • 動画ではパーティションサイズの前に+をいれてませんが、入れたらそのサイズのパーティションを割当可能です
Command (? for help): n
Partition number (3-128, default 3): 
First sector (1026048-61741022, default = 1026048) or {+-}size{KMGTP}: 
Last sector (1026048-61741022, default = 61741022) or {+-}size{KMGTP}: +600M
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 
Changed type of partition to 'Linux filesystem'

Command (? for help): p
Disk /dev/sdc: 61741056 sectors, 29.4 GiB
Model: USB DISK        
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): CC3D509A-4DB7-47F6-B6BC-8A51B37DADEC
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 61741022
Partitions will be aligned on 2048-sector boundaries
Total free space is 59486175 sectors (28.4 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1              34            2047   1007.0 KiB  EF02  BIOS boot partition
   2            2048         1026047   500.0 MiB   EF00  EFI System
   3         1026048         2254847   600.0 MiB   8300  Linux filesystem

3.4.5 データ用パーティション作成

  • 動画ではパーティションサイズの前に+をいれてませんが、入れたらそのサイズのパーティションを割当可能です
Command (? for help): n
Partition number (4-128, default 4): 
First sector (2254848-61741022, default = 2254848) or {+-}size{KMGTP}: 
Last sector (2254848-61741022, default = 61741022) or {+-}size{KMGTP}: 
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 
Changed type of partition to 'Linux filesystem'

Command (? for help): p
Disk /dev/sdc: 61741056 sectors, 29.4 GiB
Model: USB DISK        
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): CC3D509A-4DB7-47F6-B6BC-8A51B37DADEC
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 61741022
Partitions will be aligned on 2048-sector boundaries
Total free space is 0 sectors (0 bytes)

Number  Start (sector)    End (sector)  Size       Code  Name
   1              34            2047   1007.0 KiB  EF02  BIOS boot partition
   2            2048         1026047   500.0 MiB   EF00  EFI System
   3         1026048         2254847   600.0 MiB   8300  Linux filesystem
   4         2254848        61741022   28.4 GiB    8300  Linux filesystem

3.4.6 変更書き込み

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/sdc.
The operation has completed successfully.

3.5 作成した後のディスクパーティション確認

gdisk -l /dev/sdc

3.6 変更したパーティションのフォーマット

sudo /sbin/mkfs.vfat -F32 /dev/sdc2
sudo /sbin/mkfs.ext4  /dev/sdc3
sudo /sbin/mkfs.ext4  /dev/sdc4

3.7 grubのインストールMBR用

sudo mount /dev/sdc3 /mnt
sudo grub-install --target=i386-pc --boot-directory=/mnt/boot --force /dev/sdc

3.8 grubのインストールESP用

sudo mkdir /mnt/boot/efi
sudo mount /dev/sdc2 /mnt/boot/efi
sudo grub-install --target=x86_64-efi --efi-directory=/mnt/boot/efi --boot-directory=/mnt/boot

3.9 アンマウント

sudo umount /mnt/boot/efi
sudo umount /mnt

wget -m -l 1 http://releases.ubuntu.com/19.10/MD5SUMS http://releases.ubuntu.com/19.10/ubuntu-19.10-desktop-amd64.iso

cd releases.ubuntu.com/19.10/ cat MD5SUMS cat ubuntu-19.10-desktop-amd64.iso.md5sum

sudo mount /dev/sdc4 /mnt
sudo cp ubuntu-19.10-desktop-amd64.iso* /mnt/ISO/
sudo touch /mnt/ISO/usbMemoryBoot.txt 
sudo tree /mnt
sudo umount /mnt

3.10 grub.cfg を作成し適切な場所にコピー

insmod iso9660
insmod part_gpt
insmod fat
insmod ext2
insmod ext4

set dafault=0
set timeout=20

menuentry 'ubuntu-19.10-desktop-amd64.iso' {
    search --file --set isopart /ISO/usbMemoryBoot.txt 
    set isofile="/ISO/ubuntu-19.10-desktop-amd64.iso"
    loopback loop ($isopart)$isofile
    linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile debian-installer/language=ja keyboard-configuration/layoutcode?=jp keyboard-configuration/modelcode?=jp106 noeject quiet splash --
    initrd (loop)/casper/initrd.lz
}
  • コピーは以下のコマンドで
sudo mount /dev/sdc3 /mnt
sudo cp -i grub.cfg /mnt/boot/grub/
sudo umount /mnt

3.11 qemu でテスト

  • qemuをインストール設定済みでkvmを利用した場合は以下のコマンドで実行可能
  • /dev/sdc はマシンや環境で変化するので、実際に使いたいUSBメモリのデバイスを割り当てたものを使ってください。(/dev/sdb,/dev/sddとかの場合もあり)
  • qemuでなく実機で確認する方がよいかも
sudo kvm -m 1G -hda /dev/sdc

4 続きを追記してきます。

  • 初版 2019/10/23

著者: NM Max

Created: 2019-10-23 水 19:47

Validate

QemuにUbuntuの1つ前の安定バージョン18.04.1をインストールしてみた

以前、Ubuntu18.04.2 をqemuにインストールしたら、
再起動時に異常に時間がかかって、うまくいきませんでした。
その動画録画前に18.04.1だとうまくインストールできてたので、
18.04.1でやってみた動画になってます。
結果はみてのお楽しみってことで

Ubuntu18.04.1 (一つ前の安定バージョン)のisoイメージのリンクは以下にあります

http://cdimage.ubuntulinux.jp/releases/18.04.1/

http://cdimage.ubuntulinux.jp/releases/18.04.1/

以下が実際に行ったコマンド入力

# installディスクイメージダウンロード
 wget "http://cdimage.ubuntulinux.jp/releases/18.04.1/ubuntu-ja-18.04.1-desktop-amd64.iso"

# installディスクイメージのmd5sumダウンロード
wget "http://cdimage.ubuntulinux.jp/releases/18.04.1/MD5SUMS"

# md5sum計算してmemo.txtにいれる
# bd606d253091edca54e56e4ffc2dce74  ubuntu-ja-18.04.1-desktop-amd64.iso
# bd606d253091edca54e56e4ffc2dce74
md5sum ubuntu-ja-18.04.1-desktop-amd64.iso >> memo.txt

#  インストール先のディスクイメージ作成
qemu-img create -f qcow2 ubuntu-ja-18.04.1-desktop-amd64.qcow2 30G

# インストール開始
kvm-spice -m 2G -hda ubuntu-ja-18.04.1-desktop-amd64.qcow2 -cdrom ubuntu-ja-18.04.1-desktop-amd64.iso -boot d

# ディスクイメージバックアップ
cat ubuntu-ja-18.04.1-desktop-amd64.qcow2  | gzip -c > ubuntu-ja-18.04.1-desktop-amd64.qcow2.01.gz

# インストールディスクなしで起動
kvm-spice -m 2G -hda ubuntu-ja-18.04.1-desktop-amd64.qcow2

# ディスクイメージバックアップ2
cat ubuntu-ja-18.04.1-desktop-amd64.qcow2  | gzip -c > ubuntu-ja-18.04.1-desktop-amd64.qcow2.02_after_reboot_inst_some_packages.gz

# メモリキャッシュをはきだして、ちゃんとhddに保存
sync

ターミナルでの操作の様子を記録、再生出来るソフトの紹介(asciinema, script, scriptreplay)

asciinemaの場合

録画

#ターミナルの録画開始
#asciinema rec 録画ファイル名
asciinema rec test1.castt

.....なにかの操作

#録画終了
exit

で録画可能です。

再生

再生するには以下

#asciinema play 録画ファイル名
asciinema play test1.cast

script, scriptreplayの場

録画

#script --timing=録画タイミングファイル名 録画ファイル名 (2つファイルが必要)
script --timing=test2.t test2.log

再生

# scriptreplay -t タイミング保存ファイル名 録画ファイル名
scriptreplay -t test2.t test2.log

Qemuのディスクイメージを拡大のやり方(12Gから29Gに)

#qemuのディスクイメージのりサイズ
qemu-img resize ubuntu-ja-19.04.qcow2 30G

#qemuの起動
 kvm-spice -m 2G -hda ubuntu-ja-19.04.qcow2

#qemu内でパーティションサイズの変更
sudo fdisk /dev/sda

#再起動後、またqemu1内でext4fsのりサイズ
sudo resize2fs /dev/sda1 29G

  • Qemuディスクイメージのりサイズ
  • パーティションの切り直し(仮想マシン内で操作)
  • ext4fsのリサイズ(仮想マシン内での操作)

の3つの操作をすることにより、再度インストールしなおすとか、ファイルを全部バックアップして、再度書き込み等必要なしで、動作させながら、パーティションのサイズの拡大が可能です。超便利!!!

Qemuのqcow2イメージのマウントとアンマウント、ファイルの出し入れ

#必要なコマンドインストール
sudo apt install libguestfs-tools

#マウントするディレクトリ作成
mkdir -p sda1

#イメージのパーティション確認
sudo guestmount -a ubuntu-ja-19.04.qcow2 -m /dev/sdddd sda1

#マウント
sudo guestmount -a ubuntu-ja-19.04.qcow2 -m /dev/sda1 sda1

#アンマウント
sudo guestumount sda1

複数あるQemuのイメージファイルのマウント、アンマウント方法の1つのやり方の紹介。

これが出来るとほぼやりたいこと、全部出来ると思います。

apt-fileメチャメチャ便利(Ubuntu、Debian)

#apt-fileインストール
sudo apt install apt-file

#apt-fileのインデックス更新
sudo apt-file update

#キーワードを含むファイルが含まれてるパッケージを探す
apt-file search キーワード

# ex. apt-file search BeautifulSoup 

apt-file メチャメチャ便利なので是非使ってみてください。

キーワードを含むファイルを含んでるパッケージを簡単にみつけれます。

見つけたパッケージをインストールして、問題あっという間に解決できます。

Qemu(仮想マシン)にUbuntuをインストール

数日前にversion18.04.1ですんなりインストールできたので、今回はそのあとアップデートされた、18.04.2のUbuntuをインストールしようとしたのですが、うまくかず、再起動ご再起動に非常に時間がかかるという不具合が発生しました。

18.04.1の時はすんなりインストールできたので、マイナーバージョンアップしたときのどれかのパッケージとの相性か、問題が発生したかだと思いますが、詳しい原因は調べてません。

19.04のUbuntuだとすんなりインストールできたので、Qemuにインストールするなら、18.04.1か19.04にすることをお勧めします。

#インストールCDイメージのダウンロード
wget "http://cdimage.ubuntulinux.jp/releases/18.04.2/ubuntu-ja-18.04.2-desktop-amd64.iso"
wget "http://cdimage.ubuntulinux.jp/releases/19.04/ubuntu-ja-19.04-desktop-amd64.iso"

# md5sumでちぇっく
# d5512ee9315ff79b8df6dc7778875107  ubuntu-ja-18.04.2-desktop-amd64.iso
# d6f0d147a5e9b1e64a764f4f3ad49d3a  ubuntu-ja-19.04-desktop-amd64.iso

md5sum ubuntu-ja-18.04.2-desktop-amd64.iso
md5sum ubuntu-ja-19.04-desktop-amd64.iso

#必要なパッケージのインストール(Ubuntu,Debianの場合)
sudo apt install qemu-utils qemu-system-x86 qemu-kvm 

#インストール用イメージ作成
qemu-img create -f qcow2 ubuntu-ja-19.04.qcow2 12G

#インストール開始、再起動になってメディア抜いてってメッセージでたら、そこで強制終了
kvm-spice -m 2G -cdrom ubuntu-ja-19.04-desktop-amd64.iso --hda ubuntu-ja-19.04.qcow2 -boot d

#現在のイメージのバックアップ1
cat ubuntu-ja-19.04.qcow2 | gzip -c > ubuntu-ja-19.04.qcow2.01.gz

#残りのインストール手順を実行
kvm-spice -m 2G -hda ubuntu-ja-19.04.qcow2 

#現在のイメージのバックアップ2
cat ubuntu-ja-19.04.qcow2 | gzip -c > ubuntu-ja-19.04.qcow2.02.gz

QEMUにUbuntu18.04.1をインストールする手順の動画を作ろうと思ってます。

Youtubeとブログを毎日更新しようとしてましたが、早速ブログは投稿できず、Youtubeはまだ再開できていません。

最近やった作業で、Youtubeでアップしても良い気がするものとして、QEMU(仮想マシン)にUbuntu18.04.1をインストールする作業とか、作った後で、ディスクの容量を変化させる作業をしたので、それを動画にしようかと思ってます。

カーネルモジュールを使うと、相当サクサク動くようになっていて、ノーマルよりは遅いんだけど、QEMUめっちゃ使い心地改善されてました。久しぶりに使ってみたんだけど

動画をYoutubeにアップできたら、手順と動画へのリンクを追加しますね!