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

寻求最小体积的服务器用 Linux 发行版,多个版本测试数据(Debian netins 及 Ubuntu Server 等)详见帖子内容。

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

    寻求最小体积的服务器用 Linux 发行版,多个版本测试数据( Debian netins 及 Ubuntu Server 等)如下:

    • Debian net install 只安装 ssh server 未安装任何其他附件组件,体积 5GB ;
    • Ubuntu Server 22 执行最小化安装,体积 6.5GB ;

    为什么 Hyper-V 安装 Debian 后一段时间关闭虚拟机,期间未安装任何软件,显示虚拟机合并中,之后虚拟机的 VHDX 文件增长到 36GB 是为什么?

    37 条回复    2023-06-02 04:59:09 +08:00
    mohumohu
        1
    mohumohu  
       324 天前   ❤️ 10
    不用找了,alpine linux
    lovelylain
        2
    lovelylain  
       324 天前 via Android
    装个 openwrt 吧
    billgong
        3
    billgong  
       324 天前
    Debian 应该能做得更小的。默认包不应该要 5G 啊,2GB 就应该能跑得起来了,包括 openssh 。
    OpenWRT x86 之类构建在 buildroot 上的系统可以做到非常小,当然你得提前确定一下需求,毕竟你可能得自己维护内核更新。

    sparse 的虚拟磁盘如果有大量的临时写入,写完又删掉了,空间应该不会主动回收,那肯定会越写越大,直到写满分配的容量。page 虚拟内存等等都可能是大户。
    infun
        4
    infun  
       324 天前
    你的真实需求是什么?
    pagxir
        5
    pagxir  
       324 天前 via Android   ❤️ 1
    debootstrap 只基本安装,完之后不会超过 1G ,你的 5G 肯定连桌面都安装了
    Apol1oBelvedere
        6
    Apol1oBelvedere  
    OP
       324 天前
    @infun 只用来安装及运行一套项目管理软件(几百 MB ),会存在备份及移动,需要体积小。目前 Ubuntu Server 22 最小化安装加项目软件已经到 16GB 了,是不是系统 update 产生的历史旧文件导致的?
    Apol1oBelvedere
        7
    Apol1oBelvedere  
    OP
       324 天前
    @mohumohu 不希望这个系统用在服务器用途。
    Apol1oBelvedere
        8
    Apol1oBelvedere  
    OP
       324 天前
    @pagxir 装没装 GUI 这个能分得出来的。
    infun
        9
    infun  
       324 天前
    @Apol1oBelvedere
    一楼说的 alpine linux 能满足需求吗?
    bigfei
        10
    bigfei  
       324 天前 via Android
    建议 dockerlize 一下你的管理软件
    LindsayZhou
        11
    LindsayZhou  
       324 天前
    alpine +1
    如果你的软件不依赖 glibc 的话,挺合适的,安装完成我没注意过,不超过 1G 吧。安装镜像 200 MB 大小。

    hack 一点的玩法可以直接用 data disk 模式,从镜像读取之后,系统直接跑在内存里。不过生产环境还是不太建议了。
    llinge
        12
    llinge  
       324 天前
    @billgong #3 装 openwrt 是完全可行的, 我试过的
    imes
        13
    imes  
       324 天前 via Android
    @billgong 3# 对,debian 不到 2G 硬盘。我刚装了 debian 11 amd64 最小化系统,只用了 1.3G 空间,这里面还包括 ssh wget vim curl htop iftop vnstat 等常用的软件。
    0superx0
        14
    0superx0  
       324 天前
    osmc 之类的基于 debian 系统有 x86 版,安装完 1g 不到,还有 smb ,投屏之类的软件,非常实用,当服务器很简单,反正是基于 debian 的
    ruanimal
        15
    ruanimal  
       324 天前
    @mohumohu alpine 应该算最小的了,注意可能有兼容性问题
    lhbc
        16
    lhbc  
       324 天前 via Android
    最小的 debian 不是 70MB 吗?经过 gz 压缩后
    解压后也不过占几百 M
    qwerzl
        17
    qwerzl  
       324 天前
    要 minimal ,无脑选 alpine
    tony1016
        18
    tony1016  
       324 天前
    alpine 可选占用 0
    Arthur2e5
        19
    Arthur2e5  
       324 天前
    alpine 可以很小。musl 的话有些东西会不一样,被喷最大的点是 DNS 不支持 TCP 导致大包用不了,不过最近 1.2.4 也修了。

    至于“项目管理软件”会不会看到 musl 开始跳…挺难说的。至少很多东西都要重新编译,这个到哪都差不多。
    aru
        20
    aru  
       324 天前   ❤️ 2
    OP 估计是以虚拟机磁盘文件占用来计算系统磁盘空间占用吧。
    Debian 11 正常方式安装,建立一个 5GB 的虚拟机硬盘文件就够了
    如果通过 debootstrap 方式来构建,2GB 就够了(实际占用 1GB ,另外还有 1GB 给程序和文档用)
    如果使用压缩文件系统,1GB 就够了,实际占用 200MB ,还有 800M 给后续使用
    ihciah
        21
    ihciah  
       324 天前   ❤️ 1
    听起来是个 XY 问题。
    如果为了降低虚拟硬盘空间占用的话,可以在虚拟机内部安装对应的辅助工具,有助于 VMM 感知真实硬盘空间占用,归还不必要的空间。
    另一个做法是一开始分配较小的硬盘空间,当有需要时再挂载新的虚拟硬盘设备进去,然后 vm 内部用 btrfs 或 lvm 等做多设备空间聚合。
    SaltyKitkat
        22
    SaltyKitkat  
       324 天前
    文件系统透明压缩或许会对你有帮助
    weiqk
        23
    weiqk  
       324 天前
    4m linux core
    haikea
        24
    haikea  
       324 天前
    @lovelylain 正解
    choury
        25
    choury  
       324 天前
    给你一个脚本,是我之前搞内核搞的打包一个自定义的 debian initramfs 的脚本,不过前提是你本地已经运行了一个 debian ,打包完之后 286M ,加上自己编译的 9M 的内核,就可以跑起来了
    #!/bin/bash -e

    rm -rf debian
    mkdir -p cache
    debootstrap --cache-dir=$PWD/cache --include=ssh stable debian http://mirrors.tencent.com/debian
    chroot debian bash -c "echo root:root | chpasswd"

    cat >> debian/etc/network/interfaces << EOF
    # The primary network interface
    auto eth0
    allow-hotplug eth0
    iface eth0 inet dhcp
    EOF

    echo "Linux-Box" > debian/etc/hostname
    sed -i "/#PermitRootLogin/aPermitRootLogin yes" debian/etc/ssh/sshd_config

    rm -rf initramfs
    cd debian
    find . | cpio -o -H newc -O ../initramfs
    cwbsw
        26
    cwbsw  
       324 天前
    5G 的 Debian 大概率是安装说把桌面组件选上了。
    pagxir
        27
    pagxir  
       324 天前
    level@ThinkStation:~$ sudo du -csh --app ubuntu_18
    [sudo] password for level:
    817M ubuntu_18
    817M total

    这个是我开发用的整个编译环境大小,如果加上 kernel 也就 1.3G 左右吧。

    如果是 ubuntu_22 基本安装也就 389M, 加上 kernel 不会超过 1G
    level@ThinkStation:~$ zcat ubuntu_22.tar.gz |dd > /dev/null
    759660+0 records in
    759660+0 records out
    388945920 bytes (389 MB, 371 MiB) copied, 4.29797 s, 90.5 MB/s
    Andim
        28
    Andim  
       324 天前
    RHEL 就默认的最小安装,不特意精简,也就两三 G 大小

    这里面还运行了两个 podman
    jtshs256
        29
    jtshs256  
       324 天前
    如果虚拟机里跑的话可以考虑下 Photon OS ,模板也就两百多 M ,甚至已经是自带 docker 的了……不过默认安全策略比较严格,配置起来要稍微花点时间
    tigren
        30
    tigren  
       323 天前
    求稳还是别用 Alpine , 可以搜下 Alpine DNS Issue 有前人踩过的坑
    zed1018
        31
    zed1018  
       323 天前
    debian 最小安装哪里要这么多,我才装的,还多余装了个 fail2ban 。

    /dev/sda1 62G 1.9G 57G 4% /
    LokiSharp
        32
    LokiSharp  
       323 天前
    5G+ 的 Debian 是装了 GUI 和 Build Essential 吧 Emmmm ,装了这两个的发行版不可能小
    a1274598858
        33
    a1274598858  
       323 天前
    试试 debian 的云镜像 https://mirror.accum.se/cdimage/cloud/
    Apol1oBelvedere
        34
    Apol1oBelvedere  
    OP
       323 天前
    @aru @ihciah @choury 经过测试是 Hyper-V 存在问题,网上也有人问过类似的问题,微软论坛有人说是 Hyper-V 开启了动态磁盘导致的(我测试时没开检查点),但是 Vmware 也开启了动态磁盘,没有暴涨这么多!
    Hyper-V 这种暴涨问题如何解决呢?

    =================
    debian-11.7.0-amd64-netinst.iso VMware 断网安装:
    df -h /
    Filesystem Size Used Avail Use% Mounted on
    /dev/sda1 1006G 740M 955G 1% /
    linux 内占用磁盘 740MB ,VMware 文件夹显示占用 4GB

    ---

    Ubuntu Server 22 minimal VMware 最小化安装:
    df -h /
    Filesystem Size Used Avail Use% Mounted on
    /dev/sda2 1007G 4.3G 952G 1% /
    linux 内占用磁盘 4.3G ,Vmware 文件夹显示占用 4.9GB

    ---

    debian-11.7.0-amd64-netinst.iso Hyper-V 在线安装:
    第一次安装好未关,Hyper-V 文件夹显示占用 4.5GB
    关机后第二次启动显示“正在合并中”,产生一个检查点,合并好开机后体积直接涨到 22GB ,删除检查点后 19.5GB

    Ubuntu Server 22 minimal Hyper-V 最小化安装:
    df -h /
    Filesystem Size Used Avail Use% Mounted on
    /dev/sda2 1006G 4.5G 951G 1% /
    linux 内占用磁盘 4.5G ,Hyper-V 文件夹显示占用 19.5GB

    OMV6 一个检查点没有建立,只安装了几个测试插件,升级了三次软件包现在
    linux 内占用磁盘 6G ,Hyper-V 文件夹显示占用 16GB
    Apol1oBelvedere
        35
    Apol1oBelvedere  
    OP
       323 天前   ❤️ 1
    @aru @ihciah @choury 问题成功解决!由于通过图形界面创建 Hyper-V 虚拟机时 BlockSizeBytes 是 32MB ,导致虚拟机文件大小翻了约 32 倍(实际达不到 32 倍,按 I/O 数相关来暴涨的),PowerShell 执行 New-VHD 命令转换为 1MB 的块大小就行了。19.5GB 的 Debian 虚拟机转换后只有 2GB 。
    Convert-VHD -Path 'D:\VirtualmSystem\Debian11.7.0net.vhdx' -DestinationPath 'D:\VirtualmSystem\Debian11.7.0netConvert.vhdx' -BlockSizeBytes 1mb

    ======
    https://www.altaro.com/hyper-v/expansion-hyper-vs-dynamically-expanding-vhdx/
    ---
    When the disk subsystem expands a VHDX, it does so by “blocks”. Blocks in this context are defined per VHDX. As you can see in the screenshot, this VHDX uses a block size of 33,554,432 bytes (32 megabytes). Therefore, each expansion event will grow the VHDX by a multiple of 33,554,432 bytes.


    https://learn.microsoft.com/zh-cn/windows-server/virtualization/hyper-v/best-practices-for-running-linux-on-hyper-v
    ---
    在动态 VHDX 文件上优化 Linux 文件系统
    有些 Linux 文件系统可能会消耗大量的实际磁盘空间,即使文件系统大部分是空的。 要减少动态 VHDX 文件的实际磁盘空间使用量,请考虑以下建议:
    创建 VHDX 时,在 PowerShell 中使用 1MB BlockSizeBytes (默认为 32MB ),例如:
    PS > New-VHD -Path C:\MyVHDs\test.vhdx -SizeBytes 127GB -Dynamic -BlockSizeBytes 1MB
    harrozze
        36
    harrozze  
       322 天前
    @lovelylain #2 正解
    harrozze
        37
    harrozze  
       322 天前
    @Apol1oBelvedere #35 这是个技术贴
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   946 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 19:51 · PVG 03:51 · LAX 12:51 · JFK 15:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.