PVE安装QCOW2镜像教程

本文以 Debian 云镜像-本地 QEMU 虚拟机为例,为 PVE 环境快速部署一个可供测试的 Debian 系统。 下载 Debian https://cloud.debian.org/images/cloud/trixie/latest/debian-13-nocloud-amd64.qcow

本文以 Debian 云镜像-本地 QEMU 虚拟机为例,为 PVE 环境快速部署一个可供测试的 Debian 系统。

下载 Debian

https://cloud.debian.org/images/cloud/trixie/latest/debian-13-nocloud-amd64.qcow2

创建虚拟机

常规

填写 VM ID 和名称

操作系统

选择不使用任何介质

系统

保持默认

pve-install-qcow2-image-tutorial-1.png

磁盘

在左边侧栏上传默认添加的磁盘

CPU

根据需要选择核心数,CPU类型选择host

内存

根据需要填写内存大小

网络

保持默认

pve-install-qcow2-image-tutorial-2.png

导入磁盘

在 local 节点-导入中上传前面下载的文件

pve-install-qcow2-image-tutorial-3.png

双击文件,会弹出导入硬盘的弹窗,选择刚刚创建的虚拟机

pve-install-qcow2-image-tutorial-4.png

在最左侧边栏点击所创建的虚拟机,切换到选项页,编辑引导顺序,勾选刚刚添加的硬盘,并将其移动到最上方,然后点击确定。

pve-install-qcow2-image-tutorial-5.png

调整虚拟机

开启xterm.js(串口控制台)

Debian 官方云镜像默认将系统输出和init绑定到了串口(Serial 0/ttyS0)。如果 PVE 虚拟机中没有添加 Serial Port,内核在找不到控制台时会直接杀死init进程崩溃。

在 PVE 界面将该虚拟机彻底关机(Stop)。点击虚拟机-硬件-添加-串行端口,选择0并确认。

重置 root 密码

Debian 官方的云镜像(Cloud Images)为了安全起见,没有预设任何默认密码,默认的root账户也是处于锁定状态的。因此,我们需要通过 GRUB 单用户模式重置 root 密码。

打开该虚拟机的控制台(Console / noVNC)并重启虚拟机。当出现 GRUB 引导菜单时,快速按下键盘e键进入编辑模式。找到以linux /boot/vmlinuz-...开头的那一行,在末尾添加空格和以下参数:

init=/bin/bash
pve-install-qcow2-image-tutorial-6.png

或:(内核在挂载根文件系统时会直接以读写模式挂载,进入Bash后无需再手动执行mount -o remount,rw /,直接输passwd即可)

rw init=/bin/bash

Ctrl + XF10引导启动,系统会直接以root身份进入bash命令行。

pve-install-qcow2-image-tutorial-7.png

如图选择xterm.js启动,执行以下命令将根分区重新挂载为读写并修改密码:

mount -o remount,rw /
passwd root

输入并确认新密码后,直接在 PVE 界面硬重启(Reboot/Stop 再 Start)虚拟机,之后即可使用root和新密码在控制台登录。

硬盘大小

在硬件页选择硬盘,点击顶部的磁盘操作-调整大小,输入想要增加的容量,点击确定。

登录虚拟机终端,执行以下操作让系统识别并使用新增的空间:

检查当前磁盘与分区情况

lsblk

通常会看到磁盘如sdavda已经变成了扩容后的大小,但其下的主分区如sda1还是原来的大小

安装扩容工具(如果系统未自带)

Debian/Ubuntu 环境下执行:

apt update && apt install -y cloud-guest-utils

扩展分区表(自动拉伸分区到磁盘末尾)

假设磁盘是sda,要扩展的根分区是sda1(注意设备名和分区号之间有空格):

growpart /dev/sda 1

扩展文件系统

根据文件系统类型执行对应的刷新命令

如果是ext4文件系统(Debian 默认):

resize2fs /dev/sda1

如果是xfs文件系统:

xfs_growfs /

验证容量

执行df -h查看根目录/的可用空间,此时应该已经生效显示为扩容后的大小,且期间无需重启系统。

补充知识1:init=/bin/bash是什么

init=/bin/bash是一个 Linux 内核启动参数,它的作用是指示内核在完成自身初始化后,直接将 Bash Shell 作为系统的第一个用户空间进程(PID 1)运行,从而绕过正常的系统初始化系统(如systemd、SysVinit)。

正常引导vsinit=/bin/bash引导

正常启动流程

BIOS/UEFIGRUBKernelsystemd (PID 1)各种守护进程/服务/登录认证用户登录 Shell\text{BIOS/UEFI} \rightarrow \text{GRUB} \rightarrow \text{Kernel} \rightarrow \text{systemd (PID 1)} \rightarrow \text{各种守护进程/服务/登录认证} \rightarrow \text{用户登录 Shell}

在正常流程中,systemd会挂载全部文件系统、启动网络、拉起服务并强制用户通过login验证密码。

使用init=/bin/bash的流程

BIOS/UEFIGRUBKernel/bin/bash (PID 1)\text{BIOS/UEFI} \rightarrow \text{GRUB} \rightarrow \text{Kernel} \rightarrow \text{/bin/bash (PID 1)}

内核加载完硬件驱动后,直接启动/bin/bash。系统不会拉起任何后台服务,也不会出现密码登录界面,屏幕上会直接弹出一个具有root权限 的单用户命令行提示符(root@(none):/#)。

核心应用场景

  • 重置 Root 密码: 忘记管理员密码时,通过 GRUB 编辑参数加入init=/bin/bash,无需输入旧密码即可进入 root shell 并使用passwd修改密码。

  • 紧急系统灾难恢复: 当systemd配置损坏、依赖服务崩溃导致系统无法正常进入操作系统或进入救援模式失败时,用此方法快速接管底层系统进行排错。

使用时的注意事项与常见操作

因为跳过了标准的 init 系统,进入 Bash 时的环境非常精简,通常需要手动执行几步配置:

根分区为只读

内核启动时根目录默认只读挂载。如果需要修改文件或重置密码,必须先将其重新挂载为读写:

mount -o remount,rw /

没有任务控制与信号处理机制

由于 Bash 作为 PID 1 运行,它不会处理部分标准进程回收逻辑,且无法使用 Ctrl + C 终止前台失控程序。

无法使用reboot/shutdown

因为没有 systemd 守护进程,重启需通过以下命令同步磁盘并强制重启:

sync
mount -o remount,ro /
reboot -f  # 或使用 Magic SysRq 强制重启

SELinux 标签更新(针对 RHEL / CentOS 等系统)

如果修改了密码,重启前需要触发 SELinux 重新标记文件上下文,否则可能导致无法登录:

touch /.autorelabel

安全含义

该参数的存在说明:只要攻击者拥有对机器的物理控制权(或能访问 BIOS/GRUB 交互界面),就能绕过系统的身份验证机制。

防御该风险的标准手段包括:

  1. 为 GRUB 设置菜单项编辑密码(grub-mkpasswd-pbkdf2)。

  2. 为 BIOS/UEFI 设置启动密码并禁用外部介质引导。

  3. 启用全盘加密(LUKS),此时即使加载了init=/bin/bash,在输入磁盘解密密匙前也无法挂载和读取任何数据。

补充知识2:在 Debian 虚拟机中配置临时终端代理

export http_proxy="http://192.168.3.21:7890"
export https_proxy="http://192.168.3.21:7890"
export all_proxy="socks5://192.168.3.21:7890"

65元/年的阿里云香港ECS开通技巧 2026-08-22