Linux mkbootdisk 命令

注意:mkbootdisk是Red Hat/CentOS/Fedora等发行版中的工具,用于创建系统引导盘。现代系统更多使用GRUB、EFI或专门的恢复工具,但mkbootdisk在某些传统场景中仍有价值。

命令简介

mkbootdisk是一个用于创建系统引导盘的工具,主要用在Red Hat系Linux发行版中。它会创建一个可引导的磁盘或映像,包含当前运行内核的初始内存磁盘(initrd)和引导加载程序配置,用于系统故障时的恢复。

命令语法

mkbootdisk [选项] 内核版本

常用选项

选项 说明
--version 显示版本信息
--noprompt 不提示用户插入磁盘
--verbose 详细输出模式
--device <设备> 指定输出设备(默认为/dev/fd0)
--iso 创建ISO映像文件
--size <大小> 指定映像大小(默认为1440)
--rootdir <目录> 指定根目录路径
--kernelargs <参数> 向内核传递额外参数
--help 显示帮助信息

使用示例

1. 创建软盘引导盘

# 检查当前内核版本
uname -r

# 创建当前内核的引导软盘
sudo mkbootdisk `uname -r`

# 或者明确指定内核版本
sudo mkbootdisk 3.10.0-1160.el7.x86_64

2. 不提示直接创建引导盘

# 跳过插入磁盘的提示
sudo mkbootdisk --noprompt `uname -r`

# 指定设备(如果软驱不是/dev/fd0)
sudo mkbootdisk --device /dev/fd1 `uname -r`

3. 创建ISO映像文件

# 创建ISO格式的引导映像
sudo mkbootdisk --iso --device /tmp/bootdisk.iso `uname -r`

# 指定ISO映像大小(单位:KB)
sudo mkbootdisk --iso --size 2880 --device /tmp/bootdisk.iso `uname -r`

# 创建后刻录到CD/DVD
sudo wodim -v dev=/dev/sr0 /tmp/bootdisk.iso

4. 详细模式创建

# 显示详细创建过程
sudo mkbootdisk --verbose `uname -r`

# 输出示例:
# Insert a disk in /dev/fd0. Press return to continue or ^C to abort.
# Formatting /dev/fd0...
# Copying /boot/vmlinuz-3.10.0-1160.el7.x86_64...
# Copying /boot/initramfs-3.10.0-1160.el7.x86_64.img...
# Setting up boot loader...

5. 指定根目录创建引导盘

# 从指定目录读取内核文件(用于恢复环境)
sudo mkbootdisk --rootdir /mnt/sysimage `uname -r`

6. 完整引导盘创建脚本

#!/bin/bash
# 引导盘创建脚本
KERNEL_VERSION=$(uname -r)
DATE=$(date +%Y%m%d)
BACKUP_DIR="/boot/backup"
ISO_FILE="$BACKUP_DIR/bootdisk-$KERNEL_VERSION-$DATE.iso"

# 创建备份目录
mkdir -p $BACKUP_DIR

echo "当前内核版本: $KERNEL_VERSION"
echo "正在创建引导盘ISO映像..."

# 创建ISO映像
if sudo mkbootdisk --iso --device $ISO_FILE $KERNEL_VERSION; then
    echo "引导盘创建成功: $ISO_FILE"
    echo "文件大小: $(du -h $ISO_FILE | cut -f1)"

    # 创建软盘版本(如果有软驱)
    if [ -e /dev/fd0 ]; then
        echo "正在创建软盘引导盘..."
        sudo mkbootdisk --noprompt $KERNEL_VERSION
    fi

    # 验证ISO文件
    echo "验证ISO文件..."
    file $ISO_FILE
else
    echo "引导盘创建失败!"
    exit 1
fi

引导盘内容结构

mkbootdisk创建的引导盘包含以下关键文件:

文件 作用
vmlinuz-* 压缩的Linux内核
initrd-*.img 初始内存磁盘,包含启动所需的模块和工具
syslinux.cfg 引导加载程序配置文件
ldlinux.sys SYSLINUX引导加载程序

使用引导盘恢复系统

1. 从软盘引导

# BIOS设置从软盘启动
# 插入mkbootdisk创建的软盘
# 系统将从软盘引导,进入恢复模式

# 常见恢复选项:
# 1. 进入单用户模式(无需密码)
# 2. 检查和修复文件系统
# 3. 重新安装引导加载程序
# 4. 恢复配置文件

2. 从ISO/CD引导

# 将ISO映像刻录到CD/DVD
sudo wodim -v dev=/dev/sr0 bootdisk.iso

# 或创建可引导USB(使用dd)
sudo dd if=bootdisk.iso of=/dev/sdb bs=4M
sync

# 从CD/USB引导,进入恢复环境

3. 恢复引导加载程序

# 从引导盘启动后,进入恢复环境
# 挂载原系统根分区
mkdir /mnt/sysroot
mount /dev/sda2 /mnt/sysroot

# 重新安装GRUB
chroot /mnt/sysroot /bin/bash
grub2-install /dev/sda
grub2-mkconfig -o /boot/grub2/grub.cfg
exit

# 重启系统
reboot

常见问题解决

1. 内核版本错误

# 错误:Could not find kernel image
# 解决方案:检查内核文件是否存在
ls -la /boot/vmlinuz-*
ls -la /boot/initramfs-*.img

# 列出所有可用内核
rpm -q kernel

# 使用正确的内核版本
sudo mkbootdisk 3.10.0-1160.45.1.el7.x86_64

2. 设备空间不足

# 错误:Not enough space on device
# 解决方案:检查软盘容量
# 标准1.44MB软盘可能不够存储现代内核

# 使用ISO模式创建
sudo mkbootdisk --iso --size 2880 `uname -r`

# 或清理/boot目录旧内核
sudo package-cleanup --oldkernels --count=2

3. 软驱设备不存在

# 错误:Cannot open /dev/fd0: No such device
# 现代系统可能没有软驱

# 解决方案1:使用ISO模式
sudo mkbootdisk --iso `uname -r`

# 解决方案2:创建USB引导盘(使用其他工具)
sudo dd if=/dev/zero of=/dev/sdb bs=1M count=1
sudo mkfs.vfat /dev/sdb1
sudo syslinux /dev/sdb1
# 手动复制引导文件

现代替代方案

工具 说明 适用场景
grub2-mkrescue 创建GRUB2恢复盘 UEFI/BIOS系统恢复
livecd-tools 创建Live CD/USB 完整系统恢复
dd + syslinux 手动创建引导盘 自定义恢复环境
systemd-boot UEFI引导管理器 现代UEFI系统
发行版安装盘 通常包含恢复模式 通用系统修复

使用grub2-mkrescue创建恢复盘

# 安装所需工具
sudo yum install grub2-tools

# 创建GRUB2恢复ISO
sudo grub2-mkrescue -o /tmp/grub-rescue.iso

# 或创建包含特定内核的恢复盘
sudo mkdir -p /tmp/boot/grub2
sudo cp /boot/vmlinuz-* /boot/initramfs-*.img /tmp/boot/
sudo grub2-mkconfig -o /tmp/boot/grub2/grub.cfg
sudo grub2-mkrescue -o /tmp/custom-rescue.iso /tmp/

重要注意事项

  • 软盘限制:现代内核可能超过软盘容量(1.44MB)
  • 硬件兼容:许多现代计算机已不再配备软驱
  • 定期更新:系统内核更新后,应重新创建引导盘
  • 测试验证:创建后应在测试环境中验证引导盘可用性
  • 备份策略:引导盘是紧急恢复工具,不能替代常规备份
  • 现代替代:考虑使用USB恢复盘或Live CD等现代方案

安装mkbootdisk

# Red Hat/CentOS 7及以下版本通常已包含
# 如未安装,可使用yum安装
sudo yum install mkbootdisk

# CentOS 8/Stream可能需要从EPEL获取
sudo yum install epel-release
sudo yum install mkbootdisk

# Fedora系统
sudo dnf install mkbootdisk

# 从源码编译安装(不推荐)
# mkbootdisk通常是发行版特定工具

相关命令

  • grub2-mkrescue - 创建GRUB2恢复介质
  • mkisofs - 创建ISO映像文件
  • dd - 磁盘映像创建和复制
  • syslinux - 引导加载程序安装工具
  • dracut - 生成initramfs映像
  • uname - 显示系统信息(包括内核版本)
  • rpm - 管理RPM包(可查询内核版本)
  • livecd-creator - 创建Live CD工具