虚拟化加载img镜像文件安装系统

虚拟化平台加载img文件安装操作系统

背景

今天在尝试openwrt的时候,发现x86的文件下载后是img镜像文件,对于习惯了iso文件来说,一时竟然没装上,遂,发现这是个知识点亦或是最近的行为有些脱离技术了,敏感度有些下降,但还是补充了一下这方面的知识;

总结了一下,有两种方式最方便,一种是转换,即把img转换为对应虚拟化平台的磁盘文件,直接启动就是成品;另一种是使用img刷入磁盘,然后在启动成品。

转换方法

转换img文件也有2中软件,其一为著名的QEMU,其二为StarWind v2v Converter;QEMU值得推荐,同时也支持3大平台,Linux、macOS、Windows。

同时,openwrt官网也提供多种虚拟化转换的方法;

Virtualization
Virtualization

QEMU

Download QEMU - QEMU

使用`qemu-img`命令将其转换为对应虚拟化平台的磁盘文件,直接启动即可;这种方法通用性强,兼容性也好;

支持的格式

Supported formats: blkdebug blklogwrites blkreplay blkverify bochs cloop copy-on-read dmg file ftp \
ftps host_cdrom host_device http https iscsi iser luks nbd null-aio null-co nvme \
parallels qcow qcow2 qed quorum raw rbd replication sheepdog ssh throttle \
vdi vhdx vmdk vpc vvfat

其中五种常用的格式:vmdk、qcow2、raw、vhdx、vdi;

其中vmdk为vmware的格式,包括vsphere和Workstation,qcow2和raw格式为Xen/KVM所支持的格式,而vhdx、vhd为hyper-v支持的;高版本的hyper-v(2016+)或第二代为vhdx,而老版本(2008-2012)或第一代为vhd。

上述格式或参数中,vpc生成的文件为vhd,而vhdx格式的参数则为vhdx

qemu-img是基于Linux的软件包来实现,所以需要一台Linux;并安装对应的软件包;

Ubuntu/Debian

sudo apt install qemu-utils -y

RHEL/CentOS

sudo yum install qemu-img -y

MAC

brew install qemu

使用方法

# 转换为第一代hyper-v或早期hyper-v版本(2008-2012)
# 注意是vpc参数,文件格式为vhd

# convert [--object objectdef] [--image-opts] [--target-image-opts] [--target-is-zero] [--bitmaps] [-U] [-C] [-c] [-p] [-q] [-n] [-f fmt] [-t cache] [-T src_cache] [-O output_fmt] [-B backing_file [-F backing_fmt]] [-o options] [-l snapshot_param] [-S sparse_size] [-r rate_limit] [-m num_coroutines] [-W] [--salvage] filename [filename2 [...]] output_filename

qemu-img convert -f raw file.img -O vpc openwrt.vhd

# 转换为第二代hyper-v或现代版hyper-v版本(2016+)
qemu-img convert -f raw raw file.img -O vhdx openwrt-21.02.0-rc3-x86-64-generic-squashfs-combined-efi.img openwrt-efi.vhdx

# 转换为vmware支持的格式
qemu-img convert -f raw raw file.img -O vmdk openwrt-21.02.0-rc3-x86-64-generic-squashfs-combined-efi.img openwrt-efi.vmdk

# 其他虚拟化格式
qemu-img convert -f raw file.img -O qcow2 file.qcow2

之后直接创建虚拟机启动即可;

StarWind v2v Converter

一个免费软件,支持V2V和P2V,官网地址

StarWind V2V Converter - Converting VM Formats (starwindsoftware.com)

写盘方式

采用直接写盘的方式;在这个方式中也有多种操作方法;区别只是在于在哪里进行写盘,可以使用winpe、liveCDlinux、Windows、Linux dd都可以;

winpe

由于winpe在内存加载操作系统,在进行物理机写盘的时候比较方便,或直接写到U盘中;工具推荐使用`PhysDiskWrite`,m0n0wall出品,方便快捷;

m0n0wall - physdiskwrite

方法也很简单,`physdiskwrite -u imgfile`即可,弹出磁盘序号,填入对应序号即可;查看磁盘序号可以通过“磁盘管理”中的序号。

liveCD

可以使用liveCD的方式加上`dd`命令或直接在某个虚拟化Linux上,新创建一块硬盘挂载上去,再用dd命令刷入目标磁盘;

# 先挂载
gunzip openwrt-15.05-x86-generic-combined-ext4.img.gz
# 查看磁盘列表
fdisk -l
dd if=openwrt-15.05-x86-generic-combined-ext4.img of=/dev/hda
# 重启或关机
reboot
# 在使用刷好后的磁盘创建一个虚拟机加载即可

Windows

在当前Windows上使用`diskpart`命令或“磁盘管理”创建一个虚拟磁盘,再使用工具刷进去,其中的工具也可以选择图形界面的Rufus - 轻松创建USB启动盘或是命令的physdiskwrite;创建的虚拟磁盘文件支持vhd和vhdx格式。对于hyper-v平台来说,最好不过。

win10直接在开始菜单搜索“磁盘管理”

创建完成后,在附加这个vhdx文件,在使用写盘工具,写入磁盘即可;

还有类似的方法也可以实现;在hyper-v上创建一个虚拟磁盘,之后附加,在用工具刷入,而且hyper-v还支持导入量产,即,在创建虚拟磁盘的时候,可以指定拷贝某个磁盘的内容。

后记

解决了过程,剩下的就是享受了,不管是openwrt还是其他的系统镜像文件,只要是带引导记录的,均可以使用此类方法进行各种环境的安装。