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

推荐订阅源

Engineering at Meta
Engineering at Meta
The GitHub Blog
The GitHub Blog
博客园_首页
T
The Blog of Author Tim Ferriss
H
Hackread – Cybersecurity News, Data Breaches, AI and More
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
腾讯CDC
I
InfoQ
量子位
J
Java Code Geeks
P
Proofpoint News Feed
有赞技术团队
有赞技术团队
Webroot Blog
Webroot Blog
Martin Fowler
Martin Fowler
D
Docker
F
Fortinet All Blogs
云风的 BLOG
云风的 BLOG
V
Vulnerabilities – Threatpost
罗磊的独立博客
P
Proofpoint News Feed
T
The Exploit Database - CXSecurity.com
Cyberwarzone
Cyberwarzone
P
Privacy & Cybersecurity Law Blog
Last Week in AI
Last Week in AI
爱范儿
爱范儿
The Hacker News
The Hacker News
S
SegmentFault 最新的问题
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
V
V2EX
Simon Willison's Weblog
Simon Willison's Weblog
AI
AI
Y
Y Combinator Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
GbyAI
GbyAI
V
Visual Studio Blog
H
Heimdal Security Blog
S
Secure Thoughts
B
Blog RSS Feed
雷峰网
雷峰网
T
Tenable Blog
C
Check Point Blog
G
Google Developers Blog
大猫的无限游戏
大猫的无限游戏
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
A
About on SuperTechFans
Recent Commits to openclaw:main
Recent Commits to openclaw:main

Dallas Lu

OpenWRT 使用 udp2raw 对抗 WireGuard 阻断 博客程序架构的思考与展望 如何证明你是原创作者 Nginx 泛域名配置的隐患与对策 WISeID S/MIME 证书 V2EX 刑满释放记 使用 Radicale 在 Ubuntu 24.04 中搭建 vCards CardDav 服务 邮件服务的域名成功从 SURBL 黑名单移除 网站多语言的设计细节 网站评论系统的目前进展和展望 在公网使用 iptables 转发端口时保留客户端 IP 邮件投递平台 Postal 的使用经验 自建 Postal 完美替代 SendGrid 互联网在崩塌吗,然后呢 在 SvelteKit 应用中使用 JSON-LD 网页的打印样式应该怎么写 “茴字的四种写法”之 IP 与域名 怎么伪造 Git 提交的时区 供大众交流的论坛和其它替代产品还是不好用 改编不是照搬 一次排查诡异的网络问题的经历 在 OpenWRT 23 中使用 nftset 配置 Shadowsocks 规则 使用自建 Tabby Web 来同步 Tabby 配置 手动建立自己的 IPv6 Tunnel 服务 在 PVE 手动配置网络及虚拟机 IPv6 公网 Beancount 摊销与折旧的使用以及相关插件 Nginx 反代 Apache Subversion 添加 HTTPS 使用你的主域名作为 Mastodon 实例名 Firefox 和 Chrome 为何要革 EV 证书的命
在 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. ↩