温馨提示×

Linux minimal如何启动

小樊
33
2025-12-24 02:18:49
栏目: 智能运维

Linux Minimal 启动指南

一、常见场景与对应启动方式

  • 使用 QEMU 直接启动一个由内核 + initramfs 组成的最小系统(BusyBox 作为 init)。
  • 制作可引导的 ISO(基于 Ubuntu 的 debootstrap 根文件系统 + GRUB),用 QEMU 或虚拟机测试。
  • 将最小系统安装到真实磁盘/U 盘,通过 BIOS/UEFI 的 GRUB 引导进入。

二、方式一 QEMU 启动内核与 initramfs

  • 准备
    • 内核镜像:编译得到 arch/x86_64/boot/bzImage
    • 根文件系统:用 BusyBox 静态编译,在 _install 目录补齐 etc/init.d/rcSetc/fstab,并生成 rootfs.img.gz
  • 示例命令
    qemu-system-x86_64 \
      -kernel ./linux-5.x/arch/x86_64/boot/bzImage \
      -initrd ./rootfs.img.gz \
      -append "root=/dev/ram init=/linuxrc console=ttyS0" \
      -nographic -serial mon:stdio
    
  • 要点
    • 内核配置需启用 Initial RAM filesystem and RAM disk (initramfs/initrd) supportRAM block device support
    • initramfs 的根通常为 /dev/ram,初始化进程为 /linuxrc(BusyBox 安装时创建的符号链接)。
    • 使用 -nographic -serial mon:stdio 可直接在终端交互;如需日志可改为 -serial file:output.txt

三、方式二 制作可引导 ISO 并在 QEMU 启动

  • 构建最小根文件系统(Ubuntu)
    sudo debootstrap --arch=amd64 jammy ./rootfs http://mirrors.aliyun.com/ubuntu/
    sudo chroot ./rootfs
    passwd root
    # 可按需裁剪包
    apt remove -y man-db manpages wireless-tools network-manager xserver-common
    apt autoremove -y && apt clean
    exit
    
  • 打包与引导配置
    mkdir -p ./iso/casper
    sudo mksquashfs ./rootfs ./iso/casper/filesystem.squashfs -comp xz
    sudo cp /boot/vmlinuz-$(uname -r) ./iso/casper/vmlinuz
    sudo cp /boot/initrd.img-$(uname -r) ./iso/casper/initrd
    
    mkdir -p ./iso/boot/grub
    cat > ./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
    
    sudo grub-mkrescue -o ./minilinux.iso ./iso/
    
  • 启动测试
    qemu-system-x86_64 -cdrom ./minilinux.iso -m 512M
    
  • 常见问题速排
    • 出现 Kernel panic: Attempted to kill init!:检查 init= 是否指向存在的初始化程序(如 /sbin/init/linuxrc),必要时在 GRUB 中改为 init=/sbin/init
    • 进入 (initramfs) 急救 Shell:先用 lsblk 确认介质(如 /dev/sr0),再检查 root=casper 参数是否匹配;若缺少工具,可在宿主机的 initramfs 钩子中加入 lsblk 并重新生成 initrd

四、方式三 安装到真实磁盘或 U 盘并引导

  • 分区与格式化(示例:整盘 /dev/sdb,前 500MB 为引导分区,余下为根分区)
    sudo fdisk /dev/sdb    # 创建 sdb1(500M), sdb2(剩余)
    sudo mkfs.ext4 /dev/sdb1
    sudo mkfs.ext4 /dev/sdb2
    sudo mount /dev/sdb2 /mnt/sysroot
    sudo mkdir -p /mnt/boot
    sudo mount /dev/sdb1 /mnt/boot
    
  • 安装 GRUB 到目标盘
    sudo grub-install --root-directory=/mnt /dev/sdb
    
  • 部署内核与初始化
    # 拷贝你构建好的内核与 initramfs/initrd
    sudo cp /boot/vmlinuz-<version> /mnt/boot/vmlinuz-mini
    sudo cp /boot/initrd.img-<version> /mnt/boot/initrd-mini
    
    # 在目标根分区创建最小结构
    sudo mkdir -p /mnt/sysroot/{etc,proc,sys,dev}
    # 示例 inittab(仅启动 shell)
    cat > /mnt/sysroot/etc/inittab <<'EOF'
    ::sysinit:/bin/mount -t proc proc /proc
    ::sysinit:/bin/mount -t sysfs sys /sys
    ::askfirst:/bin/sh
    ::ctrlaltdel:/sbin/reboot
    ::shutdown:/bin/umount -a -r
    EOF
    
  • 配置 GRUB(/mnt/boot/grub/grub.cfg)
    set default="0"
    set timeout=3
    menuentry "Minimal Linux" {
      linux /vmlinuz-mini root=/dev/sda2 ro quiet
      initrd /initrd-mini
    }
    
  • 启动
    • 将磁盘/ U 盘接到目标机器,BIOS 选择该介质启动即可进入最小系统。

五、最小系统必备要点与排错清单

  • 内核配置
    • 启用 Initial RAM filesystem and RAM disk (initramfs/initrd) supportRAM block device support,确保能挂载 /dev/ram 并解包 initramfs。
  • 初始化与根文件系统
    • initramfs 场景:确保 /linuxrc(或你指定的 init= 程序)存在且可执行;常见为 BusyBox 静态链接,避免动态库缺失。
    • ISO/casper 场景:确认 root=/dev/ram0casper 参数匹配,且 filesystem.squashfs 包含可用的 /sbin/init
  • 常见报错速解
    • Attempted to kill init!:检查 init= 路径与权限,必要时改为 /sbin/init/linuxrc
    • Kernel panic - not syncing: VFS: Unable to mount root fs:核对 root= 与介质/镜像是否匹配;在 initramfs 中使用 lsblk 确认块设备,必要时扩充 initramfs 工具集。

0