V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
Apol1oBelvedere
V2EX  ›  Linux

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

  •  
  •   Apol1oBelvedere · 244 天前 · 1971 次点击
    这是一个创建于 244 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    9 条回复    2023-09-08 09:10:44 +08:00
    Jirajine
        1
    Jirajine  
       244 天前 via Android
    盲猜是不是自动创建了 swap 分区。
    追求小体积可以用 alpine ,更极端的可以用 openwrt ,整个系统裁剪压缩后可以做到十几 M 。
    yinmin
        2
    yinmin  
       244 天前
    在 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
        3
    libook  
       244 天前
    在虚拟机里用 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
        4
    xausky  
       243 天前
    刚才看了一下前面装的 KVM 虚拟机,主机磁盘 qcow2 文件 3G ,里面 df 磁盘占用 2.6G
    jqtmviyu
        5
    jqtmviyu  
       243 天前
    看了下 macos 下 pd 虚拟机, 装了 git vim docker zsh, 大小是 4G.
    msg7086
        6
    msg7086  
       243 天前
    你测的是虚拟机磁盘大小,不是安装体积,这两个没有直接关系。

    Thin Provisioned 的虚拟机磁盘大小和非 0 块数量有关,如果你要压缩磁盘,需要先在磁盘内部 fstrim 或者 zerofree 向虚拟机报告不再使用的块,然后再在宿主机上取消对这些块的磁盘空间分配。
    Apol1oBelvedere
        7
    Apol1oBelvedere  
    OP
       243 天前
    @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
        8
    busier  
       242 天前
    还想更小,就直接用 debootstrap 来搞!就像 arch 那样!
    tony1016
        9
    tony1016  
       233 天前
    要小,自然是美妙的 alpine 了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4457 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 10:09 · PVG 18:09 · LAX 03:09 · JFK 06:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.