qemu 加载ubuntu

11 篇文章 0 订阅

加载ubuntu

# 注意:修改成自己对应的文件路径

# 创建镜像
dd if=/dev/zero of=ubuntu.img bs=1M count=8192
# 使用qemu-img 创建 推荐
qemu-img create -f qcow2 ubuntu.img 40G

# 从官网下载镜像
# 初次加载安装,跟普通的安装系统一样
./build/qemu-system-x86_64 \
    -m 2G -smp 2 \
    --enable-kvm  \
    -boot order=dc \
    -hda ubuntu.img \
    -cdrom ubuntu-20.04.4-live-server-amd64.iso  \
    -vnc :1

# 这里还需要vncview去连接,端口号为 5901
# 后面的直接从磁盘启动即可
./build/qemu-system-x86_64  \
    -m 2G -smp 2 \
    --enable-kvm  \
    -boot order=c \
    -hda ubuntu.img \
    -nic user,id=virtionet1,model=virtio-net-pci,hostfwd=tcp::8869-:22 \
    -vnc :1
   
 # -nic 设置网卡选项,hostfwd表示宿主机的8869端口映射到虚拟机的22端口,能通过ssh连接

安装成功后,首次普通启动
在这里插入图片描述
如果命令行出现警告 WARNING: Image format was not specified for '' and probing guessed raw. Automatically detecting the format is dangerous for raw images, write operations on block 0 will be restricted. Specify the 'raw' format explicitly to remove the restrictions.

指定文件格式

# 查看镜像文件信息
./build/qemu-img info filename

# hda 是 -drive file=file,index=0,media=disk 的简写形式
./build/qemu-system-x86_64  \
    -m 2G -smp 2 \
    --enable-kvm  \
    -boot order=c \
    -drive file=ubuntu.imgindex=0,media=disk,format=qcow2 \
    -nic user,id=virtionet1,model=virtio-net-pci,hostfwd=tcp::8869-:22 \
    -vnc :1

qemu和宿主机共享磁盘

# 创建硬盘镜像
qemu-img create -f raw disk.raw 10G
# 格式化
mkfs -t ext4 ./disk.raw
# 以 loop 方式将磁盘镜像文件挂载到一个目录上,方便操作镜像中的文件
sudo mount -o loop ./disk.raw ./img
# 卸载镜像
sudo umount ./disk.raw

# 启动虚拟机时,使用-hdb增加一个磁盘
./build/qemu-system-x86_64  \
    -m 2G -smp 2 \
    --enable-kvm  \
    -boot order=c \
    -hda  ubuntu.img \
    -hdb ./disk.raw \
    -nic user,id=virtionet1,model=virtio-net-pci,hostfwd=tcp::8869-:22 \
    -vnc :1
 

使用 lsblk 查看添加上的磁盘
在这里插入图片描述
使用mount命令挂载/dev/sdb到某个目录,如 sudo mount /dev/sdb /mnt/sdb, 可以在/mnt/sdb 目录下访问共享磁盘

# 初次需要创建目录
sudo mkdir /mnt/sdb
sudo mount /dev/sdb /mnt/sdb

编译内核

参考 Ubuntu下编译内核

sudo apt install build-essential flex bison libssl-dev libelf-dev  libncurses-dev dwarves zstd
# 清空之前的配置
make mrproper

# 拷贝机器上存在的配置
cp /boot/config-`uname -r` ./.config 

# 先加载load→OK→Save→OK→EXIT→EXIT,进行微调
make menuconfig

# make zImage # 生成内核镜像
# make modules # 编译所有内核模块
# 编译,相当于make zImage 和 make modules 两个命令
make -j$(nproc)
# 或
# make bzImage -j$(nproc)

# 编译模块
# make modules -j$(nproc)

# 安装
sudo make install
# 模块安装
sudo make modules_install 

# 更新grub
sudo update-grub2

编译出现的错误,可能的解决方案
Q1: FAILED: load BTF from vmlinux: Unknown error -2make: *** [Makefile:1162: vmlinux] Error 255

  • 可能是分配给虚拟机较小,调整内存如2G->4G

Q2: make modules_install报错make[1]: *** [arch/x86/crypto/aegis128-aesni.ko] Error 1 Makefile

  • 在编译前配置阶段编辑 vim .config, 通过搜索把 CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem" 修改成 CONFIG_SYSTEM_TRUSTED_KEYS="" , 对于CONFIG_MODULE_SIG_KEY="" 不一定要修成空,可能也会安装不上

Q3: 在执行安装发现 Write error : cannot write compressed block

  • 检查是否/boot 是否足够

Q4: 在直接make & sudo make install 安装的内核,在启动时ifconfig -a 没有检查出相应网卡

  • 相关的驱动是编译成模块,而在编译时没有安装相关模块, 可以修改配置文件,比如 修改CONFIG_E1000=y 直接编译到内核中
  • 检查 /lib/modules/$(uname -r)/ 是否存在相关模块,然后通过insmod 进行安装

参考关于Ubuntu开机启动菜单grub2

sudo vim /etc/default/grub

# 修改内容为
GRUB_DEFAULT=0
# GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT1=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="maybe-ubiquity"
GRUB_CMDLINE_LINUX=""


# 修改成功后,进行更新
sudo update-grub2

qcow2 扩容

参考KVM 虚拟机磁盘扩容

# 先关闭虚拟机再扩容
qemu-img resize ubuntu.img +20G
# 查看镜像信息
qemu-img info ubuntu.img

# 查看磁盘信息
sudo fdisk -l
# 对于我这里是 sda,磁盘容量已达30g, 但后面的分区大小信息还是原先的10g
Disk /dev/sda: 30 GiB, 32212254720 bytes, 62914560 sectors
Disk model: QEMU HARDDISK   
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 6457B4B2-9E0C-4FEE-8586-1412B99781D5

Device       Start      End  Sectors  Size Type
/dev/sda1     2048     4095     2048    1M BIOS boot
/dev/sda2     4096  1861631  1857536  907M Linux filesystem
/dev/sda3  1861632 20969471 19107840  9.1G Linux filesystem

# 分区管理
sudo fdisk /dev/sda
# n->回车->回车->回车

# 修改磁盘格式,
Command (m for help): t
Partition number (1-4, default 4): 4
Partition type (type L to list all types): 8e

# 创建一个新的pv并添加到要扩容的vg中,首先查看Volume group 信息
sudo vgdisplay
sudo pvcreate /dev/sda4
# 我这里VG Name 是 ubuntu-vg 
# 如果 mkdir failed: No space left on device 原先的分区空间满了,先删除一些东西
sudo vgextend ubuntu-vg /dev/sda4

# 使用查看文件系统信息
df -TH 
/dev/mapper/ubuntu--vg-ubuntu--lv ext4      9.0G  5.0G  3.6G  59% /

# 扩容,需要比增加的空间要少一些
sudo lvresize -L +19G /dev/mapper/ubuntu--vg-ubuntu--lv
# 重置文件系统大小
sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv 

qemu user hostfwd问题

编译安装新内核后,无法使用ssh 连接,host 能访问hostfwd 端口,但好像guest 却没有收到转发的内容
在这里插入图片描述
在guest 内部访问防火墙状态报:
在这里插入图片描述
sudo make modules_install 安装内核时也需要安装相应的模块,但SSH连接不上
在这里插入图片描述
经排查发现:正常情况下安装5.10 内核是可以的,但我这里是调试TCP协议栈时,修改了一些代码,把修改过的该回去后SSH能正常连接
在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值