Vmware的Ubuntu构建极简版Linux发行版

1.安装号所需文件

复制代码
sudo apt update && sudo apt install -y linux-source build-essential debootstrap squashfs-tools grub-pc-bin xorriso qemu-system-x86 cpio mtools

创建专属目录,避免文件混乱

复制代码
mkdir -p ~/minilinux/{kernel,rootfs,iso}

进入该文件夹

复制代码
cd ~/minilinux

2.构建 Ubuntu 最小根文件系统

复制代码
sudo debootstrap --arch=amd64 jammy ./rootfs http://mirrors.aliyun.com/ubuntu/

该命令会下载约 200MB 左右的基础文件,等待执行完成即可。

3.裁剪根文件系统

进入根文件系统的chroot环境

复制代码
sudo chroot ./rootfs

卸载无用包(按需删减,保留核心即可)

复制代码
apt remove -y man-db manpages wireless-tools network-manager xserver-common

apt autoremove -y

apt clean

设置 root 密码(必须,否则无法登录)

复制代码
passwd root

退出chroot环境

复制代码
exit

4.制作可引导的ISO镜像

创建iso/casper目录,在~/minilinux目录下执行以下命令,创建所需的目录结构

复制代码
sudo mkdir -p ./iso/casper

-p参数的作用:递归创建目录,如果父目录(iso)已存在,只创建子目录(casper);如果父目录不存在,会一并创建,避免 "目录不存在" 的错误。

打包根文件系统为squashfs压缩镜像

复制代码
sudo mksquashfs ./rootfs ./iso/casper/filesystem.squashfs -comp xz

复制当前系统的内核和initrd到ISO目录

复制代码
sudo cp /boot/vmlinuz-$(uname -r) ./iso/casper/vmlinuz

sudo cp /boot/initrd.img-$(uname -r) ./iso/casper/initrd

5.创建 GRUB 引导配置

复制代码
mkdir -p ./iso/boot/grub

sudo tee ./iso/boot/grub/grub.cfg <<EOF

set default="0"

set timeout=5

menuentry "Minimal Linux" {

    linux /casper/vmlinuz boot=casper root=/dev/ram0 quiet splash

    initrd /casper/initrd

}

EOF

6.生成ISO镜像

复制代码
sudo grub-mkrescue -o ./minilinux.iso ./iso/

验证镜像生成成功

复制代码
ls -lh ./minilinux.iso

发现成功生成

7.启动Linux

在当前minilinux目录下执行命令,直接模拟启动镜像,适合快速测试

复制代码
qemu-system-x86_64 -cdrom ./minilinux.iso -m 512M

其中-cdrom指定镜像文件为光盘启动源,-m 512M给虚拟机分配512MB内存。启动后若能看到GRUB菜单,选择"Minimal Linux"并成功进入系统控制台,说明镜像启动正常。

系统出现了Kernel panic(内核恐慌),错误提示是Attempted to kill init!,这说明系统的初始化进程(init)无法正常启动,是构建极简Linux时的常见问题。

8.排查问题

挂载根文件系统(之前的rootfs目录)

复制代码
sudo mount -o bind ./rootfs /mnt

检查是否存在init相关程序

复制代码
ls /mnt/bin/bash

ls /mnt/sbin/init

发现文件都在,排除了"程序缺失"的原因,那QEMU启动时出现Kernelpanic的核心问题就聚焦在GRUB配置的挂载方式不匹配。

编辑GRUB配置文件

复制代码
sudo nano ./iso/boot/grub/grub.cfg

将原有内容替换为:

复制代码
set default="0"

set timeout=5



menuentry "Minimal Linux" {

    linux /casper/vmlinuz root=/dev/ram0 init=/sbin/init quiet splash

    initrd /casper/initrd

}

重新生成ISO镜像

复制代码
sudo grub-mkrescue -o ./minilinux.iso ./iso/

用QEMU重新启动测试

复制代码
qemu-system-x86_64 -cdrom ./minilinux.iso -m 512M

系统启动时出现了根文件系统设备等待超时的问题,最终进入了BusyBox的急救Shell,这是Linux启动过程中"根文件系统挂载失败"的典型表现。

在当前的(initramfs)提示符下,尝试手动查找并挂载根文件系统,列出所有可用的块设备,找到根文件系统镜像(通常是/dev/sr0,对应光盘)

复制代码
lsblk

在initramfs的急救Shell中执行lsblk命令时提示sh:lsblk:notfound,这说明当前的初始化内存文件系统(initramfs)中缺少lsblk工具(该工具属于util-linux包,可能在构建initramfs时未被包含)。

在宿主Ubuntu中重新配置initramfs,确保包含lsblk工具,安装 util-linux(lsblk 所属包,若未安装)

复制代码
sudo apt install -y util-linux

编辑initramfs配置,强制包含lsblk,创建钩子脚本

复制代码
sudo nano /etc/initramfs-tools/hooks/lsblk

写入以下内容:

复制代码
#!/bin/sh

PREREQ=""

prereqs() {

    echo "$PREREQ"

}

case "$1" in

    prereqs)

        prereqs

        exit 0

        ;;

esac

. /usr/share/initramfs-tools/hook-functions

复制 lsblk 到 initramfs

复制代码
copy_exec /usr/bin/lsblk /bin

赋予脚本执行权限

复制代码
sudo chmod +x /etc/initramfs-tools/hooks/lsblk

重新生成initramfs

复制代码
sudo update-initramfs -u -k $(uname -r)

将更新后的initrd文件覆盖到./iso/casper/目录,确保镜像使用新的initramfs

复制代码
sudo cp /boot/initrd.img-6.8.0-40-generic ./iso/casper/initrd

重新生成ISO镜像

复制代码
sudo grub-mkrescue -o ./minilinux.iso ./iso/

用QEMU重新启动测试

复制代码
qemu-system-x86_64 -cdrom ./minilinux.iso -m 512M

尝试手动查找并挂载根文件系统,列出所有可用的块设备

复制代码
lsblk

挂载squashfs根文件系统到/root

复制代码
mount /mnt/casper/filesystem.squashfs /root

若发现没有反应,则表示执行成功,可以检查系统基本信息

查看内核版本

复制代码
uname -r

查看根文件系统挂载情况

复制代码
df -h

查看当前进程

复制代码
ps aux

测试文件操作

创建测试文件,并查看

复制代码
touch /test.txt

ls

写入内容

复制代码
echo "Hello, My Minimal Linux!" > /test.txt

读取内容

复制代码
cat /test.txt

至此,已经完成构建极简版Linux发行版。

9.将最终的minilinux.iso镜像文件提前复制到VMware所在的主机中

打开 VMware,点击「创建新的虚拟机」,选择「自定义(高级)」→ 点击「下一步」。

兼容性选择默认的「Workstation 17.x」(或对应版本)→ 点击「下一步」。

选择「安装程序光盘映像文件(ISO)」,点击「浏览」选择你的 minilinux.iso → 点击「下一步」。

选择「Linux」,版本选择「Ubuntu64位」(或与你制作的Linux架构匹配的版本,如x86_64对应64位)→点击「下一步」。

输入名称(如「MinimalLinux」),选择存储位置→点击「下一步」。

默认1个处理器即可(极简系统资源需求低)→点击「下一步」。

分配512MB(或1GB)即可,无需过高→点击「下一步」。

使用桥接网络或者仅主机模式都行

默认「LSI Logic」→ 点击「下一步」。

默认「SCSI」→ 点击「下一步」。

选择「创建新虚拟磁盘」→ 点击「下一步」。

磁盘大小:分配 2GB 即可(极简系统占用极小),选择「将虚拟磁盘存储为单个文件」→ 点击「下一步」。

点击「完成」,VMware 会自动创建虚拟机。

启动该虚拟机即可。

也可输入命令

ls

至此,已经在Vmware上部署好Minimal Linux虚拟机。

相关推荐
赵民勇8 小时前
Linux/Unix中install命令全面用法解析
linux·shell
苏宸啊9 小时前
Linux指令篇(一)
linux·运维·服务器
我要升天!10 小时前
Linux中《网络基础》
linux·运维·网络
鸽芷咕11 小时前
【2025年度总结】时光知味,三载同行:落笔皆是沉淀,前行自有光芒
linux·c++·人工智能·2025年度总结
羑悻的小杀马特11 小时前
指尖敲代码,笔尖写成长:2025年度总结与那些没说出口的碎碎念
linux·c++·博客之星·2025年度总结
晴天¥12 小时前
VMware+Oracle linux LVM/非LVM磁盘扩容
linux·运维·服务器
oMcLin12 小时前
如何在Oracle Linux 8.4上搭建并优化Kafka集群,确保高吞吐量的实时数据流处理与消息传递?
linux·oracle·kafka
worilb12 小时前
journalctl 与 tail 使用对比
linux
UIUI13 小时前
list_for_each_entry
linux·数据结构·链表
LeenixP13 小时前
RK3576-Debian12删除userdata分区
linux·运维·服务器·数据库·debian·开发板