proxmox磁盘扩容使用DD镜像对拷
背景
proxmox本地宿主机磁盘空间不够用,由512GB扩展到1TB的ssd。
注意,前提一定要是UEFI+EFI分区+GPT磁盘的引导方式。对拷完毕能直接引导启动系统。
如果是BIOS+MBR或者UEFI+MBR的引导方式,dd对拷完毕一定要重新修复引导程序。大概是执行grub-install之类的。
#见下面gpt、EFI System的字样,默认proxmox 7安装的时候是有EFI。除此之外确认你的机器支持UEFI并且bios里打开了UEFI引导即可。(最近几年机器默认都开)
root@pve:~# fdisk -l
Disk /dev/nvme0n1: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors
Disk model: WD_BLACK SN770 1TB
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: 6B311ABC-C9C5-49AA-B4D0-1A278B8D4C9A
Device Start End Sectors Size Type
/dev/nvme0n1p1 34 2047 2014 1007K BIOS boot
/dev/nvme0n1p2 2048 1050623 1048576 512M EFI System
/dev/nvme0n1p3 1050624 976773134 975722511 465.3G Linux LVM
操作步骤
需要设备:固态A,512GB m2接口,固态B,1TB m2接口,仓库盘C(USB硬盘)。
一个第三方系统的:linux live cd 我用的是Ubuntu。将安装ISO镜像刻录到U盘里就行了。从BIOS中设置从U盘启动引导。下面操作都是在Ubuntu live cd中进行。
硬盘拷贝
方案一: 如果有两个固态硬盘插槽,直接可以使用dd命令磁盘对磁盘拷贝。
方案二:如果只有一个固态插槽,先备份A固态成镜像文件存到仓库盘C,然后换上新固态B后,从仓库盘C回复镜像到B。
这里采用方案二。
#查看磁盘
sudo fdisk -l
#备份镜像 时间很长,主要是仓库盘慢,100MB的速度,512GB要1个小时左右
cd /media/仓库盘C挂载路径
sudo dd if=/dev/nvme0n1p of=mypve.img bs=100M status=progress
#拆机,把固态A替换成B
sudo dd if=mypve.img of=/dev/nvme0n1p bs=100M status=progress
磁盘分区扩容
查看磁盘空间。发现还是512GB
root@pve:~# fdisk -l
GPT PMBR size mismatch (976773167 != 1953525167) will be corrected by write.
The backup GPT table is not on the end of the device.
Disk /dev/nvme0n1: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors
Disk model: WD_BLACK SN770 1TB
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: 6B311ABC-C9C5-49AA-B4D0-1A278B8D4C9A
Device Start End Sectors Size Type
/dev/nvme0n1p1 34 2047 2014 1007K BIOS boot
/dev/nvme0n1p2 2048 1050623 1048576 512M EFI System
/dev/nvme0n1p3 1050624 976773134 975722511 465.3G Linux LVM
#parted查看也是一样。
(parted) print
Model: WD_BLACK SN770 1TB (nvme)
Disk /dev/nvme0n1: 1000GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 17.4kB 1049kB 1031kB bios_grub
2 1049kB 538MB 537MB fat32 boot, esp
3 538MB 500GB 500GB lvm
#再次检查,发现磁盘已经大小调整完毕。
parted /dev/nvme0n1p
(parted) print
Model: WD_BLACK SN770 1TB (nvme)
Disk /dev/nvme0n1: 1000GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 17.4kB 1049kB 1031kB bios_grub
2 1049kB 538MB 537MB fat32 boot, esp
3 538MB 1000GB 999GB lvm
注意:resize2fs /dev/device 命令好像不支持LVM或者不支持GTP磁盘,不能用。修改分区大小就用parted resizepart 命令,或者像我上面一样用交互式。
LVM使用相应分区
LVM是一种磁盘管理方式。把磁盘存储分成物理卷(PV physic volume)、逻辑卷组(VG Volume Group)、逻辑卷(LV logic Volume) 三个层次。
PV对应物理设备。VG将PV添加进来就可以管理相应物理设备,VG中创建LV后,LV就可以使用VG中的资源。
#打印信息情况,发现磁盘仍然没有使用
root@pve:~# pvs
PV VG Fmt Attr PSize PFree
/dev/nvme0n1p3 pve lvm2 a-- <465.26g <16.00g
root@pve:~# vgs
VG #PV #LV #SN Attr VSize VFree
pve 1 14 0 wz--n- <465.26g <16.00g
root@pve:~# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
data pve twi-aotz-- <338.36g 32.33 1.55
root pve -wi-ao---- 96.00g
swap pve -wi-ao---- 8.00g
#使用pvresize命令扩充physical volume
root@pve:~# pvresize /dev/nvme0n1p3
Physical volume "/dev/nvme0n1p3" changed
1 physical volume(s) resized or updated / 0 physical volume(s) not resized
root@pve:~# pvs
PV VG Fmt Attr PSize PFree
/dev/nvme0n1p3 pve lvm2 a-- 930.82g <481.56g
root@pve:~# vgs
VG #PV #LV #SN Attr VSize VFree
pve 1 14 0 wz--n- 930.82g <481.56g
root@pve:~# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
data pve twi-aotz-- <338.36g 32.34 1.55
root pve -wi-ao---- 96.00g
swap pve -wi-ao---- 8.00g
#发现pv和vg都已经变了,有剩余空间了。继续扩充lv即可。 注意这里不需要加--resizefs,因为data里面都是虚拟机磁盘文件,没有文件系统
root@pve:/dev/pve# lvextend --size +200GB pve/data
WARNING: Sum of all thin volume sizes (<1.03 TiB) exceeds the size of thin pools and the size of whole volume group (930.82 GiB).
WARNING: You have not turned on protection against thin pools running out of space.
WARNING: Set activation/thin_pool_autoextend_threshold below 100 to trigger automatic extension of thin pools before they get full.
Size of logical volume pve/data_tdata changed from <338.36 GiB (86619 extents) to <538.36 GiB (137819 extents).
Logical volume pve/data_tdata successfully resized.
#上面第一个报警可以忽略,意思是lv中所有的虚拟机的磁盘容量加起来超过了总磁盘容量。后面如果全都分配了不够用。
#再查看,发现已经增加了磁盘空间
root@pve:/dev/pve# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
data pve twi-aotz-- <539.36g 20.29 1.57
root pve -wi-ao---- 96.00g
swap pve -wi-ao---- 8.00g
pve控制台效果图:
看这个发现磁盘是不是显示过大了999GB,之前fdisk上显示的是930GB啊。
fdisk -l和其他linux命令行都显示的是 1024进制的容量。
pve控制台和parted显示的是1000进制的容量单位。
真是坑爹。大家能都统一了吗。我看1024进制有用GiB来显示的。
后续
后面Data这个LV,不够用了的话随时从 pve这个VG里面增加资源就可以了。使用: lvextend --size +200GB pve/data 命令。
同理如果pve系统的root空间不足也可以添加。root目前100GB还够用。
root@pve:~# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
data pve twi-aotz-- <541.36g 20.21 1.57
root pve -wi-ao---- 96.00g
swap pve -wi-ao---- 8.00g
方案的不足
- DD拷贝太花时间了,需要等待。优点是不用人员参与,等就行。
- 浪费SSD的写入次数,SSD写入是有寿命的一般1TB硬盘也就可以全盘写入600次,600TBW。DD是全磁盘的镜像,无论有没有数据都给你copy一遍,最好是有工具支持只写入有数据的部分。省写入,另外速度还快。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)