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

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

  •  
  •   Apol1oBelvedere · 2023-05-31 18:01:03 +08:00 · 3791 次点击
    这是一个创建于 540 天前的主题,其中的信息可能已经有所发展或是发生改变。

    寻求最小体积的服务器用 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  
       2023-05-31 18:05:50 +08:00   ❤️ 10
    不用找了,alpine linux
    lovelylain
        2
    lovelylain  
       2023-05-31 18:07:16 +08:00 via Android
    装个 openwrt 吧
    billgong
        3
    billgong  
       2023-05-31 18:15:46 +08:00
    Debian 应该能做得更小的。默认包不应该要 5G 啊,2GB 就应该能跑得起来了,包括 openssh 。
    OpenWRT x86 之类构建在 buildroot 上的系统可以做到非常小,当然你得提前确定一下需求,毕竟你可能得自己维护内核更新。

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

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

    至于“项目管理软件”会不会看到 musl 开始跳…挺难说的。至少很多东西都要重新编译,这个到哪都差不多。
    aru
        20
    aru  
       2023-05-31 21:01:50 +08:00   ❤️ 2
    OP 估计是以虚拟机磁盘文件占用来计算系统磁盘空间占用吧。
    Debian 11 正常方式安装,建立一个 5GB 的虚拟机硬盘文件就够了
    如果通过 debootstrap 方式来构建,2GB 就够了(实际占用 1GB ,另外还有 1GB 给程序和文档用)
    如果使用压缩文件系统,1GB 就够了,实际占用 200MB ,还有 800M 给后续使用
    ihciah
        21
    ihciah  
       2023-05-31 21:08:38 +08:00   ❤️ 1
    听起来是个 XY 问题。
    如果为了降低虚拟硬盘空间占用的话,可以在虚拟机内部安装对应的辅助工具,有助于 VMM 感知真实硬盘空间占用,归还不必要的空间。
    另一个做法是一开始分配较小的硬盘空间,当有需要时再挂载新的虚拟硬盘设备进去,然后 vm 内部用 btrfs 或 lvm 等做多设备空间聚合。
    SaltyKitkat
        22
    SaltyKitkat  
       2023-05-31 21:11:11 +08:00
    文件系统透明压缩或许会对你有帮助
    weiqk
        23
    weiqk  
       2023-05-31 21:24:41 +08:00
    4m linux core
    haikea
        24
    haikea  
       2023-05-31 21:40:28 +08:00
    @lovelylain 正解
    choury
        25
    choury  
       2023-05-31 21:43:24 +08:00
    给你一个脚本,是我之前搞内核搞的打包一个自定义的 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  
       2023-05-31 21:43:50 +08:00
    5G 的 Debian 大概率是安装说把桌面组件选上了。
    pagxir
        27
    pagxir  
       2023-05-31 22:35:54 +08:00
    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  
       2023-05-31 22:46:41 +08:00
    RHEL 就默认的最小安装,不特意精简,也就两三 G 大小

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

    /dev/sda1 62G 1.9G 57G 4% /
    LokiSharp
        32
    LokiSharp  
       2023-06-01 09:45:25 +08:00
    5G+ 的 Debian 是装了 GUI 和 Build Essential 吧 Emmmm ,装了这两个的发行版不可能小
    a1274598858
        33
    a1274598858  
       2023-06-01 10:01:05 +08:00
    试试 debian 的云镜像 https://mirror.accum.se/cdimage/cloud/
    Apol1oBelvedere
        34
    Apol1oBelvedere  
    OP
       2023-06-01 22:11:26 +08:00
    @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
       2023-06-02 00:14:57 +08:00   ❤️ 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  
       2023-06-02 04:52:45 +08:00
    @lovelylain #2 正解
    harrozze
        37
    harrozze  
       2023-06-02 04:59:09 +08:00
    @Apol1oBelvedere #35 这是个技术贴
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2669 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 00:24 · PVG 08:24 · LAX 16:24 · JFK 19:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.