添加initramfs脚本,让云固件能启动linux

  1. 先安装qemu-utils

    sudo -i
    apt update
    apt install qemu-utils
  2. 转到/etc/initramfs-tools目录

    cd /etc/initramfs-tools
  3. 将mwtools工具挂载到任何一个方便的位置,我这里是挂载到了我的主目录下面,mwtools目录自己mkdir

    mount /dev/sdb1 /home/kob/mwtools
  4. 将几个文件拷贝过来

    cp /home/kob/mwtools/mwtools/distros/initramfs-tools/initramfs.conf .
    cp /home/kob/mwtools/mwtools/distros/initramfs-tools/modules .
    chmod +x modules
    cd hooks
    cp /home/kob/mwtools/mwtools/distros/initramfs-tools/hooks/mwnbd .
    chmod +x mwnbd
    cd ..
    cd scripts/local-top
    cp /home/kob/mwtools/mwtools/distros/initramfs-tools/scripts/local-top/mwnbd .
    chmod +x mwnbd
    cd ..
    cd local-bottom
    cp /home/kob/mwtools/mwtools/distros/initramfs-tools/scripts/local-bottom/mwnbd .
    chmod +x mwnbd

    debian要在modules文件最后一排加上efivarfs

  5. 最后再更新一下

    cd /boot
    mkinitramfs -o /boot/initrd.img-6.11.09.19-generic

    debian的话运行下面的命令:

    sudo update-initramfs -u -k all

    可以做一个脚本自动运行.sh

#!/bin/bash

# 检查是否具有root权限
if [ "$EUID" -ne 0 ]; then
    echo "请使用sudo或root权限运行此脚本"
    exit 1
fi


apt install qemu-utils -y
cp initramfs.conf /etc/initramfs-tools/
cp modules /etc/initramfs-tools/
cp update-initramfs.conf /etc/initramfs-tools/
cp ./hooks/mwnbd /etc/initramfs-tools/hooks/
cp ./scripts/local-top/mwnbd /etc/initramfs-tools/scripts/local-top/
cp ./scripts/local-bottom/mwnbd /etc/initramfs-tools/scripts/local-bottom/
chmod +x /etc/initramfs-tools/modules
chmod +x /etc/initramfs-tools/hooks/mwnbd
chmod +x /etc/initramfs-tools/scripts/local-bottom/mwnbd
chmod +x /etc/initramfs-tools/scripts/local-top/mwnbd


# 检测系统发行版
if [ -f /etc/os-release ]; then
    . /etc/os-release
    case "$ID" in
        debian)
            echo "检测到Debian系统"
            # 安全追加模块到文件
            grep -qxF 'efivarfs' /etc/initramfs-tools/modules || echo 'efivarfs' >> /etc/initramfs-tools/modules
            # 更新initramfs
            ;;
        ubuntu)
            echo "检测到Ubuntu系统"
            ;;
        *)
            echo "错误:不支持的Linux发行版 - $ID"
            exit 1
            ;;
    esac
else
    echo "错误:无法检测系统信息"
    exit 1
fi
# 生成指定initramfs镜像
update-initramfs -u -k all
echo "操作已完成"