Linux挂载详细介绍(一)——part和lvm的由来

系列文章目录

分区操作,请参考目录下其他博文。


文章目录


前言

介绍Linux中两类挂载方式的由来。


基本挂载

Linux中将一块新的磁盘(物理设备,比如设备名为/dev/sdb)进行挂载操作时,有以下几种方式:

1.将整块设备/dev/sdb,挂载到一个目录(挂载点)下,此时该物理设备的类型,我们称为disk,完整的disk;

这种方式,将整块设备划给了某一个挂载点,代表该目录可以使用这整块磁盘空间,而其他同级/上级目录则无法使用;
即,该设备一旦划给某挂载点,则无法进行二次分配,全部容量归一个挂载点使用。
利弊:

挂载操作简易,但不存在磁盘空间管理;一旦挂载,空间全部固定到一个挂载点上,这一点很生硬!

分区方式

2.将整块设备/dev/sdb,先进行分区,然后将各个分区挂载到不同目录(多个挂载点)下,此时该物理设备的类型,我们逻辑上称为part;

对/dev/sdb进行第一次分区后,被分出来的设备,它的设备名末尾会带上数字1,即/dev/sdb1,它的类型是part;
此时若/dev/sdb还有剩余空间,
进行第二次分区后,被分出来的设备,它的设备名末尾会带上数字2,即/dev/sdb2,它的类型同样是part;
依此类推......

利弊:
存在磁盘空间管理,可以根据业务划分多个挂载点,从同一块设备上,各个挂载点获取自己所需的磁盘空间;
挂载操作相对复杂,需先分区,再格式化,最后进行挂载;同样地,分区一旦划给某挂载点,则无法进行二次分配,全部容量归一个挂载点使用。

演进

根据上述2个场景,想一想,有一个致命点是我们无法接受的,即:

①.挂载点无法伸缩大小(其实伸缩不是不可以,但基于part的方式,需要将整块设备初始化才行,也就是说从头所有的步骤都重新来过一遍,重新规划,那已存储的数据怎么办?这种方法根本不叫方法,我们的期望肯定是,不影响其他挂载点的情况,目标挂载点能够自由伸缩)

所以现在的需求是:挂载点能自由伸缩大小,同时不影响其他挂载点

逻辑卷管理器

这才有了逻辑卷管理器(lvm)的出现。

上图中你必须要知道的两点:
1.只要卷组的空间足够,逻辑卷lv-data1或者lv-data2都可以随时扩大空间,缩小更是可以的;
2.lv-data1伸缩大小时,完全不会影响到lv-data2,反之亦然;

除此之外,逻辑卷管理器还具备以下优势:

可以在任何时候灵活地扩展空间;
可以安装和处理任何文件系统;
可以通过迁移来恢复错误磁盘;
可以使用快照功能恢复文件系统到先前的阶段;


总结

需要了解分区和lvm之间的区别,分析演进的原因,生产环境中结合二者使用。

要**手动从 GRUB 命令行启动个使用 LVMLinux 系统**,你需要了解系统的磁盘布局、内核位置以及根文件系统所在的逻辑卷。以下是详细的步骤解释。 --- ### ✅ 前提条件 假设: - 系统使用 **GPT 分区表** - `/boot` 位于普通分区(如 `(hd0,gpt2)`) - 根文件系统 `/` 使用 **LVM**,卷名为 `openeuler-root`(对应 `/dev/mapper/openeuler-root`) - 内核镜像为 `/boot/vmlinuz`,initramfs 为 `/boot/initramfs.img` 你已经进入了 GRUB 的命令行界面(例如 `grub>` 或 `grub rescue>`)。 --- ### 🔧 手动启动步骤 ```grub # 1. 加载必要的模块(尤其是 LVM 支持) insmod lvm insmod part_gpt insmod ext2 # 如果 /boot 是 ext2/ext3/ext4 文件系统 # 2. 设置包含 /boot 的分区为 root set root=(hd0,gpt2) # 3. 指定内核镜像并设置启动参数 linux /vmlinuz root=/dev/mapper/openeuler-root ro # 4. 加载 initramfs 镜像(必须与内核版本匹配) initrd /initramfs.img # 5. 启动系统 boot ``` --- ### 📝 代码逐行解释 ```grub insmod lvm ``` > 加载 LVM 模块,使 GRUB 能识别逻辑卷。没有这步,无法找到 `(lvm/...)` 设备。 ```grub insmod part_gpt ``` > 启用对 GPT 分区表的支持。如果是 MBR,则使用 `insmod part_msdos`。 ```grub insmod ext2 ``` > GRUB 使用 `ext2` 模块来读取 ext2/3/4 文件系统。即使你的 `/boot` 是 ext4,也使用 `ext2` 模块。 ```grub set root=(hd0,gpt2) ``` > 将当前根设备设为第块硬盘的第2个 GPT 分区 —— 这通常是 `/boot` 所在的位置。 ```grub linux /vmlinuz root=/dev/mapper/openeuler-root ro ``` > - `linux` 命令加载内核镜像 `/boot/vmlinuz` > - `root=/dev/mapper/openeuler-root` 告诉 Linux 内核真正的根文件系统在哪里 > - `ro` 表示以只读方式挂载根文件系统(安全起见) 💡 提示:你可以使用 tab 补全查看文件名,比如输入 `linux /vml` 然后按 Tab。 ```grub initrd /initramfs.img ``` > 加载初始 RAM 文件系统镜像,它包含驱动程序(如 LVM、加密、RAID),用于在挂载真实根文件系统前准备环境。 📌 注意:确保 `initramfs.img` 与 `vmlinuz` 版本致,可使用完整名称如 `/initramfs-5.14.0-70.el9.x86_64.img` ```grub boot ``` > 执行启动过程,将控制权交给内核。 --- ### 💡 实际案例(OpenEuler/CentOS/RHEL 使用 LVM) 假设你在 OpenEuler 上遇到 GRUB 救援模式: ```grub grub> insmod lvm grub> insmod part_gpt grub> insmod ext2 grub> set root=(hd0,gpt2) grub> linux /vmlinuz root=/dev/mapper/openeuler-root ro grub> initrd /initramfs-$(uname -r).img # 实际需替换为真实文件名 grub> boot ``` > ⚠️ 注意:GRUB 不支持变量替换(如 `$()`),所以必须手动输入正确的 `initramfs-xxx.img` 名称。可以用 `ls /` 查看。 --- ### 🔍 如何查找正确的文件名? 在 GRUB 命令行中执行: ```grub ls / ``` 会列出 `/boot` 下的内容,例如: ``` ... vmlinuz initramfs-5.14.0-70.el9.x86_64.img ... ``` 然后写全路径: ```grub initrd /initramfs-5.14.0-70.el9.x86_64.img ``` --- ### ❗ 常见问题及解决 | 问题 | 解决方法 | |------|---------| | `error: unknown filesystem` | 缺少文件系统模块,尝试 `insmod ext2` 或 `insmod xfs` | | `can't find command 'insmod'` | 处于 `grub rescue>` 模式,先运行 `set prefix=(hd0,gptX)/boot/grub2`,再 `set root=...`,然后 `insmod normal` | | `no such file or directory` | 检查 `/boot` 是否挂载正确,确认内核 initramfs 文件名 | | LVM 卷找不到 | 确保已执行 `insmod lvm`,且物理卷未损坏 | --- ### 🔄 恢复后建议 成功进入系统后,应重建 GRUB 以避免再次出现此问题: #### 对于 UEFI 系统(OpenEuler/CentOS 8+/RHEL 8+): ```bash # 安装 grub2-efi 包(如果缺失) dnf install grub2-efi shim # 重新安装 GRUB 到 EFI 系统分区 grub2-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=openeuler # 生成新的 grub.cfg grub2-mkconfig -o /boot/grub2/grub.cfg ``` #### 对于 BIOS 系统: ```bash grub2-install /dev/sda grub2-mkconfig -o /boot/grub2/grub.cfg ``` --- ### ✅ 总结 通过 GRUB 命令行手动启动 LVM 系统的关键是: 1. 正确加载 `lvm`、`part_gpt`、`ext2` 等模块 2. 设置 `root` 为 `/boot` 所在分区 3. 使用 `linux` `initrd` 指定内核与初始化镜像 4. 传递正确的 `root=` 参数指向 LVM 逻辑卷 旦掌握这些技能,就能在系统无法自动启动时“救活”系统。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值