惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

G
Google Developers Blog
F
Fortinet All Blogs
Microsoft Azure Blog
Microsoft Azure Blog
腾讯CDC
Vercel News
Vercel News
Recent Announcements
Recent Announcements
博客园 - Franky
小众软件
小众软件
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
The Cloudflare Blog
宝玉的分享
宝玉的分享
I
InfoQ
博客园 - 聂微东
Jina AI
Jina AI
J
Java Code Geeks
V
V2EX
U
Unit 42
Stack Overflow Blog
Stack Overflow Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
阮一峰的网络日志
阮一峰的网络日志
L
LangChain Blog
T
The Blog of Author Tim Ferriss
量子位

Dallas Lu

一些没有意义的事情 博客程序的一次大重构 OpenWRT 使用 udp2raw 对抗 WireGuard 阻断 OpenWRT 使用 udp2raw 对抗 WireGuard 阻断 博客程序架构的思考与展望 如何证明你是原创作者 如何证明你是原创作者 Nginx 泛域名配置的隐患与对策 Nginx 泛域名配置的隐患与对策 WISeID S/MIME 证书 WISeID S/MIME 证书 V2EX 刑满释放记 V2EX 刑满释放记 使用 Radicale 在 Ubuntu 24.04 中搭建 vCards CardDav 服务 使用 Radicale 在 Ubuntu 24.04 中搭建 vCards CardDav 服务 邮件服务的域名成功从 SURBL 黑名单移除 邮件服务的域名成功从 SURBL 黑名单移除 网站多语言的设计细节 网站多语言的设计细节 网站评论系统的目前进展和展望 网站评论系统的目前进展和展望 在公网使用 iptables 转发端口时保留客户端 IP 在公网使用 iptables 转发端口时保留客户端 IP 邮件投递平台 Postal 的使用经验 邮件投递平台 Postal 的使用经验 自建 Postal 完美替代 SendGrid 自建 Postal 完美替代 SendGrid 互联网在崩塌吗,然后呢 互联网在崩塌吗,然后呢 在 SvelteKit 应用中使用 JSON-LD
在 PVE 中缩小 Ubuntu 虚拟机的磁盘
达拉斯・卢 · 2024-02-11 · via Dallas Lu

在 PVE 中,使用其 WebUI 就能方便地扩展磁盘。所以当你创建虚拟机时,不必分配过大的磁盘。终于有一天你意识到磁盘过大时,还是有机会的。本文记述为一台 Ubuntu 虚拟机缩小磁盘的经历和方法。

本站运行在一台虚拟机中,另外一台 Ubuntu 虚拟机中运行着 Nginx 作为前端。这台前置机最初分配的磁盘大小是 128GB,实际上运行大半年后,磁盘占用仅不到 10GB。对磁盘空间要求属实不多,新增的一些文件不过是些日志、配置备份。所以我计划缩减其分配的磁盘空间至 32GB ,方便备份和转移到 SSD 上。若未来空间需求增长,可随时扩容,或另行挂载一块 HDD 磁盘作为日志和备份的存储空间。

如果你也有同样的需求,可以在数据有安全的备份的情况下,按如下操作尝试。相比LXC 容器的磁盘缩小1,VM 的磁盘调整更复杂,需要先在 VM 内压缩磁盘释放空间后,再到 PVE 中操作,最后再回到 VM 中修复分区。

信息收集

为避免 IO 错误、数据丢失2,应该先在虚拟机中压缩分区大小。在此之前,应该在 PVE 管理界面中为虚拟机做一个备份。

接下来登录 Ubuntu 虚拟机,查看当前磁盘分区:

lsblk

这台 Ubuntu 虚拟机在安装系统时,使用了默认的分区设置,分区表为 MBR。(如果你的分区表是 GUID,那请参考 Egidio Docile 的文章:How to manipulate gpt partition tables with gdisk and sgdisk on Linux

一共分为三个分区,硬盘设备路径是 /dev/sda,最后一个分区挂载为根目录。运行:

df -h

检查磁盘空间使用情况,以确认调整方案是否可行。

SystemRescueCD

接下来使用 SystemRescueCD3来处理磁盘。

https://www.system-rescue.org/Download/ 获得 ISO 下载链接,到 PVE 中从 URL 添加 ISO 镜像。将该镜像挂载到 Ubuntu 虚拟机中,并从光盘启动。进入系统后运行:

startx

来进入桌面环境。

信息确认

打开 GParted 来查看当前分区情况。运行:

lvs
lvdisplay

确认目标分区的使用情况,以及设备路径。这里假设是 /dev/ubuntu-vg/ubuntu-lv

压缩磁盘

WARNING再次确认是否有可用的备份,继续操作有可能导致数据丢失!

在虚拟机中压缩卷

继续压缩虚拟卷,运行:

lvreduce --resizefs --size -96G /dev/ubuntu-vg/ubuntu-lv

调整分区大小

使用 GParted 将分区大小调整为合适的大小,在目标分区上右键->Move/Resize,压缩目标分区的大小,释放未分配空间。

在 PVE 中压缩卷

回到 PVE shell,运行:

lvresize --size -96G /dev/pve/vm-100-disk-0

注意,此步骤如果操作有误,还有机会挽回:

lvresize --size +96G /dev/pve/vm-100-disk-0

为 PVE 系统能正确显示磁盘大小,还需要执行4

qm rescan

修复分区表

重启虚拟机,重新进入 SystemRescue,运行:

fdisk -l

会提示 GPT PMBR mismatch...。运行:

gdisk /dev/sda
  1. 输入 v 验证修复分区表;
  2. 输入 w 写入分区表。

再次运行 fdisk -l 来验证。

结束

移除 CD/DVD 驱动器,重启虚拟机。如果你的系统或数据有任何问题,那么祝福你的备份还在 :)


  1. Yomi Ikuru. Proxmox - Resizing a LXC Disk. Yomi’s Blog. 2021. ↩

  2. Feng. Proxmox VE (PVE) lvm thin 减小缩减虚拟机硬盘设置的空间大小. D3TT. 2019. 「需要先从虚拟机内部缩小分区,然后再执行下边操作,比较繁琐,易翻车,务必先备份数据」 ↩

  3. https://pve.proxmox.com/wiki/Resize_disks 'If you reduce (shrink) the hard disk, of course removing the last disk plate will probably destroy your file system and remove the data in it! So in this case it is paramount to act in the VM in advance, reducing the file system and the partition size. SystemRescueCD comes very handy for it, just add its iso as cdrom of your VM and set boot priority to CD-ROM. ' ↩

  4. aaron. Reply to lumox in 'How to resize a VM's disk' #6. Proxmox Forum. 2020. ↩