Desktop PC 128GB SSD へ Debian install (Hyper-V Pass through disk) その6
当日記ではアフィリエイト広告を利用しています
Hyper-V Path through 物理 SSD に install した debian を disk image (raw) にして vhd に変換し、Windows10 Hyper-V 第一世代の仮想マシンで起動する事が出来た。ただし、vhdx に変換してから Hyper-V 第二世代の仮想マシンでは起動できなかった。Microsoft UEFI の画面で停止していた。
hiro20180901.hatenablog.com
おそらく、vhdx が GPT に変換されていない為と推測した。MBR -> GPT に変換し、UEFI boot 出来るように修正する事により、Hyper-V 第二世代の仮想マシンで起動できると考え、試してみた。
vhdx MBR -> GPT 変換
Hyper-V 仮想 Ubuntuに vhdx 仮想ディスクを起動後に接続、MBR 形式から GPT 形式に変換した。
参考:
note.kurodigi.com
takuya-1st.hatenablog.jp
仮想 Ubuntu で以下の作業を行った。
- gdisk で MBR -> GPT に変換
# dpkg -S `which gdisk` gdisk: /sbin/gdisk # 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! *************************************************************** 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.
- gparted で先頭に ESP 領域用の 512 MB 程度の空き領域を作成 (root fs を減少させる)
# dpkg -S `which gparted` gparted: /usr/sbin/gparted # gparted /dev/sdc (root fs 領域の先頭を減少)
- gdisk で先頭を領域確保し、ESP 領域に変更
# gdisk /dev/sdc GPT fdisk (gdisk) version 1.0.3 Partition table scan: MBR: protective BSD: not present APM: not present GPT: present Found valid GPT with protective MBR; using GPT. Command (? for help): p Disk /dev/sdc: 250071360 sectors, 119.2 GiB Model: Virtual Disk Sector size (logical/physical): 512/512 bytes Disk identifier (GUID): 00000000-0000-00nn-0000-0000nnnn0000nn 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 250071326 Partitions will be aligned on 2-sector boundaries Total free space is 1052925 sectors (514.1 MiB) Number Start (sector) End (sector) Size Code Name 1 1050624 241684479 114.7 GiB 8300 Linux filesystem 5 241684480 250068991 4.0 GiB 8200 Linux swap Command (? for help): n Partition number (2-128, default 2): 2 First sector (34-250071326, default = 34) or {+-}size{KMGTP}: 34 Last sector (34-1050623, default = 1050623) or {+-}size{KMGTP}: Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): L ... 略 ... ed00 Sony system partitio ed01 Lenovo system partit ef00 EFI System ef01 MBR partition scheme ef02 BIOS boot partition f800 Ceph OSD ... 略 ... 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: 250071360 sectors, 119.2 GiB Model: Virtual Disk Sector size (logical/physical): 512/512 bytes Disk identifier (GUID): 00000000-0000-00nn-0000-0000nnnn0000nn 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 250071326 Partitions will be aligned on 2-sector boundaries Total free space is 2335 sectors (1.1 MiB) Number Start (sector) End (sector) Size Code Name 1 1050624 241684479 114.7 GiB 8300 Linux filesystem 2 34 1050623 513.0 MiB EF00 EFI System 5 241684480 250068991 4.0 GiB 8200 Linux swap 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.
- ESP 領域 を fat32 で mkfs
# dpkg -S `which mkfs.vfat` dosfstools: /sbin/mkfs.vfat # mkfs.vfat -F 32 /dev/sdc2
- root fs を /mnt に、ESP 領域を /mnt/boot に mount。root fs の /boot 以下を ESP 領域に移しておく。
# mount /dev/sdc1 /mnt/ # mount /dev/sdc2 /mnt/mnt # cd /mnt/mnt # ls /mnt/boot System.map-4.9.0-8-amd64 config-4.9.0-8-amd64 grub initrd.img-4.9.0-8-amd64 vmlinuz-4.9.0-8-amd64 # cp -pr /mnt/boot ./ # cd /mnt # umount /mnt/mnt # mount /dev/sdc2 /mnt/boot
- /proc、/dev、 /dev/pts、/sys を /mnt 以下に bind してから /mnt に chroot
# mount --bind /proc /mnt/proc # mount --bind /dev /mnt/dev # mount --bind /dev/pts /mnt/dev/pts # mount --bind /sys /mnt/sys # chroot /mnt
# apt install grub-efi
# grub-install --target=x86_64-efi --efi-directory=/boot --recheck --debug /dev/sdc # update-grub
Arch LinuxをUEFI + GPT環境にインストールする | クロの思考ノートの「ブートローダーのインストール」より引用:
UEFIファームウェアによってはブータブルスタブが特定の名前で特定の場所に置かれていないと起動できないものがあります。念の為に以下のコマンドを実行しておきます。
# mkdir /boot/EFI/boot # cp /boot/EFI/arch_grub/grubx64.efi /boot/EFI/boot/bootx64.efi
- chroot から抜けて後始末
# exit exit # umount /mnt/proc # umount /mnt/dev/pts # umount /mnt/sys # umount /mnt/dev # umount /mnt/boot # umount /mnt
Hyper-V 第二世代で仮想ディスク接続し起動...OK (修正要)
出来た vhdx を使用して、Hyper-V 第二世代の仮想マシンを作成し起動してみた。
- grub menu が ubuntu の物になるので、"e" で menuitem を編集し、vmlinuz と initrd と root fs を指定して起動した。tab 補完が効くので、file を探すのは難しくない。
- /boot を自動で mount するように fstab を編集した。
- 再度、grub-install と update-grub を実行した。
これで、再起動しても問題なく起動できるようになった。
結果
これまでの作業で、
- Hyper-V Path through 物理 SSD に Debian64 をinstall し、
- 仮想マシンでも実 PC でも起動でき、
- 仮想マシンの Ubuntu の dd で Path through 物理 SSD の中身を取り出し
- disk image を raw -> vhd に qemu-image で変換し、
- qemu から vhd 仮想ディスクで仮想マシンを起動できる事を確認し、
- Hyper-V 第一世代(vhd)で仮想マシンを起動できる事を確認し、
- vhd -> vhdx、更に MBR -> GPT に変換し、GPT の ESP 領域の Hyper-V UEFI で認識する場所に efi を配置し、
- Hyper-V 第二世代(vhdx)で仮想マシンを起動できる事を確認
という所まで実施できた。
/boot/EFI/boot/bootx64.efi が無いと Microsoft Hyper-V UEFI から起動できない、という所で引っ掛かってしまったが、無事起動できた。
実 PC から仮想化する時、あるいは MBR -> GPT に移行する時には、今回の経験が役立つと考えている。
次は、仮想ディスクから実 PC の SSD へ移して起動できるかどうか試してみる予定。