当前位置: 首页 > news >正文

Linux 系统盘制作 | 引导加载器(GRUB 为例)| mount

去年我们在Windows下制作过双系统,使用rufus在win下制作ubuntu双系统 | 常见问题解决

今天我们来尝试在Linux下制作系统盘

准备工作
  1. 插入空白磁盘
    假设目标磁盘为 /dev/sdb(操作前请用 lsblk 确认,操作错误会导致数据丢失

一、创建分区与引导配置

# 1. 使用 parted 创建 GPT 分区表
sudo parted /dev/sdb mklabel gpt# 2. 创建 UEFI 分区 (建议 512MB)
sudo parted /dev/sdb mkpart "EFI" fat32 1MiB 513MiB
sudo parted /dev/sdb set 1 esp on  # 设置 ESP 标志# 3. 创建根分区 (剩余空间)
sudo parted /dev/sdb mkpart "ROOT" ext4 513MiB 100%# 4. 格式化分区
sudo mkfs.fat -F32 /dev/sdb1      # 格式化 EFI 分区为 FAT32
sudo mkfs.ext4 /dev/sdb2          # 格式化根分区为 ext4


二、挂载分区并复制系统文件

# 1. 创建挂载点并挂载分区
sudo mkdir -p /mnt/os
sudo mount /dev/sdb2 /mnt/os       # 挂载根分区
sudo mkdir -p /mnt/os/boot/efi
sudo mount /dev/sdb1 /mnt/os/boot/efi  # 挂载 EFI 分区# 2. 复制系统文件 (保留权限)
sudo cp -a /path/to/source-system/* /mnt/os/# 3. 获取分区 UUID
sudo blkid /dev/sdb2  # 记录输出的 UUID (如 1a2b3c4d-...)# 4. 编辑 fstab 文件
sudo nano /mnt/os/etc/fstab
# 添加以下内容 (替换 YOUR_ROOT_UUID)
UUID=fabceb0c-3ac2-4893-bab8-b2c2543a7926 /     ext4 defaults 0>
UUID=$(sudo blkid -s UUID -o value /dev/sdb1) /boot/efi vfat um>

查询:


三、安装引导加载器(以 GRUB 为例)

GRUB (GRand Unified Bootloader) 是什么?

  1. GRUB 是一个引导加载程序(Bootloader)
  2. 它是计算机启动时运行的第一个程序
  3. 主要功能:
    • 加载操作系统内核
    • 提供启动菜单
    • 管理多个操作系统
    • 处理启动参数

为什么需要安装 GRUB?

  1. 系统启动的必要组件
    • 计算机启动时,BIOS/UEFI 首先运行
    • 然后需要 GRUB 来加载 Linux 内核
    • 没有 GRUB,系统无法正常启动
  1. 多系统支持
    • 如果电脑上有多个操作系统(如 Windows 和 Linux)
    • GRUB 可以提供选择菜单
    • 让用户选择要启动哪个系统
  1. 内核管理
    • Linux 系统可能有多个内核版本
    • GRUB 可以管理这些不同版本
    • 在启动时选择要使用的内核
  1. 故障恢复
    • 提供恢复模式选项
    • 可以传递特殊参数给内核
    • 帮助系统从故障中恢复

GRUB 的工作流程

  1. 计算机启动
  2. BIOS/UEFI 运行(前文有讲到过感兴趣的可以去看一下)
  3. GRUB 被加载
  4. GRUB 显示启动菜单
  5. 用户选择(或自动选择)要启动的系统
  6. GRUB 加载选定的内核
  7. 系统继续启动过程

GRUB 的配置文件

  • 主要配置文件:/boot/grub/grub.cfg
  • 用户配置文件:/etc/default/grub
  • 可以通过修改这些文件来:
    • 更改启动菜单外观
    • 设置默认启动项
    • 添加启动参数
    • 配置超时时间

为什么需要重新安装 GRUB?

  1. 系统升级后可能需要更新
  2. 安装新内核后需要更新配置
  3. 系统损坏需要修复
  4. 添加新硬盘或分区后需要更新
  5. 双系统安装后需要配置

这就是为什么在之前的操作中,我们需要:

  1. 安装 GRUB 到 EFI 分区
  2. 生成新的配置文件
  3. 确保系统能够正常启动
# 1. 进入新系统环境
sudo chroot /mnt/os# 2. 安装 GRUB 到 EFI 分区
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=LINUX# 3. 生成 GRUB 配置文件
grub-mkconfig -o /boot/grub/grub.cfg# 4. 退出 chroot
exit

实现:

  1. 主磁盘 /dev/sda (80GB)
    • 这是系统的主磁盘,使用 GPT 分区表
    • 包含三个分区:
      • /dev/sda1:1GB 的 EFI 系统分区(系统原本的)
      • /dev/sda2:2GB 的 Linux 文件系统(系统原本的)
      • /dev/sda3:76.9GB 的 Linux 文件系统(系统原本的)
  1. 第二磁盘 /dev/sdb (2.57GB)
    • 这是一个较小的磁盘,也使用 GPT 分区表
    • 包含两个分区:
      • /dev/sdb1:512MB 的 EFI 系统分区
      • /dev/sdb2:2.1GB 的 Linux 文件系统
      • 这就是我们刚刚 创建的测试磁盘或
  1. 逻辑卷 /dev/mapper/ubuntu--vg-ubuntu--lv (38.47GB)
    • 这是系统使用 LVM(逻辑卷管理)创建的逻辑卷
    • 大小为 38.47GB
    • 这是系统原本的,用于存储系统数据

系统原本的分区

  • /dev/sda 上的所有分区
  • /dev/mapper/ubuntu--vg-ubuntu--lv 逻辑卷

创建的分区

  • /dev/sdb 上的分区(测试用的)

GRUB 安装过程

  1. 系统检测到 /dev/sda1 已经挂载在 /boot/efi
  2. 成功安装了 GRUB 引导加载程序
  3. 生成了新的 GRUB 配置文件,包含了两个内核版本:
    • 6.8.0-57-generic
    • 6.8.0-52-generic

警告信息

Warning: os-prober will not be executed to detect其他可启动分区

这个警告是正常的,表示 GRUB 不会自动检测其他操作系统。如果您需要双系统启动,可以启用 os-prober。


四、验证与挂载虚拟文件系统

# 1. 挂载必要虚拟文件系统 (在 chroot 外执行)
sudo mount -t proc proc /mnt/os/proc
sudo mount -t sysfs sys /mnt/os/sys
sudo mount --rbind /dev /mnt/os/dev# 2. 测试启动配置 (可选)
sudo chroot /mnt/os
systemctl daemon-reload  # 如果使用 systemd
exit# 3. 卸载所有挂载点
sudo umount -R /mnt/os

测试

查看新系统:

查看挂载

功能测试

  1. 挂载测试
    • 我们成功挂载了 /dev/sdb2/mnt/os
    • 这证明了新系统的根分区是可访问的
    • 文件系统(ext4)是正常工作的
  1. 虚拟文件系统挂载的意义
    • proc:进程信息文件系统
    • sys:系统信息文件系统
    • dev:设备文件系统
    • 这些挂载成功说明新系统可以访问基本的系统资源
  1. 文件操作测试的意义
echo "这是一个测试文件" | sudo tee /mnt/os/test.txt
sudo cat /mnt/os/test.txt
    • 创建文件成功:说明文件系统有写入权限
    • 读取文件成功:说明文件系统有读取权限
    • 文件内容正确:说明数据完整性得到保证

这个简单的测试虽然看起来只是创建和读取了一个文本文件,但实际上验证了:

  1. 文件系统的基本功能
  2. 系统的权限管理
  3. 基本的 I/O 操作
  4. 挂载系统的完整性

五、启动故障排查清单

现象

检查点

修复命令示例

无法进入 GRUB

EFI 分区是否标记为 esp?

parted /dev/sdb set 1 esp on

启动后卡在 initramfs

/etc/fstab 中的 UUID 是否正确?

blkid 核对并修改 fstab

文件权限错误

是否使用 cp -a

重新复制并检查 ls -l /mnt/os


关键概念解释

  • UUID:分区的唯一身份证号,格式化后自动生成,避免因设备名(如 /dev/sdb)变化导致启动失败。
  • chroot:临时切换根目录到新系统,使其能独立配置引导程序和系统服务。
  • procfs/sysfs:内存中的虚拟文件系统,提供内核和进程的实时信息,需在启动时动态挂载。

相关文章:

  • 二叉树进阶 - 二叉搜索树
  • PDF转excel+json ,vue3+SpringBoot在线演示+附带源码
  • 宇树机器狗go2—slam建图(1)点云格式
  • MLLMs for TSAD ?
  • 单例模式:懒汉式的两种优化写法
  • 编译报错 宏 _IOC_SIZEBITS,而这个宏在编译时未定义
  • Bash 中的数学运算详解
  • 【每天一个知识点】模式识别
  • 自动驾驶---决策规划之导航增强端到端
  • Jinja2模板引擎SSTI漏洞
  • 加密壳(二)将shellcode写入PE
  • STL——红黑树的封装及map/set的模拟实现
  • 数字孪生火星探测车,星际探索可视化
  • 泛目录二级目录【实用指南】,无极站群系统2025升级版
  • leetcode125.验证回文串
  • java蓝桥杯b组
  • 20-算法打卡-哈希表-赎金信-leetcode(383)-第二十天
  • 用sed替换文本 笔记250419
  • Linux 进程间通信详解
  • 鼠标移动操作
  • 诺奖得主等数十位经济学家发表宣言反对美关税政策
  • 为博眼球竟编造一女孩被活埋,公安机关公布10起谣言案件
  • 上海召开全市加强社会治安综合治理中心规范化建设工作推进会
  • 长沙岳麓警方通报“女子疑被性侵”:正在进一步侦办
  • 抵制饭圈极端应援,发倡议书还不够
  • 新华书店成立全民阅读研究院,李敬泽任专家委员会主任