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

推荐订阅源

M
MIT News - Artificial intelligence
WordPress大学
WordPress大学
GbyAI
GbyAI
S
SegmentFault 最新的问题
量子位
爱范儿
爱范儿
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
MyScale Blog
MyScale Blog
人人都是产品经理
人人都是产品经理
博客园 - 叶小钗
aimingoo的专栏
aimingoo的专栏
V
Visual Studio Blog
U
Unit 42
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
The Cloudflare Blog
Stack Overflow Blog
Stack Overflow Blog
博客园 - 聂微东
J
Java Code Geeks
The GitHub Blog
The GitHub Blog
Y
Y Combinator Blog
IT之家
IT之家
Martin Fowler
Martin Fowler
宝玉的分享
宝玉的分享
雷峰网
雷峰网

Dallas Lu

一些没有意义的事情 博客程序的一次大重构 OpenWRT 使用 udp2raw 对抗 WireGuard 阻断 如何证明你是原创作者 Nginx 泛域名配置的隐患与对策 WISeID S/MIME 证书 V2EX 刑满释放记 使用 Radicale 在 Ubuntu 24.04 中搭建 vCards CardDav 服务 邮件服务的域名成功从 SURBL 黑名单移除 The Domain of Mail successfully removed from SURBL blacklist 网站多语言的设计细节 Website Multilingual Design Details 网站评论系统的目前进展和展望 Current Progress and Outlook of the Website Comment System 在公网使用 iptables 转发端口时保留客户端 IP Retaining Client IP with iptables Port Forwarding on Public Networks 邮件投递平台 Postal 的使用经验 Experience with Using Postal, the Mail Delivery Platform 自建 Postal 完美替代 SendGrid Build Your Own SendGrid: Postal SMTP Server 互联网在崩塌吗,然后呢 Is the Internet collapsing and then what 在 SvelteKit 应用中使用 JSON-LD Using JSON-LD in SvelteKit Applications 网页的打印样式应该怎么写 How to write print styles for web pages “茴字的四种写法”之 IP 与域名 Trivia: Special ways of writing IP and domain names 怎么伪造 Git 提交的时区 How to fake the timezone of a git commit
在 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. ↩