寻求最小体积的服务器用 Linux 发行版,多个版本测试数据( Debian netins 及 Ubuntu Server 等)如下:
为什么 Hyper-V 安装 Debian 后一段时间关闭虚拟机,期间未安装任何软件,显示虚拟机合并中,之后虚拟机的 VHDX 文件增长到 36GB 是为什么?
1
mohumohu 2023-05-31 18:05:50 +08:00 10
不用找了,alpine linux
|
2
lovelylain 2023-05-31 18:07:16 +08:00 via Android
装个 openwrt 吧
|
3
billgong 2023-05-31 18:15:46 +08:00
Debian 应该能做得更小的。默认包不应该要 5G 啊,2GB 就应该能跑得起来了,包括 openssh 。
OpenWRT x86 之类构建在 buildroot 上的系统可以做到非常小,当然你得提前确定一下需求,毕竟你可能得自己维护内核更新。 sparse 的虚拟磁盘如果有大量的临时写入,写完又删掉了,空间应该不会主动回收,那肯定会越写越大,直到写满分配的容量。page 虚拟内存等等都可能是大户。 |
4
infun 2023-05-31 18:20:06 +08:00
你的真实需求是什么?
|
5
pagxir 2023-05-31 18:21:00 +08:00 via Android 1
debootstrap 只基本安装,完之后不会超过 1G ,你的 5G 肯定连桌面都安装了
|
6
Apol1oBelvedere OP @infun 只用来安装及运行一套项目管理软件(几百 MB ),会存在备份及移动,需要体积小。目前 Ubuntu Server 22 最小化安装加项目软件已经到 16GB 了,是不是系统 update 产生的历史旧文件导致的?
|
7
Apol1oBelvedere OP @mohumohu 不希望这个系统用在服务器用途。
|
8
Apol1oBelvedere OP @pagxir 装没装 GUI 这个能分得出来的。
|
9
infun 2023-05-31 18:31:39 +08:00
@Apol1oBelvedere
一楼说的 alpine linux 能满足需求吗? |
10
bigfei 2023-05-31 18:34:08 +08:00 via Android
建议 dockerlize 一下你的管理软件
|
11
LindsayZhou 2023-05-31 18:34:22 +08:00
alpine +1
如果你的软件不依赖 glibc 的话,挺合适的,安装完成我没注意过,不超过 1G 吧。安装镜像 200 MB 大小。 hack 一点的玩法可以直接用 data disk 模式,从镜像读取之后,系统直接跑在内存里。不过生产环境还是不太建议了。 |
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 等常用的软件。
|
14
0superx0 2023-05-31 18:57:26 +08:00
osmc 之类的基于 debian 系统有 x86 版,安装完 1g 不到,还有 smb ,投屏之类的软件,非常实用,当服务器很简单,反正是基于 debian 的
|
16
lhbc 2023-05-31 19:10:48 +08:00 via Android
最小的 debian 不是 70MB 吗?经过 gz 压缩后
解压后也不过占几百 M |
17
jKpzPv20NjX56i44 2023-05-31 19:15:49 +08:00
要 minimal ,无脑选 alpine
|
18
tony1016 2023-05-31 20:30:49 +08:00
alpine 可选占用 0
|
19
Arthur2e5 2023-05-31 20:51:43 +08:00
alpine 可以很小。musl 的话有些东西会不一样,被喷最大的点是 DNS 不支持 TCP 导致大包用不了,不过最近 1.2.4 也修了。
至于“项目管理软件”会不会看到 musl 开始跳…挺难说的。至少很多东西都要重新编译,这个到哪都差不多。 |
20
aru 2023-05-31 21:01:50 +08:00 2
OP 估计是以虚拟机磁盘文件占用来计算系统磁盘空间占用吧。
Debian 11 正常方式安装,建立一个 5GB 的虚拟机硬盘文件就够了 如果通过 debootstrap 方式来构建,2GB 就够了(实际占用 1GB ,另外还有 1GB 给程序和文档用) 如果使用压缩文件系统,1GB 就够了,实际占用 200MB ,还有 800M 给后续使用 |
21
ihciah 2023-05-31 21:08:38 +08:00 1
听起来是个 XY 问题。
如果为了降低虚拟硬盘空间占用的话,可以在虚拟机内部安装对应的辅助工具,有助于 VMM 感知真实硬盘空间占用,归还不必要的空间。 另一个做法是一开始分配较小的硬盘空间,当有需要时再挂载新的虚拟硬盘设备进去,然后 vm 内部用 btrfs 或 lvm 等做多设备空间聚合。 |
22
SaltyKitkat 2023-05-31 21:11:11 +08:00
文件系统透明压缩或许会对你有帮助
|
23
weiqk 2023-05-31 21:24:41 +08:00
4m linux core
|
24
haikea 2023-05-31 21:40:28 +08:00
@lovelylain 正解
|
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 |
26
cwbsw 2023-05-31 21:43:50 +08:00
5G 的 Debian 大概率是安装说把桌面组件选上了。
|
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 |
28
Andim 2023-05-31 22:46:41 +08:00
|
29
jtshs256 2023-05-31 23:26:14 +08:00
如果虚拟机里跑的话可以考虑下 Photon OS ,模板也就两百多 M ,甚至已经是自带 docker 的了……不过默认安全策略比较严格,配置起来要稍微花点时间
|
30
tigren 2023-06-01 04:29:33 +08:00
求稳还是别用 Alpine , 可以搜下 Alpine DNS Issue 有前人踩过的坑
|
31
zed1018 2023-06-01 08:49:40 +08:00
debian 最小安装哪里要这么多,我才装的,还多余装了个 fail2ban 。
/dev/sda1 62G 1.9G 57G 4% / |
32
LokiSharp 2023-06-01 09:45:25 +08:00
5G+ 的 Debian 是装了 GUI 和 Build Essential 吧 Emmmm ,装了这两个的发行版不可能小
|
33
a1274598858 2023-06-01 10:01:05 +08:00
试试 debian 的云镜像 https://mirror.accum.se/cdimage/cloud/
|
34
Apol1oBelvedere OP @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 |
35
Apol1oBelvedere OP @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 |
36
harrozze 2023-06-02 04:52:45 +08:00
@lovelylain #2 正解
|
37
harrozze 2023-06-02 04:59:09 +08:00
@Apol1oBelvedere #35 这是个技术贴
|