目录
管理存储堆栈(LVM+VDO)
LVM 核心概念 & 关系
LVM 创建步骤
LVM 的 – l 和 – L
VDO
访问网络附加存储(NFS)
NFS 核心功能
NFS 安装配置
NFS 手动挂载
NFS 自动挂载
NFS 自动挂载:间接映射 vs 直接映射
控制启动过程(RHEL9)
RHEL9 启动过程
系统重启 / 关机命令
Systemd target
重置丢失的 root 密码
让系统日志持久保留
管理存储堆栈(LVM+VDO)
LVM 核心概念 & 关系
物理卷(PV):把物理磁盘 / 分区 “打标” 成 LVM 能识别的设备,相当于给普通磁盘办了 LVM 的 “身份证”,会写元数据记录设备信息,没打标的盘 LVM 不认。
物理区块(PE):LVM 的 “最小积木块”(默认 4M),所有 PV 都会被拆成大小一样的 PE,一块 PE 只能给一个 LV 用,是 LVM 分配空间的唯一单位,没有 PE 就没法分配空间。
卷组(VG):把多个 PV 的 PE “堆成一个大积木池”,不管底层是几块盘、什么型号,VG 里只认 PE,屏蔽了物理设备的差异,上层 LV 直接从池里拿积木。
逻辑卷(LV):从 VG 的 PE 池里 “挑几块积木拼出的逻辑分区”,格式化后和普通分区用起来没区别,核心优势是能随时从 VG 池里加 / 减 PE,实现扩容 / 缩容,不用像普通分区一样重新分区。
核心关系:物理盘 / 分区 → pvcreate 打标成 PV → 拆成 PE → 多个 PV 的 PE 合并成 VG 池 → 从池里取 PE 拼成 LV
易错点:创建 PV 前如果是新磁盘,用 fdisk/parted 分区时,分区类型必须改成 8e(LVM 专用),否则 pvcreate 会识别失败。
LVM 创建步骤
实际操作中不会直接用裸盘建 PV,完整步骤是:
分区:fdisk/parted 给磁盘分区,改类型为 8e,保存生效;
建 PV:pvcreate 分区名(如 /dev/sdb1),可加 – pvdisplay 验证;
建 VG:vgcreate VG 名 PV 列表(如 vgcreate vg01 /dev/sdb1 /dev/sdc1),vgdisplay 看剩余 PE;
建 LV:lvcreate 定大小 -n LV 名 VG 名,格式化(mkfs.xfs/ext4)+ 挂载(临时 mount / 永久 fstab);
-
易错点:建 LV 后必须格式化,否则无法挂载,新手容易忘这一步。
LVM 的 – l 和 – L
两者都是给 LV 指定大小,核心区别是是否和 PE 绑定,实操中根据场景选:
-
-L:指定绝对容量(G/M/T/K),和 PE 大小无关。例:lvcreate -L 10G -n lv01 vg01 → 直接创建 10G 的 LV,LVM 会自动计算需要多少 PE。
-
-l:指定PE 数量 / 百分比,必须和 PE 大小联动,最终大小 = PE 数 ×VG 的 PE 大小(默认 4M)。常用写法:-l 256(256×4M=1G)、-l 50% VG(占 VG 总 PE 的 50%)、-l 100% FREE(用 VG 剩余所有 PE)。
-
易错点:用 – l 时如果手动输 PE 数,要算准数值,输错会导致 LV 大小不符合预期;百分比只支持 % VG 和 % FREE,其他写法(如 % PV)无效。
VDO
VDO 不是独立的存储设备,而是块级的 “存储优化插件”,可以装在物理盘、LVM、RAID 上,上层系统看到的是 VDO 虚拟出的块设备,实际数据会被 VDO 优化后再写入底层,核心解决 “存储利用率低” 的问题,适合虚拟机、日志服务器、大数据场景。VDO 的 3 个核心优化:
先去重:给每个数据块算哈希值,重复的块不重复写,只加一个 “引用指针”,比如多台虚拟机的 CentOS 镜像,实际只存一份;
后压缩:对非重复的块用 LZ4 算法实时压缩(兼顾速度和压缩率),读取时自动解压,不影响上层使用;
精简配置(瘦分配):虚拟出比底层物理存储更大的空间,按需分配物理块,比如 1T 物理盘可以虚拟 5T 空间,只有实际写入数据时才占用物理空间。
-
个人理解:VDO 的优化顺序是 “去重→压缩”,因为如果先压缩再去重,重复数据的哈希值会不一样,就没法去重了,这是设计的关键,也是考点。
-
易错点:VDO 对小文件的优化效果有限,甚至可能有轻微性能损耗,别在小文件密集的场景(如小图片服务器)强行部署 VDO。
访问网络附加存储(NFS)
NFS 核心功能
NFS 是 Linux/Unix 专属的 **“网络文件夹” 协议 **,让一台服务器的目录变成 “网络共享盘”,其他 Linux 主机可以把这个共享盘挂载到本地,像操作本地文件夹一样读写,核心实现多主机文件共享和统一管理,比如集群服务器共享配置文件、日志文件。
个人理解:NFS 适合 Linux 集群内部共享,不适合跨系统(如 Linux 和 Windows),跨系统用 Samba 更合适,别搞混使用场景。
NFS 安装配置
NFS 依赖 rpcbind(端口映射),配置的核心是 **/etc/exports** 文件,一步错就会挂载失败,完整步骤:
安装:dnf install -y nfs-utils rpcbind;
启动:systemctl enable –now rpcbind nfs-server(先启动 rpcbind,再启动 nfs-server);
建共享目录:mkdir -p /data/nfs && chown nfsnobody:nfsnobody /data/nfs(目录权限必须给 nfsnobody,否则客户端挂载后无法读写);
配置 exports:/data/nfs 192.168.1.0/24 (rw,sync,no_root_squash)(格式:共享目录 允许访问的网段 / 主机 (权限选项));
生效配置:exportfs -rv(改完 exports 必须执行,否则配置不生效);
防火墙 + SELinux:开放 nfs、rpc-bind、mountd 服务;SELinux 如果没做策略,临时关闭 setenforce 0(生产环境建议配 SELinux 策略,不建议直接关)
易错点
-
服务端必须启动 rpcbind,否则客户端无法获取 NFS 端口,挂载时报错;
-
exports 的权限选项里,no_root_squash 表示客户端 root 用户在共享目录有 root 权限,生产环境如果不需要,别开,用 root_squash 更安全;
-
客户端只需要装 nfs-utils,不用启动 nfs-server 服务。
NFS 手动挂载
手动挂载是基础,临时使用,重启后失效,步骤:
查看服务端共享:showmount -e NFS 服务端 IP;
创建本地挂载点:mkdir -p /mnt/nfs(挂载点必须是空目录,且提前创建,否则挂载失败);
执行挂载:mount -t nfs NFS 服务端 IP:/data/nfs/mnt/nfs(必须指定 – t nfs,告诉系统挂载的是 NFS 文件系统);
验证:df -h(看是否挂载成功)。
-
易错点:创建挂载点时,别用系统已有目录(如 /root、/home),否则挂载后原目录的内容会被隐藏,卸载后才会恢复。
NFS 自动挂载
autofs 是 **“懒人挂载”,解决手动挂载重启失效、一直挂载占用资源的问题,核心是“按需挂载”**:访问挂载点时自动挂载,长时间不访问自动卸载,步骤核心是 “配主映射文件 + 配子映射文件”。
安装:dnf install -y autofs;
建主映射文件:在 /etc/auto.master.d/ 下建 xxx.autofs 文件(后缀必须是.autofs,否则 autofs 不认),内容:/mnt/etc/auto.nfs(格式:挂载根目录 子映射文件路径);
建子映射文件:按主映射文件的路径创建(如 /etc/auto.nfs),内容:nfs -rw 192.168.1.100:/data/nfs(格式:挂载点子目录 挂载选项 NFS 服务端共享路径);
启动:systemctl enable –now autofs;
验证:cd /mnt/nfs(访问挂载点,自动挂载,df -h 看结果)。
- 个人理解:autofs 的核心是 “主映射定根目录,子映射定具体挂载规则”。
NFS 自动挂载:间接映射 vs 直接映射
两者是 autofs 的两种挂载方式,核心区别在挂载点的定义方式,实操中间接映射更常用,易管理:
| 主配置标识 | 挂载根目录(如 /mnt) | 固定为 /- |
| 实际挂载路径 | 根目录的子目录(/mnt/nfs) | 任意绝对路径(/data/nfs) |
| 管理性 | 挂载点统一,易维护 | 挂载点分散,灵活性高 |
| 常用场景 | 集群共享、常规 NFS 挂载 | 特殊业务,需要自定义挂载路径 |
控制启动过程(RHEL9)
RHEL9 启动过程
RHEL9 的启动是 **“固件→GRUB2→内核 + initramfs→systemd”** 的流程,不用死记每一步,记关键节点和核心文件即可,步骤拆解:
通电自检:UEFI/BIOS 做 POST,检查硬件,找可启动设备;
加载 GRUB2:从可启动设备读取启动引导器 GRUB2,配置文件是 /boot/grub2/grub.cfg(BIOS)、/boot/efi/EFI/redhat/grub.cfg(UEFI);
加载内核 + initramfs:GRUB2 加载内核和初始化镜像 initramfs(包含启动所需的驱动和脚本,没有它内核识别不了硬盘);
启动 systemd:内核把控制权交给 initramfs 中的 /sbin/init(软链接到 systemd,PID=1,系统第一个进程);
挂载根文件系统:initramfs 中的 systemd 把磁盘根目录挂载到 /sysroot,然后切换到实际的根文件系统;
启动默认 target:systemd 读取默认目标(multi-user.target/graphical.target),启动对应的服务和单元,系统启动完成。
-
个人理解:initramfs 是启动的 “关键桥梁”,如果它损坏,系统会启动失败,因为内核无法识别底层硬件和根文件系统;GRUB2 的配置文件是自动生成的,别手动改,改 /etc/default/grub 后用 grub2-mkconfig 生成。
-
易错点:UEFI 和 BIOS 的 GRUB2 配置文件路径不一样,别搞混。
系统重启 / 关机命令
RHEL9 推荐用 systemctl 命令,传统命令是软链接,功能一致,核心命令:
-
关机:systemctl poweroff 或 poweroff(停止所有服务→卸载文件系统→关机,安全关机);
-
重启:systemctl reboot 或 reboot(停止所有服务→卸载文件系统→重启);
-
个人理解:别用 kill -9 强制关机 / 重启,会导致文件系统损坏、数据丢失,只有系统卡死时才考虑用硬重启。
Systemd target
target 是 systemd 对 **“系统运行模式”** 的定义,替代了传统 Linux 的运行级别,核心是把功能相近的服务(如网络服务、登录服务)整合在一起,启动一个 target 就会启动对应的所有服务,实现系统状态的切换。核心 target 及对应传统运行级别:
multi-user.target:多用户命令行模式,对应运行级别 3,生产服务器默认用这个,轻量、稳定;
graphical.target:图形化模式,对应运行级别 5,桌面版用,服务器不建议装,占资源;
rescue.target:救援模式,系统轻度故障时用(如配置文件错误),需要 root 密码;
-
emergency.target:紧急模式,系统严重故障时用(如根文件系统损坏),无需密码,功能极简。
-
易错点:切换默认 target 用命令systemctl set-default 目标名,比如systemctl set-default multi-user.target,改完后重启生效,别用 ln 手动创建软链接。
重置丢失的 root 密码
核心是通过 rd.break 进入紧急模式,重新挂载根目录为可读写,修改密码后修复 SELinux 上下文,步骤拆解:
重启系统,在 GRUB2 菜单按e编辑内核条目;
找到 linux 开头的行,在末尾添加rd.break,按 Ctrl+x 启动;
重新挂载根目录为可读写:mount -o rw,remount /sysroot(默认是只读,无法改密码);
切换到 chroot 环境:chroot /sysroot(让 /sysroot 成为临时根目录,否则无法执行 passwd);
修改 root 密码:passwd,输入新密码(注意密码复杂度,简单密码可能不通过);
修复 SELinux 上下文:touch /.autorelabel(关键步骤,否则重启后密码不生效,因为 /etc/shadow 没有 SELinux 标签);
退出 chroot:exit,再退出紧急模式:exit,系统会自动重新标记 SELinux,然后重启,新密码生效。
-
易错点:
-
必须添加 rd.break,别输错成 rd-break,否则无效;
-
一定要执行 touch /.autorelabel,修复 SELinux 上下文;
-
进入紧急模式后,系统没有网络,无法远程操作,只能本地操作。
让系统日志持久保留
RHEL9 的系统日志由 journald 管理,默认日志存在 /run/log/journal,重启后删除,要让日志持久保留,核心是修改 journald 的配置文件,步骤:
编辑配置文件:vim /etc/systemd/journald.conf;
找到Storage= 这一行,把注释去掉,改成Storage=persistent;
重启 journald 服务:systemctl restart systemd-journald;
验证:日志会自动存到 /var/log/journal,重启后不会丢失,用journalctl –list-boots可以看所有启动的日志。
-
个人理解:Storage 参数有三个值,别搞混:
-
persistent:持久保留,存 /var/log/journal;
-
volatile:临时保留,存 /run/log/journal,重启删除;
-
none:不保存日志,只输出到控制台。
-
实操易错点:改完配置后必须重启 journald 服务,否则配置不生效;/var/log/journal 目录会自动创建,不用手动建。



