Debian版本越新对内存的要求越高:
Debian 9无法在64MB内存机器安装和启动, 通过backports源升级到4.19版本内核无法在128MB内存机器启动.
Debian 10无法在128MB内存机器安装和启动.
Debian 11 ....
官方即将在今年6月份停止维护LTS版本的Debian 8.
自己手里有一台virmach的128MB内存小鸡, DD了CentOS 8无法启动, DD了CentOS 7由于内存不够无**常使用YUM更新软件包, 因为virmach家的严格TOS中对磁盘IOPS限制变态所以也不敢加SWAP, 万恶的YUM太吃内存了...
YUM吃内存的问题无法解决, 只能换Linux发行版本了, 都说Debian**好, apt比yum省内存, 自己在VBox虚拟机中装了10.3体验了一下确实不错, 找回了多年前第一次用ubuntu的感觉, 嘎嘎嘎嘎,,,
想要在128MB内存的机器上用Debian 10.3首先要解决的就是由于内核太臃肿内核镜像太大导致系统无法启动的问题, Debian毕竟是一个兼顾笔记本, 台式机, 工作站, 服务器, 虚拟化环境的发行版本, 内核中包含所有这些环境可能碰到的硬件驱动程序和各种各样的文件系统支持, 正是由于兼顾的平台和硬件环境太多导致了内核镜像太大, 系统引导时通过内存加载内核镜像需要的内存越来越多.
对于虚拟化环境来说, 其实只需要兼顾XEN, KVM, Hyper-V, VMware, VBox即可, 完全不需要各种低功耗CPU, 声卡, 显卡, 蓝牙, 有线网卡, 无线网卡, USB, 光纤, 触摸板, 并口, 雷电, 火线, 各种传感器,,, 也就是说Debian官方内核对于虚拟化环境来说带有大量根本不可能用到的驱动和技术支撑内容, 把这些东东删除, 内核镜像体积自然就降低了, 也就可以在小内存机器上初始化内核镜像引导系统了, 以前我也研究过嵌入式系统内核裁剪移植这些, 虽说自己不会写硬件驱动, 内核裁剪多年不摸也手生了, 但内核裁剪的思路是不变的, 嵌入式开发拿到硬件开发板的第一步肯定是根据自己的硬件平台把内核中用不到的部分全部剔除掉, 然后才是编写硬件驱动程序添加到裁剪后的内核中...
经过两天的努力, 终于把最新的官方5.6.2版本Kernel裁剪到自己能接受的程度了, 内核deb安装包9.7MB, 安装后的initrd.img镜像文件8.9MB, vmlinuz 3.9MB, 实际测试最低可以在61MB内存环境下启动Debian 10.3, 做了个Debian 10.3底包DD到我的128MB内存小鸡上, 完美运行, 跑了1个Nginx, 2个kcptun, 2个shadowsocks-libev, 系统资源还有很大空余,,,,嘎嘎嘎嘎,,,
以下是相关文件分享链接, 包括DD底包, 内核编译配置文件和内核相关安装包等:
链接: https://pan.baidu.com/s/1twJ0TJvALk3enPofJ1Ue_w
提取码: 3c32
MD5:
16497aeb1b02f6f61d1646376f04e95e debian-10.tar.bz2
aa77e7c1df63b0980e72d7d049a4563e linux-image-5.6.2_5.6.2-1_amd64.deb
200afb3319ce88e171d460a383fdfdf4 linux-headers-5.6.2_5.6.2-1_amd64.deb
9a8cbc3de030a11a019beb65158a3329 linux-libc-dev_5.6.2-1_amd64.deb
文件说明:
1. debian-10.tar.bz2, 此文件为Debian 10.3压缩后的DD底包, 解压后是一个350MB的raw格式硬盘镜像, 你需要上传到你另一台有HTTP服务的小鸡上, 然后通过网络直接写入到小鸡的硬盘即可, root密码为administrator, 以virmach为例的关键步骤如下:
a. 关机, 设置CD-ROM为第一引导项, 加载AlpineLinux镜像并启动, 然后通过VNC链接到Alpine的控制台.
b. 使你的Alpine连上网: ifconfig eth0 up && udhcpc eth0
c. 通过网络写入硬盘镜像: wget -O - http://a.b.c.d/debian-10.raw | dd of=/dev/vda
d. 使用poweroff命令关机, 设置硬盘为第一引导项目并卸载CD-ROM中的AlpineLinux镜像.
e. 启动系统, 连接VNC, 不出意外的话应该能进入Debian 10.3系统了, 但根分区可用空间只有10MB左右, 需要立即进行分区扩容, 千万不要更新系统, 否则你的分区会被软件源索引数据填满, 悲剧了,,,
f. 分区表扩容, 以parted为例, fdisk同理:
# parted /dev/vda
(parted) unit s
(parted) p free # 记录下硬盘结束的selector位置
(parted) resizepart 1
(parted) # 输入硬盘结束位置, 例如12345555s
(parted) quit
# reboot
g. 文件系统扩容: resize2fs /dev/vda1
h. 建议再次reboot
2. linux-*.deb, 这三个文件为内核相关安装包, 如果你不需要在小鸡上编译软件可以只安装linux-image-*.deb这一个文件就可以了.
3. config.txt, 此文件为裁剪后的内核编译配置文件, 如果你想自行编译内核把此文件重命名为.config然后放到内核源码根目录然后直接make menuconfig进行调整然后编译就可以了, 内核编译步骤自行搜索, 我自己在2012款老古董RMBP上的VBox中使用4线程编译9分钟可以编译完.
4. 内核说明:
a. Kernel 4.13+的TCP协议栈内部已经实现了pacing, BBR不需要再强制搭配fq算法的qdisc了.
b. 裁剪后的内核默认qdisc为fq_codel(自行搜索, ArchLinux已默认使用此算法), tcp_congestion_control为bbr, 也就是说默认已经是BBR不用在自行开启了.
5. DD底包说明:
a. 默认开启了zram, 自动初始化了一个内存一半大小的zram设备作为交换分区, 内存交换页压缩比如果为1:2的话相当于系统多出了1/3的物理内存, 如果不需要可以使用systemctl disable zram禁用此服务.
b. 默认使用了iptables + ipset的防火墙策略, 如果不需要可以使用systemctl disable netfilter-persistent和systemctl disable ipset-persistent禁用.
c. 系统通过内核参数禁用了ipv6, 如果想开启去除/etc/default/grub文件中的ipv6.disable=1然后重新生成grub引导文件然后重启即可.
d. 去除了从DHCP服务器获取DNS信息自动更新/etc/resolv.conf文件的功能.
e. 系统默认使用了CGroups v2, 如果想切换回v1去除/etc/default/grub文件中的cgroup_no_v1=all systemd.unified_cgroup_hierarchy=1然后重新生成grub引导文件然后重启即可.
f. 系统默认加载了nf_conntrack模块并在/etc/sysctl.conf文件中配置了全局TCP连接数限制, 可根据自己硬件情况对相关参数进行调整.
g. /etc/sysctl.conf文件中还添加了几个常用内核参数配置, 在文件最下面, 例如tcp_fastopen, ip_local_port_range等, 可根据自己的情况进行调整.
h. Debian 10.3的systemd强制/run分区必须要有16MB的空闲空间才能执行systemd相关命令(a safety buffer of 16.0M is enforced), 如果你的系统启动后自行计算的/run分区小于20MB可以去除/etc/fstab文件中的/run挂载点前的注释然后重启系统.
i. 制作底包时使用了163的软件源镜像忘记改了, 如果你的小鸡在国外推荐修改为国外的软件源, 例如FB镜像.
j. 系统默认使用journald->rsyslog的方式记录日志, 如果不满足你的需求可以卸载rsyslog并调整journald的配置.
k. 系统默认使用haveged进行随机数熵值生成, 如果你想使用硬件熵值收集器可以禁用haveged并开启rngd服务, 修改前建议你执行测试两者的随机数生成速度.
终于可以睡觉了,,
转自: https://w w w.host loc.com/for um.php?mod=viewthread&tid=669559&extra=&highlight=debian&page=1