PVE 虚拟机与磁盘管理完整操作指南
📁 镜像扩容操作
# 在 pve 给 immortalwrt 扩容
echo "开始镜像扩容操作..."
apt install parted p7zip-full gzip -y
cd /var/lib/vz/template/iso/
dd if=/dev/zero bs=1M count=3500 >> immortalwrt-24.10.4-x86-64-generic-squashfs-combined.img
parted immortalwrt-24.10.4-x86-64-generic-squashfs-combined.img
# parted 交互命令:
# resizepart 2 100%
# quit
echo "✅ 镜像扩容完成"
🖥️ 创建 OpenWrt 虚拟机
# 创建 Openwrt 虚拟机
echo "开始创建 OpenWrt 虚拟机..."
qm create 1000 --name immortalwrt-Outer --memory 768 --net0 virtio,bridge=vmbr0
qm importdisk 1000 /var/lib/vz/template/iso/immortalwrt-24.10.4-x86-64-generic-squashfs-combined.img local-lvm --format qcow2
qm set 1000 --scsi0 local-lvm:vm-1000-disk-0 --boot order='scsi0'
# 可选:添加第二个网卡(如果需要)
qm set 1000 --net1 virtio,bridge=vmbr1
echo "✅ OpenWrt 虚拟机创建完成"
💾 磁盘直通配置
# 磁盘直通配置
echo "配置磁盘直通..."
# 方法一:命令行直通(将磁盘 /dev/sdb 直通给虚拟机 1002)
qm set 1002 -virtio2 /dev/sdb
# 方法二:配置文件直通
echo "编辑虚拟机配置文件..."
nano /etc/pve/qemu-server/1001.conf
# 在文件中添加:
# virtio2: /dev/sdb
echo "✅ 磁盘直通配置完成"
🔧 完整的磁盘挂载配置流程
# 磁盘挂载配置
echo "开始磁盘挂载配置..."
# 1. 设置 DNS(临时)
echo "nameserver 192.168.1.1" | sudo tee /etc/resolv.conf
# 2. 安装必要工具
apt install util-linux -y
# 3. 查看所有磁盘和分区信息
echo "=== 磁盘信息 ==="
lsblk
echo "=== 分区详情 ==="
fdisk -l
# 4. 获取磁盘 UUID 的多种方法
echo "=== 获取磁盘 UUID ==="
echo "方法一 - 查看特定磁盘:"
blkid /dev/sdb
blkid /dev/sdb1
echo "方法二 - 查看所有磁盘:"
blkid
echo "方法三 - 使用 lsblk 查看:"
lsblk -f
echo "方法四 - 查看 UUID 目录:"
ls -la /dev/disk/by-uuid/
# 5. 创建挂载点
sudo mkdir -p /mnt/sdb
# 6. 临时挂载测试(重要!先测试再写入 fstab)
echo "=== 临时挂载测试 ==="
sudo mount /dev/sdb1 /mnt/sdb
df -h | grep sdb
# 7. 测试读写权限
echo "=== 测试读写权限 ==="
sudo touch /mnt/sdb/test-write.txt
sudo ls -la /mnt/sdb/test-write.txt
sudo rm /mnt/sdb/test-write.txt
# 8. 卸载测试分区
sudo umount /mnt/sdb
# 9. 将 UUID 写入 /etc/fstab(替换为实际的 UUID)
echo "=== 配置 fstab ==="
# 先备份原 fstab
sudo cp /etc/fstab /etc/fstab.backup.$(date +%Y%m%d)
# 获取实际的 UUID(请根据上面的 blkid 输出修改)
DISK_UUID=$(blkid -s UUID -o value /dev/sdb1)
echo "检测到磁盘 UUID: $DISK_UUID"
echo "UUID=$DISK_UUID /mnt/sdb ext4 defaults 0 2" | sudo tee -a /etc/fstab
# 10. 测试 fstab 配置
echo "=== 测试 fstab 配置 ==="
sudo mount -a
if [ $? -eq 0 ]; then
echo "✅ fstab 配置测试成功"
echo "=== 当前挂载状态 ==="
df -h | grep sdb
else
echo "❌ fstab 配置有错误,请检查"
echo "=== 错误信息 ==="
dmesg | tail -20
fi
# 11. 验证重启后自动挂载
sudo systemctl daemon-reload
echo "✅ 磁盘挂载配置完成"
🎯 磁盘信息查看与故障排查
# 磁盘信息查看与故障排查
echo "=== 磁盘详细信息 ==="
lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT,UUID
echo "=== 磁盘使用情况 ==="
df -hT
echo "=== inode 使用情况 ==="
df -i
# 故障排查命令
echo "=== 故障排查命令 ==="
# 检查磁盘健康状态
sudo smartctl -a /dev/sdb 2>/dev/null || echo "smartctl 未安装或设备不支持"
# 强制检查文件系统(如果怀疑有错误)
# sudo fsck /dev/sdb1
echo "✅ 所有操作完成"
📝 操作说明
⚠️ 重要注意事项:
- 镜像扩容前确保有足够的存储空间
- 分区调整时确认分区编号(通常是第2个分区)
- 磁盘直通前确保磁盘未被系统使用
- 修改 fstab 前会自动备份原文件
- 务必先测试挂载再写入 fstab,避免系统启动失败
🔄 操作顺序建议:
- 先执行磁盘信息查看,确认设备路径
- 进行临时挂载测试
- 测试读写权限
- 配置 fstab
- 最后验证自动挂载
🛠️ 常用检查命令:
# 检查分区信息
fdisk -l
# 检查挂载情况
df -h
# 检查 fstab 语法
mount -a