Debian12 net install 最小化安装的体积是多大,为什么我的到了 6GB?

2023-08-28 15:54:46 +08:00
 Apol1oBelvedere

Debian12 net install 最小化安装的体积是多大,仅安装 basic module 和 ssh server ,不安装任何 UI 组件和 web server 。在 Hyper-V 下测试虚拟机文件夹总大小,我的是 6GB ,但是同样之前测试 Debian 11 是 2GB ,差别在哪如何消除?

2252 次点击
所在节点    Linux
9 条回复
Jirajine
2023-08-28 16:09:26 +08:00
盲猜是不是自动创建了 swap 分区。
追求小体积可以用 alpine ,更极端的可以用 openwrt ,整个系统裁剪压缩后可以做到十几 M 。
yinmin
2023-08-28 16:12:00 +08:00
在 linux 下使用 df -h 看一下实际占用量,如果与 vhdx 文件差别很大,可以参考以下文章优化 vhdx 的参数

https://learn.microsoft.com/zh-cn/windows-server/virtualization/hyper-v/best-practices-for-running-linux-on-hyper-v
libook
2023-08-28 16:28:02 +08:00
在虚拟机里用 df 看一下实际占用空间多大,如果是 6G 就说明可能安装过程中产生了很多缓存文件,可以用 apt clean 等指令清除一下,或者使用 du 看一下具体是哪个目录大,再看看里面究竟是啥、有没有用。
如果实际占用是 2G ,但虚拟磁盘文件占用 6G ,就可能是如下原因。

虚拟机的虚拟磁盘有两种分配空间的方式,一种是直接足量分配空间,另一种是随着写入数据增多动态扩大到设定的存储空间。题主说虚拟磁盘文件的大小会变化,那么就假设你用的是后者。

动态分配的方案里,看你文件系统是什么行为。
首先很多文件系统上,删除数据不是真的删除了数据,而是将数据空间标记为空闲,未来可以直接覆盖写入这个空间,所以你在虚拟磁盘里写入 1GB ,再删除这 1GB 的数据,你的虚拟磁盘的大小就会维持 1GB 不变,不会因为你在里面删除了数据就自动缩小到 0 。
其次看你的文件系统是怎么覆盖数据的,比如你向虚拟硬盘里写入 1GB 的数据,删除这 1GB 的数据,再写入 1GB 数据的时候是在原来的存储块上覆盖写入,还是会另外开辟一块空间写入。如果是前者的话,写 1G 、删 1G 、再写 1G ,你的虚拟磁盘文件就还是 1G 大小;如果是后者的话,写 1G 、删 1G 、再写 1G ,你的虚拟磁盘文件就会变成 2G 大小。为了优化 SSD 的使用寿命,一些文件系统是必须启动 Trim 等维护任务才会实际释放空闲空间,或者会基于一些算法尽可能均匀使用所有存储单元,最终反映到虚拟磁盘文件上就是文件大小越来越大,直到到达你一开始设定的最大大小。

大多虚拟机都提供了压缩虚拟磁盘文件大小的工具,但这些工具通常都要求你的虚拟磁盘内的数据尽可能聚集在文件头部,后面的空间都用 0 填充,理想状态下可以压缩到你虚拟磁盘内实际占用空间的大小。这个不同文件系统的预处理方式不一样,比如有的文件系统你就需要手动进行碎片整理,将所有数据都集中在磁盘头部,然后再使用 dd 或者 zerofree 将剩余空间用 0 填充。
xausky
2023-08-28 19:20:31 +08:00
刚才看了一下前面装的 KVM 虚拟机,主机磁盘 qcow2 文件 3G ,里面 df 磁盘占用 2.6G
jqtmviyu
2023-08-29 06:53:51 +08:00
看了下 macos 下 pd 虚拟机, 装了 git vim docker zsh, 大小是 4G.
msg7086
2023-08-29 06:54:59 +08:00
你测的是虚拟机磁盘大小,不是安装体积,这两个没有直接关系。

Thin Provisioned 的虚拟机磁盘大小和非 0 块数量有关,如果你要压缩磁盘,需要先在磁盘内部 fstrim 或者 zerofree 向虚拟机报告不再使用的块,然后再在宿主机上取消对这些块的磁盘空间分配。
Apol1oBelvedere
2023-08-29 16:29:25 +08:00
@xausky #4 @jqtmviyu #5
@msg7086 #6 感谢极具方向性的指导。网络总结信息如下:
1. https://viml.nchc.org.tw/compact-ubuntu-hyper-v-vm-vhd-file/ 縮小 Ubuntu 的 Hyper-V VM 動態 VHD 檔案(介绍了四大工具和实测结果)
2. Microsoft 文章:Hyper-V thin provisioning at virtual and physical layers

由于 Thin Provisioned 和 Optimize-VHD 不支持直接识别 Linux 文件系统,要手动操作。四大工具最方便的就是 fstrim 可以设备在线填充 0 。Debian 12 在 fstrim 后从 6.7GB 下降到 4.8G ,有效果。

只要 df -h 空间与 vhdx 磁盘文件占用空间差距不大(小于 3GB ),就能接受了。
busier
2023-08-29 18:35:43 +08:00
还想更小,就直接用 debootstrap 来搞!就像 arch 那样!
tony1016
2023-09-08 09:10:44 +08:00
要小,自然是美妙的 alpine 了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/968905

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX