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控制台效果图:
14b7fd3b2ead4b3b136a492b4f5adf9a.png

c8cf7ac09f441df833408256d45ff179.png
看这个发现磁盘是不是显示过大了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

方案的不足

  1. DD拷贝太花时间了,需要等待。优点是不用人员参与,等就行。
  2. 浪费SSD的写入次数,SSD写入是有寿命的一般1TB硬盘也就可以全盘写入600次,600TBW。DD是全磁盘的镜像,无论有没有数据都给你copy一遍,最好是有工具支持只写入有数据的部分。省写入,另外速度还快。
posted @   大白586  阅读(1395)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示