Linux 存储管理练习笔记

实验平台:VMware Fusion
操作系统:Rocky Linux 9.5(aarch64)
实验目录:/opt/storage_lab
实验日期:2026 年 7 月 24—25 日
说明:本文按本次实际操作顺序整理,保留了重要的错误现象、排查过程和修正方法。截图中的 UUID 只属于本次虚拟机,重新格式化后会改变。

[TOC]


一、实验环境与安全边界

1. 实验目标

本次环境用于练习:

  • 识别磁盘、分区、LVM、文件系统和挂载点
  • 使用 fdisk、parted 创建 GPT 分区
  • 创建 XFS 文件系统并设置标签
  • 临时挂载、卸载、只读重挂载
  • 理解挂载覆盖和 target is busy
  • 区分 df 与 du
  • 创建、启用和关闭 swap
  • 理解软链接、硬链接及跨文件系统限制
  • 在不修改真实 /etc/fstab 的情况下练习 UUID 挂载配置
  • 启用并设置 XFS 用户磁盘配额

2. 三块虚拟磁盘

设备容量用途安全要求
/dev/nvme0n120GRocky Linux 系统盘禁止分区、格式化或写入 swap 签名
/dev/nvme0n25GXFS、挂载、swap、链接等实验只操作明确创建的实验分区
/dev/nvme0n33Gparted 和 XFS quota 实验只操作明确创建的实验分区

判断 /dev/nvme0n1 是系统盘的依据,不是它叫“第一块盘”,而是它的下级设备承载了:

  • /boot/efi
  • /boot
  • 根文件系统 /
  • 系统原有的 [SWAP]

其中 /dev/nvme0n1p3 是 LVM 成员,内部包含:

rl-root  → /
rl-swap  → [SWAP]

初始块设备结构

/dev/nvme0n1 在整个实验中始终只查看、不修改。

3. 实验目录

/opt/storage_lab/
├── cover_test/
│   └── host_file.txt
├── links/
│   └── original.txt
├── mount_data/
├── notes/
└── quota_data/

各目录用途:

目录用途
mount_data普通挂载以及 df、du 实验
cover_test演示挂载到非空目录后的覆盖现象
links软链接和硬链接实验
notes保存安全的 fstab.practice
quota_dataXFS 用户配额实验

实验中曾恢复过快照,恢复后这些目录被手动重新创建。早期截图中出现过 mount_date 的拼写,重建后统一使用 mount_data。

4. 存储管理的基本层次

整块磁盘
   ↓ 创建分区表、划分空间
分区
   ↓ mkfs 或 mkswap
文件系统 / swap 签名
   ↓ mount 或 swapon
目录树中的挂载点 / 活动交换空间

必须区分:

  • 检测到磁盘,不代表已经有分区。
  • 有分区,不代表已经有文件系统。
  • 有文件系统,不代表已经挂载。
  • 写入 swap 签名,不代表 swap 已经启用。
  • 日常文件存储通常会经过“分区 → 文件系统 → 挂载”,但某些程序也能直接使用原始块设备,所以“必须分区”并不是绝对规则。

二、练习 1:识别磁盘、文件系统和挂载关系

目标

使用多个只读查询命令识别系统盘与两块实验盘,并理解各命令观察的是哪个层次。

1. 使用 lsblk 查看块设备树

lsblk

命令名称可以理解为 list block devices。

常见字段:

字段含义
NAME设备名称
MAJ:MIN内核使用的主、次设备号
RM是否为可移除设备
SIZE容量
RO底层块设备是否被标记为只读
TYPE设备类型
MOUNTPOINTS当前挂载位置

本次结果中的 TYPE:

  • disk:完整块设备;本实验中是 VMware 虚拟磁盘,不应笼统理解成实体物理硬盘。
  • part:普通分区。
  • lvm:LVM 逻辑卷。
  • rom:光盘设备。

使用 lsblk 识别系统盘和实验盘

结论:

  • nvme0n1 下有启动、根文件系统和 swap,所以是系统盘。
  • nvme0n2 和 nvme0n3 当时没有子分区、文件系统和挂载点,是两块空实验盘。

2. 使用 lsblk -f 查看文件系统信息

lsblk -f

-f 表示显示 filesystem 信息,不是普通文件的属主、权限或大小。

主要字段:

字段含义
FSTYPE文件系统或签名类型,例如 xfs、vfat、swap
FSVER文件系统版本
LABEL文件系统标签
UUID文件系统唯一标识
FSAVAIL可用空间
FSUSE%使用率
MOUNTPOINTS挂载点

lsblk -f 的文件系统信息

3. 自定义 lsblk 字段

lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS,MODEL

-o 表示只输出指定列。加入 MODEL 后可以看到设备来自 VMware:

VMware Virtual NVMe Disk

自定义 lsblk 输出字段

4. 使用 blkid 查看设备签名

blkid

blkid 适合精确查看:

  • UUID
  • LABEL
  • TYPE
  • PARTUUID
  • PARTLABEL

blkid 初始结果

UUID 与 PARTUUID 不同:

  • UUID:文件系统或 swap 签名的标识。
  • PARTUUID:分区表中分区本身的标识。

5. 使用 df -Th 查看已挂载文件系统

df -Th

参数:

  • -T:显示文件系统类型。
  • -h:用易读单位显示容量。

df -Th 初始结果

df 只显示当前已经挂载的文件系统。因此,虽然 lsblk 能看到空的 nvme0n2、nvme0n3,它们当时不会出现在 df 中。

本题结论

命令最适合观察
lsblk磁盘、分区、LVM 的树形关系和挂载点
lsblk -f文件系统类型、标签、UUID
blkid指定设备的文件系统签名和各种 ID
df -Th已挂载文件系统的容量和使用率

三、练习 2:使用 fdisk 创建 GPT 分区

目标

在 /dev/nvme0n2 上创建 GPT 分区表,并划分:

  • /dev/nvme0n2p1:2G
  • /dev/nvme0n2p2:1G
  • 剩余约 2G 暂不分配

1. 第一次操作:误建 DOS/MBR 分区表

执行:

fdisk /dev/nvme0n2

空盘进入 fdisk 后直接输入 n,工具自动创建了 DOS disklabel:

Created a new DOS disklabel
Disklabel type: dos

第一次误建 MBR 分区表

第一、第二个分区虽然成功出现,但分区表类型是 dos:

第一次得到的 MBR 分区结果

这不是本题目标。恢复快照后重新添加实验盘,并按 GPT 方式重做。

2. 正确操作:先建立 GPT 分区表

fdisk /dev/nvme0n2

交互过程:

g          创建新的 GPT 分区表

n          创建第一个分区
1          分区号;也可以直接回车接受默认值
回车       接受默认起始扇区
+2G        分区大小

n          创建第二个分区
2          分区号
回车       接受默认起始扇区
+1G        分区大小

p          在写入前预览分区表
w          写入磁盘并退出

重新创建 GPT 分区表和两个分区

参数和交互指令:

输入作用
g创建 GPT 分区表
n创建新分区
p打印当前内存中的分区方案
w把修改写入磁盘并退出
q不保存退出

fdisk 的修改通常先保存在内存中,只有 w 才正式写入。输入 p 只是预览。

3. 通知内核并验证

partprobe /dev/nvme0n2
fdisk -l /dev/nvme0n2
lsblk -o NAME,SIZE,TYPE,PTTYPE,FSTYPE

partprobe 的作用是通知内核重新读取磁盘上的分区表。

fdisk -l 显示 GPT 分区结果

使用 PTTYPE 验证 GPT

验证结果:

/dev/nvme0n2    5G   PTTYPE=gpt
├─nvme0n2p1     2G
└─nvme0n2p2     1G

两个分区的 FSTYPE 仍为空,这是正常现象:分区只划定了磁盘区域,还没有建立文件系统或 swap 签名。

GPT 与 MBR 的区别

项目MBR/DOSGPT
传统容量上限约 2TiB远大于常见单盘容量
分区结构主分区、扩展分区、逻辑分区没有 MBR 的主/扩展分区限制
分区标识类型编号等使用 GUID 类型和分区 GUID
UEFI 系统可以配合,但不是标准组合常与 UEFI 配合

安全提醒

以下命令中的设备名必须反复确认:

fdisk /dev/nvme0n2

如果误写成 /dev/nvme0n1 并保存,可能破坏系统盘分区表。


四、练习 3:创建 XFS 文件系统并设置标签

目标

在 /dev/nvme0n2p1 上建立 XFS 文件系统,并设置文件系统标签 LAB_DATA。

1. 创建 XFS 文件系统

mkfs.xfs /dev/nvme0n2p1

命令拆解:

  • mkfs:make filesystem,建立文件系统。
  • .xfs:指定创建 XFS。
  • /dev/nvme0n2p1:目标必须是实验分区 p1。

在 p1 上创建 XFS

mkfs.xfs 的输出展示了:

  • inode 大小
  • block 大小
  • allocation group 数量
  • 内部日志
  • reflink、bigtime 等 XFS 特性

这些是创建成功后的文件系统结构信息,不是错误。

mkfs 会破坏目标分区中的原有文件系统和数据。不能对 /dev/nvme0n1* 执行本实验命令,也不能把整个 /dev/nvme0n2 当成 p1 格式化。

2. 验证文件系统和 UUID

lsblk -f
blkid /dev/nvme0n2p1

创建 XFS 后的 lsblk -f

创建文件系统时自动生成了本次实验的 UUID:

d63071f7-13f7-4e86-a3a7-4d8fc7f54428

重新格式化会生成新的 UUID,因此笔记中的值不能直接照搬到另一台机器。

3. 设置文件系统标签

由于格式化时没有同时指定标签,后续使用:

xfs_admin -L LAB_DATA /dev/nvme0n2p1

验证:

lsblk -f

设置 LAB_DATA 标签后的结果

也可以在第一次格式化时直接写:

mkfs.xfs -L LAB_DATA /dev/nvme0n2p1

参数:

  • -L LAB_DATA:把 XFS 文件系统标签设为 LAB_DATA。

LABEL、PARTLABEL 和 UUID

名称所属层次说明
LABEL文件系统人工设置的可读名称
UUID文件系统创建文件系统时生成的唯一标识
PARTLABELGPT 分区表GPT 中的分区名称
PARTUUIDGPT 分区表GPT 分区的唯一标识

五、练习 4:临时挂载并验证读写

目标

把 /dev/nvme0n2p1 挂载到 /opt/storage_lab/mount_data,验证文件确实写入实验分区。

1. 挂载

mount /dev/nvme0n2p1 /opt/storage_lab/mount_data

基本格式:

mount 文件系统所在设备 挂载目录

挂载不是复制数据,而是把一个文件系统接入 Linux 的统一目录树。

2. 多角度验证

findmnt /opt/storage_lab/mount_data
lsblk -f
df -Th

重新搭建后完成临时挂载并验证

三个命令的侧重点:

  • findmnt:确认目标路径当前真正由哪个设备提供,并查看挂载选项。
  • lsblk -f:从设备树角度确认文件系统和挂载点。
  • df -Th:查看已经挂载的文件系统容量。

3. 创建并读取测试文件

cd /opt/storage_lab/mount_data
touch mount_test.txt
echo "hello world" > mount_test.txt
ls -l
cat mount_test.txt

在挂载文件系统中创建并读取文件

命令解释:

  • touch mount_test.txt:文件不存在时创建空文件。
  • >:把标准输出覆盖写入文件。
  • ls -l:查看文件属性。
  • cat:读取文件内容。

此时:

路径:/opt/storage_lab/mount_data/mount_test.txt
数据:保存在 /dev/nvme0n2p1 的 XFS 中

临时挂载的持久性

本次只执行了 mount,没有修改真实 /etc/fstab:

  • 重启后挂载关系消失。
  • 分区、XFS、标签、UUID 和文件数据仍保存在虚拟磁盘上。
  • 下次重新挂载同一文件系统后,可以再次看到磁盘中的文件。

六、练习 5:处理 target is busy

目标

理解为什么文件系统正在使用时不能正常卸载,并使用只读排查命令找出占用者。

1. 复现问题

Shell 当前位于:

/opt/storage_lab/mount_data

此时直接执行:

umount /opt/storage_lab/mount_data

出现:

target is busy

2. 查看占用者

fuser -vm /opt/storage_lab/mount_data

挂载点正忙及 fuser 排查

参数:

  • -v:详细显示。
  • -m:把目标视为一个已挂载文件系统,列出正在使用它的进程。

截图中的 bash 表示当前 Shell 正把这个文件系统里的目录作为工作目录。

3. 正确处理

cd /
umount /opt/storage_lab/mount_data

其他可能导致 busy 的情况:

  • 另一个 Shell 的当前目录位于挂载点内。
  • 某个程序打开了里面的文件。
  • 程序正在写日志或访问该文件系统。
  • 还有下级挂载点没有卸载。

规范做法是找出占用者并正常退出或关闭文件,不把 umount -l、umount -f 当作日常解决方案。


七、练习 6:理解挂载覆盖与当前目录引用

目标

观察把文件系统挂载到非空目录后,原目录内容发生什么变化。

1. 删除实验分区中的测试文件

当 /dev/nvme0n2p1 仍挂载在 mount_data 时执行了:

cd
ls /opt/storage_lab/mount_data
rm -rf /opt/storage_lab/mount_data/mount_test.txt

删除实验分区中的 mount_test.txt

这里确实删除了实验分区中的 mount_test.txt。不过删除单个普通文件更规范的写法是:

rm /opt/storage_lab/mount_data/mount_test.txt

-r 用于递归删除目录,-f 会跳过部分提示,对单个普通文件没有必要。

2. 准备被覆盖的目录

根文件系统中的目录:

/opt/storage_lab/cover_test

里面预先存在:

host_file.txt

将实验文件系统挂载到该目录:

mount /dev/nvme0n2p1 /opt/storage_lab/cover_test

正常情况下,通过路径 /opt/storage_lab/cover_test 访问时,看到的是实验文件系统的根目录;原来的 host_file.txt 被暂时遮住,但没有被删除。卸载后它会重新出现。

3. 本次出现的特殊现象

实验时 Shell 在挂载发生前已经进入了 cover_test,随后从当前目录使用:

cat host_file.txt

仍读到了原目录中的文件:

挂载覆盖时当前工作目录保留旧引用

原因:

  • Shell 在挂载前已经取得了底层目录对象的引用。
  • 在另一个文件系统覆盖该路径后,这个 Shell 的当前工作目录引用并不会自动替换。
  • 因此从旧的当前目录使用相对路径,仍可能访问被遮住的底层目录。
  • 从 / 重新使用绝对路径进入 cover_test,才会经过新的挂载关系。

更清晰的演示方法:

cd /
mount /dev/nvme0n2p1 /opt/storage_lab/cover_test
ls -la /opt/storage_lab/cover_test
umount /opt/storage_lab/cover_test
ls -la /opt/storage_lab/cover_test

结论:

  • 挂载到非空目录不会删除原文件,只会暂时遮住。
  • 卸载后原目录内容恢复可见。
  • 观察挂载覆盖前最好先 cd /,避免当前目录旧引用干扰判断。

八、练习 7:只读和读写重挂载

目标

不卸载文件系统,把已有挂载从读写模式切换为只读模式,再恢复为读写模式。

1. 切换为只读

mount -o remount,ro /opt/storage_lab/cover_test
findmnt /opt/storage_lab/cover_test

参数:

  • -o:指定挂载选项。
  • remount:修改现有挂载的选项。
  • ro:read-only,只读。

测试:

cat /opt/storage_lab/cover_test/mount_test.txt
touch /opt/storage_lab/cover_test/ro_test.txt
echo "new line" >> /opt/storage_lab/cover_test/mount_test.txt

只读重挂载及写入失败

结果:

  • 读取已有文件成功。
  • 创建新文件失败。
  • 追加写入失败。
  • 报错是 Read-only file system。

文件系统级只读状态对 root 同样有效,不能靠 root 身份正常绕过。

2. 恢复为读写

mount -o remount,rw /opt/storage_lab/cover_test
findmnt /opt/storage_lab/cover_test
touch /opt/storage_lab/cover_test/rw_test.txt
cd /
umount /opt/storage_lab/cover_test

rw 表示 read-write。

恢复读写并完成卸载

findmnt 与 lsblk 的只读含义不同

  • findmnt 的 OPTIONS 中出现 ro 或 rw,表示这次挂载的模式。
  • lsblk 的 RO=0 表示底层块设备没有被整体标记为只读。

因此 RO=0 不等于当前文件系统一定以 rw 挂载。


九、练习 8:理解 df 与 du

目标

比较文件系统整体空间与指定目录中文件占用量。

1. 未挂载时查看路径

df -Th /opt/storage_lab/mount_data
du -sh /opt/storage_lab/mount_data

未挂载时 df 显示根文件系统

此时 mount_data 只是根文件系统中的普通目录,所以:

  • df 显示 /dev/mapper/rl-root。
  • du 显示该空目录自身几乎没有占用。

df 路径 显示的是“当前承载该路径的文件系统”,并不固定显示某个设备。

2. 挂载实验文件系统后再次查看

mount /dev/nvme0n2p1 /opt/storage_lab/mount_data
df -Th /opt/storage_lab/mount_data
du -sh /opt/storage_lab/mount_data

挂载后的 df 与 du 基线

此时:

  • df 显示 /dev/nvme0n2p1,已用约 47M。
  • du 只显示约 4K。

新建 XFS 后即使目录中几乎没有普通文件,文件系统仍需要:

  • 超级块和其他元数据
  • allocation group 元数据
  • XFS 内部日志
  • inode 等结构

因此 df 的 47M 并不代表目录中有 47M 的普通文件。

3. 分配 200M 文件

cd /opt/storage_lab/mount_data
fallocate -l 200M /opt/storage_lab/mount_data/bigfile.bin
ls -lh
du -h bigfile.bin
du -sh /opt/storage_lab/mount_data
df -Th /opt/storage_lab/mount_data

参数:

  • fallocate:为文件快速预分配磁盘空间。
  • -l 200M:长度为 200MiB。
  • ls -lh:显示文件的逻辑大小。
  • du -h:显示文件实际占用的数据块。
  • du -sh:汇总目录占用。

创建 200M 文件后的 df 与 du

结果:

  • bigfile.bin 的逻辑大小为 200M。
  • du 显示文件约占 200M。
  • 整个目录约占 201M。
  • df 的文件系统已用空间从约 47M 增加到约 247M。

4. 删除并观察空间回收

本次输入了:

rm -rf /opt/storage_lab/mount_data/bigfile.bin

更规范的命令是:

rm /opt/storage_lab/mount_data/bigfile.bin

验证:

df -Th /opt/storage_lab/mount_data
du -sh /opt/storage_lab/mount_data
umount /opt/storage_lab/mount_data

删除大文件并回收空间

df 与 du 总结

命令数据来源统计范围
df文件系统空间统计整个文件系统,包含文件和元数据
du遍历目录树从指定目录能访问到的文件数据块

补充:

  • ls -lh 看文件逻辑大小。
  • du -h 看文件实际分配的数据块。
  • 本次 fallocate 实际分配了空间;如果是稀疏文件,ls 与 du 可能相差很大。

十、练习 9:创建、启用和关闭 swap

目标

把 /dev/nvme0n2p2 变成 1G swap,临时启用后再关闭,并保持系统原有 swap 不受影响。

1. 查看系统原有 swap

swapon --show
free -h

实验前系统已有的 2G swap

结果:

/dev/dm-1  partition  2G

这是系统原有的 rl-swap,本实验不能关闭或重新初始化它。

2. 修改 p2 的 GPT 分区类型

fdisk /dev/nvme0n2

需要使用:

t       修改分区类型
2       选择第二个分区
L       列出可用分区类型
q       退出类型列表分页器
19      在本机列表中选择 Linux swap
p       检查分区表
w       保存

第一次问题:输入了 p

在提示:

Partition type or alias:

输入 p 不是“打印分区表”,而是把 p 当成分区类型别名,所以结果是:

Type of partition 2 is unchanged: Linux filesystem

分区类型没有改变

同一个字母在不同提示位置可能有不同含义,必须先看清当前提示。

第二次问题:在分页器中输入 19

输入 L 后类型列表由分页器显示。屏幕底部出现类似:

:19

在类型列表分页器中输入 19

这时的 19 被分页器当作搜索内容,没有传给 fdisk。随后类型仍然没有改变:

退出后仍显示 Linux filesystem

正确操作:

  1. 在类型列表中按 q。
  2. 等屏幕重新出现 Partition type or alias:。
  3. 再输入本机列表对应的 19,也可以尝试清晰的别名 swap。
  4. 输入 p 检查,再用 w 保存。

3. 验证分区类型

partprobe /dev/nvme0n2
fdisk -l /dev/nvme0n2

p2 已变为 Linux swap 类型

此时只完成了“分区表中的类型标记”,还没有真正的 swap 签名。

4. 写入 swap 签名和标签

mkswap -L LAB_SWAP /dev/nvme0n2p2
lsblk -f
blkid /dev/nvme0n2p2

命令解释:

  • mkswap:在目标分区写入 swap 数据结构和签名。
  • -L LAB_SWAP:设置 swap 标签。
  • lsblk -f、blkid:验证 FSTYPE=swap、标签和 UUID。

创建 LAB_SWAP 并验证

本次 swap UUID:

fb96146e-638a-4e3c-b9ce-b050975b89df

mkswap 和 mkfs 一样会覆盖目标设备上的原有签名,因此设备名必须准确。

5. 临时启用实验 swap

swapon /dev/nvme0n2p2
swapon --show
free -h

启用实验 swap 后总量变成 3G

结果:

  • 系统原有 swap:2G。
  • 实验 swap:约 1G。
  • free -h 中总 swap:约 3G。

swapon --show 中的 PRIO 是优先级,数值越大优先级越高。本次系统 swap 是 -2,实验 swap 是 -3,因此系统 swap 优先级更高。

6. 只关闭实验 swap

swapoff /dev/nvme0n2p2
swapon --show
free -h

关闭实验 swap 后保留系统 swap

结果:

  • /dev/nvme0n2p2 不再活动。
  • /dev/dm-1 仍正常启用。
  • 总 swap 回到约 2G。

swapoff 只停止使用,不会擦除 LAB_SWAP 标签、UUID 或 swap 签名。

swap 的三个独立步骤

  1. 在 GPT 中把分区类型改成 Linux swap。
  2. 用 mkswap 写入实际 swap 签名。
  3. 用 swapon 激活。

前一步完成不代表后一步自动完成。

持久性

本次没有向真实 /etc/fstab 添加 swap 条目,因此:

  • swap 签名会保留。
  • 重启后 /dev/nvme0n2p2 不会因本实验自动启用。

十一、练习 10:软链接与硬链接

目标

观察 inode、链接计数、写入效果、目标改名后的行为。

1. 创建两个链接

cd /opt/storage_lab/links
ln original.txt hard_link.txt
ln -s original.txt soft_link.txt
ls -li

命令解释:

  • ln 源 新名称:创建硬链接。
  • ln -s 目标 新名称:创建软链接。
  • ls -li:显示 inode 编号和链接计数。

创建软硬链接并比较 inode

结果:

original.txt 与 hard_link.txt  inode 相同
两者链接计数均为 2
soft_link.txt                  inode 不同

软链接行显示:

soft_link.txt -> original.txt

2. 通过硬链接写入

echo "hello world" >> hard_link.txt
cat original.txt
cat soft_link.txt

通过硬链接写入后其他路径读取到同一内容

>> 表示追加,而不是覆盖。

original.txt 和 hard_link.txt 不是“一份原件、一份副本”,而是两个目录项共同指向同一个 inode,所以修改的是同一份数据。

3. 使用 readlink

readlink soft_link.txt
readlink hard_link.txt
cat hard_link.txt

readlink 对软硬链接的不同结果

结果:

  • readlink soft_link.txt 输出 original.txt,因为软链接保存目标路径。
  • readlink hard_link.txt 没有输出,因为硬链接只是普通目录项,不保存“目标路径”。

4. 重命名目标文件

mv original.txt test.txt
ls
cat hard_link.txt
cat soft_link.txt

结果:

  • hard_link.txt 仍能访问数据。
  • soft_link.txt 报 No such file or directory,成为悬空链接。

恢复名称:

mv test.txt original.txt
readlink soft_link.txt

目标改名导致软链接失效并在恢复名称后修复

软链接保存的是路径字符串。路径暂时不存在时链接失效;路径重新出现后链接又能工作。

软硬链接对比

项目硬链接软链接
inode与其他硬链接相同有自己的 inode
保存内容直接指向同一 inode保存目标路径字符串
目标改名仍有效原路径不存在时失效
跨文件系统不可以可以
链接目录通常不允许普通用户这样做可以

十二、练习 11:验证硬链接不能跨文件系统

目标

从根文件系统中的源文件向 /dev/nvme0n2p1 中创建链接,比较硬链接和软链接。

源文件:

/opt/storage_lab/links/original.txt

目标目录:

/opt/storage_lab/mount_data

其中 mount_data 当时挂载的是 /dev/nvme0n2p1,所以源和目标属于两个不同文件系统。

1. 创建跨文件系统硬链接

ln /opt/storage_lab/links/original.txt \
   /opt/storage_lab/mount_data/cross_hard.txt

结果:

Invalid cross-device link

2. 创建跨文件系统软链接

ln -s /opt/storage_lab/links/original.txt \
      /opt/storage_lab/mount_data/cross_soft.txt

ls -li /opt/storage_lab/mount_data
readlink /opt/storage_lab/mount_data/cross_soft.txt
cat /opt/storage_lab/mount_data/cross_soft.txt

跨文件系统硬链接失败而软链接成功

原理

inode 编号只在所属文件系统内部有意义。硬链接必须新增一个指向同一 inode 的目录项,因此不能跨越文件系统边界。

软链接只是保存路径字符串,所以可以从一个文件系统指向另一个文件系统。


十三、练习 12:安全练习 fstab

目标

理解 /etc/fstab 的六个字段和 UUID 挂载,但不修改真实 /etc/fstab,避免影响系统启动。

1. 查询挂载状态和 UUID

findmnt -S /dev/nvme0n2p1
blkid /dev/nvme0n2p1

查找 LAB_DATA 的 UUID

findmnt -S 按源设备查询;当设备未挂载时没有结果是正常的。

本次 UUID:

d63071f7-13f7-4e86-a3a7-4d8fc7f54428

2. 创建独立的练习文件

文件:

/opt/storage_lab/notes/fstab.practice

内容:

UUID=d63071f7-13f7-4e86-a3a7-4d8fc7f54428 /opt/storage_lab/mount_data xfs defaults,nofail 0 0

3. 让本次 mount 只读取练习文件

mount -a -T /opt/storage_lab/notes/fstab.practice
findmnt /opt/storage_lab/mount_data
lsblk -f
df -Th /opt/storage_lab/mount_data

使用练习 fstab 完成挂载和验证

参数:

  • -a:挂载配置文件中符合条件的全部条目。
  • -T 文件:使用指定的替代 fstab 文件,而不是默认读取 /etc/fstab。

验证后:

umount /opt/storage_lab/mount_data

六个字段

字段本次内容含义
1UUID=...要挂载的文件系统
2/opt/storage_lab/mount_data挂载点
3xfs文件系统类型
4defaults,nofail挂载选项
50不使用传统 dump 备份标志
60不安排传统启动时 fsck 顺序

nofail 表示设备缺失时不把该条目作为必须成功的启动条件,但它不能修复写错的 UUID、文件系统类型或挂载点。

为什么本次方法安全

  • 没有编辑真实 /etc/fstab。
  • mount -a -T 只在本次命令中读取练习文件。
  • 系统启动不会自动读取 fstab.practice。
  • 因此本题练习的是配置格式和验证方法,并没有实现永久挂载。

十四、练习 13:使用 parted 创建 GPT 分区

目标

在第二块实验盘 /dev/nvme0n3 上建立 GPT,并创建一个约 2GB 的分区,为 XFS quota 做准备。

1. 建立 GPT 分区表

parted /dev/nvme0n3 mklabel gpt
parted /dev/nvme0n3 print

2. 创建分区

parted /dev/nvme0n3 mkpart primary 1 2G
parted /dev/nvme0n3 print

使用 parted 建立 GPT 和第一个分区

命令拆解:

  • /dev/nvme0n3:目标实验盘。
  • mklabel gpt:创建 GPT 分区表。
  • mkpart:创建分区。
  • primary:在本次 GPT 下是分区名称,并不是 MBR 中受数量限制的“主分区”类别。
  • 1:起点约为十进制 1MB。
  • 2G:终点为十进制 2GB。

parted 的修改通常立即写入,不像 fdisk 那样最后统一输入 w。因此使用时要更加谨慎。

3. 使用 MiB 查看空闲空间

partprobe /dev/nvme0n3
parted /dev/nvme0n3 unit MiB print free
lsblk -o NAME,SIZE,TYPE,PTTYPE,FSTYPE,MOUNTPOINTS

使用 MiB 验证分区和剩余空间

结果:

磁盘总量:3072MiB
p1:约 1906MiB
剩余未分配:约 1165MiB
lsblk 显示 p1:1.9G

为什么命令写 2G,结果不是 2GiB:

  • parted 中这里的 G 按十进制 GB 处理。
  • 终点 2000MB 换算后约为 1907MiB。
  • 扣除起点后,分区约为 1906MiB,也就是约 1.86GiB。
  • lsblk 四舍五入显示为约 1.9G。

这不是错误。本次实验无需重做。

如果需要精确约 2GiB,可以明确使用 MiB 边界,例如:

parted /dev/nvme0n3 mkpart quota 1MiB 2049MiB

本次未使用这条命令,它只是单位换算的补充示例。

开头约 0.98MiB 的空隙来自 GPT 元数据和分区对齐,不是空间异常。


十五、练习 14:XFS 用户磁盘配额

目标

在 /dev/nvme0n3p1 上创建 XFS,挂载时开启用户配额,并给 alice 设置:

  • 软限制:50MiB
  • 硬限制:60MiB

这一部分是根据 Rocky Linux 默认使用 XFS 补充的实操,xfs_quota 的具体语法属于扩展内容。

1. 创建带标签的 XFS

mkfs.xfs -L QUOTA_LAB /dev/nvme0n3p1
blkid /dev/nvme0n3p1

创建 QUOTA_LAB 文件系统

参数:

  • mkfs.xfs:创建 XFS。
  • -L QUOTA_LAB:创建时直接设置文件系统标签。
  • /dev/nvme0n3p1:目标是分区 p1,而不是整个 nvme0n3。

结果中:

LABEL="QUOTA_LAB"
TYPE="xfs"
PARTLABEL="primary"

其中:

  • QUOTA_LAB 是 XFS 文件系统标签。
  • primary 是前面 parted mkpart primary 创建的 GPT 分区名称。
  • 它们属于不同层次。

2. 挂载时启用用户配额

mkdir -p /opt/storage_lab/quota_data
mount -o uquota /dev/nvme0n3p1 /opt/storage_lab/quota_data

参数:

  • -o uquota:挂载 XFS 时开启用户配额统计和执行。
  • uquota、usrquota 在这里是同类用户配额选项;findmnt 可能规范化显示成 usrquota。

验证:

findmnt /opt/storage_lab/quota_data
xfs_quota -x -c 'state' /opt/storage_lab/quota_data

用户配额挂载选项和状态

用户配额结果:

Accounting: ON
Enforcement: ON

含义:

  • Accounting: ON:内核正在统计各用户的使用量。
  • Enforcement: ON:达到限制时会真正执行限制。

组配额和项目配额显示 OFF 是正常的,因为本题只启用了用户配额。

状态还显示默认块宽限期为 7 天。

XFS 配额应在挂载时启用。如果已经在不带 uquota 的情况下挂载,稳妥做法是正常卸载后,再带 uquota 重新挂载,而不是假定可以随意通过 remount 开启。

3. 创建 Alice 的实验目录

mkdir -p /opt/storage_lab/quota_data/alice_data
chown alice:alice /opt/storage_lab/quota_data/alice_data
ls -ld /opt/storage_lab/quota_data/alice_data

命令解释:

  • mkdir -p:创建目录;父目录不存在时一起创建,已存在时不因此报错。
  • chown alice:alice:把属主和属组都设为 alice。
  • ls -ld:查看目录本身的详细属性,而不是列出目录内部内容。

chown 的作用只是让 Alice 有权限在该目录中写入。它不能代替 quota,也不决定 quota 的统计范围。

4. 设置 Alice 的软、硬限制

xfs_quota -x \
  -c 'limit bsoft=50m bhard=60m alice' \
  /opt/storage_lab/quota_data

命令解释:

部分含义
xfs_quotaXFS 配额管理工具
-x进入专家/管理模式
-c执行引号中的一条内部命令
limit设置限制
bsoft=50m块空间软限制为 50MiB
bhard=60m块空间硬限制为 60MiB
alice按 Alice 的 UID 设置
最后的路径指定要管理的 XFS 挂载点

这里的 b 表示块空间容量。如果限制的是 inode,则针对的是文件数量。

5. 查看配额报表

xfs_quota -x -c 'report -h -u' /opt/storage_lab/quota_data

参数:

  • report:显示配额报表。
  • -h:以易读容量单位显示。
  • -u:显示用户配额。

Alice 的 XFS 配额报表

结果:

alice  Used=0  Soft=50M  Hard=60M

说明配额限制已经保存成功。

截图中多行命令前的:

>

是 Shell 的续行提示。因为上一行末尾写了反斜杠 \,Shell 正在等待剩余命令;> 不是要手动输入的字符,也不是重定向或错误。

软限制、硬限制和宽限期

  • 软限制:可以短期超过;第一次超过后开始宽限期倒计时。
  • 宽限期:本次状态显示默认 7 天。
  • 硬限制:绝对上限,不能正常突破,没有额外宽限期。
  • 使用量降回软限制以下后,宽限计时会清除。

配额的统计范围

用户配额按 UID 统计整个 /dev/nvme0n3p1 文件系统,不是只限制:

/opt/storage_lab/quota_data/alice_data

如果 Alice 在这个 XFS 的其他目录中创建文件,同样会计入配额。alice_data 只是为了方便授权和测试。

本次完成程度

本次已经完成:

  • 以 uquota 挂载。
  • 确认用户配额 Accounting、Enforcement 均为 ON。
  • 为 Alice 设置 50M/60M 限制。
  • 通过报表确认限制存在。

本次尚未实际以 Alice 创建大文件验证:

  • 超过 50M 后的宽限期表现。
  • 超过 60M 后的 Disk quota exceeded。

因此准确结论是“配额设置成功”,不能写成“已经验证硬限制拦截成功”。


十六、练习错误与纠正复盘

这一部分集中整理本次练习中出现的错误、误判和容易混淆的正常现象。复习时应重点看“为什么错”,而不只是记住最终命令。

错误 1:把 lsblk -f 理解成查看普通文件属性

当时的理解

认为:

lsblk -f 用于显示文件的属性和信息

问题

lsblk 的操作对象是 block device(块设备)。这里的 -f 是 filesystem,不是普通文件。

正确理解

lsblk -f

查看的是块设备上的:

  • 文件系统类型
  • 文件系统版本
  • 标签
  • UUID
  • 可用空间
  • 挂载点

普通文件的权限、属主、大小等应使用:

ls -l 文件
stat 文件

错误 2:把 disk 直接说成“物理磁盘”

问题

lsblk 的 TYPE=disk 表示完整磁盘形态的块设备,但本实验中的设备是:

VMware Virtual NVMe Disk

它们是虚拟磁盘,不是 Mac 中真实存在的三块 NVMe 硬盘。

正确表述

disk 表示完整块设备;本实验中是 VMware 提供的虚拟磁盘。

错误 3:第一次创建分区时没有先建立 GPT

当时操作

进入空盘后直接输入 n 创建分区。

现象

fdisk 显示:

Created a new DOS disklabel
Disklabel type: dos

错误复盘:第一次误建 MBR

原因

空盘没有分区表,当前版本的 fdisk 自动准备了 DOS/MBR 分区表。创建出 p1、p2 并不代表分区表类型就是题目要求的 GPT。

正确操作

进入 fdisk 后先输入:

g

看到:

Created a new GPT disklabel

再使用 n 创建分区,最后 p 检查、w 保存。

复习判断

可使用:

fdisk -l /dev/nvme0n2
lsblk -o NAME,PTTYPE

确认出现 gpt,不能只凭“已经有两个分区”判断成功。


错误 4:恢复快照后,误以为实验目录和文件也会保留

现象

恢复快照后发现:

  • /opt/storage_lab 不存在或内容回到了旧状态。
  • host_file.txt 等准备文件不存在。
  • 两块后来添加的实验盘需要重新添加。

原因

快照恢复的是“创建快照时”的虚拟机状态。快照之后在系统盘中创建的目录、文件和部分虚拟硬件状态不会自动保留。

正确处理

恢复后先重新盘点:

lsblk
ls -la /opt
findmnt

再按实际状态补建实验目录,不要假定前一次操作仍在。


错误 5:挂载点命名出现 mount_date 与 mount_data 混用

现象

早期命令使用了:

/opt/storage_lab/mount_date

后续实验统一使用:

/opt/storage_lab/mount_data

风险

Linux 路径必须完全匹配。一个字母不同就是两个不同目录,可能导致:

  • 在一个目录挂载,却去另一个目录检查。
  • df 显示了根文件系统而不是实验盘。
  • 误以为文件丢失或挂载失败。

规范做法

本次最终统一为:

/opt/storage_lab/mount_data

每次操作后用下面的命令确认真实挂载关系:

findmnt /opt/storage_lab/mount_data

错误 6:当前目录位于挂载点内时直接卸载

当时操作

Shell 提示符显示当前位于 mount_data,仍执行:

umount /opt/storage_lab/mount_data

现象

target is busy

错误复盘:当前 Bash 占用挂载点

原因

Shell 的当前工作目录本身就是对该文件系统的使用。内核不能在进程仍引用它时完成正常卸载。

正确处理

先排查:

fuser -vm /opt/storage_lab/mount_data

退出挂载点:

cd /
umount /opt/storage_lab/mount_data

不要一遇到 busy 就使用强制或懒卸载。应先找出并解除占用。


错误 7:混淆“文件被删除”和“文件被挂载覆盖”

实际过程

mount_test.txt 当时位于已经挂载的 /dev/nvme0n2p1 中,随后执行:

rm -rf /opt/storage_lab/mount_data/mount_test.txt

这条命令确实删除了实验分区中的文件。

之后把同一个文件系统挂载到 cover_test,不能再期待其中出现已经被删除的 mount_test.txt。

与挂载覆盖的区别

  • 删除:目录项被移除,文件在该文件系统中不再存在。
  • 挂载覆盖:挂载点原目录中的内容只是暂时不可见,卸载后重新出现。

正确判断方法

先确认设备当前挂载在哪里:

findmnt -S /dev/nvme0n2p1

再通过该挂载点查看设备中的实际内容。


错误 8:在被覆盖目录中使用旧的当前工作目录,误判挂载结果

现象

Shell 在挂载前已经进入 cover_test。挂载完成后执行相对路径:

cat host_file.txt

仍然读到了底层根文件系统中的 host_file.txt,于是看起来像是“挂载没有遮住文件”。

错误复盘:当前工作目录仍引用底层目录

原因

Shell 在挂载前已经持有底层目录对象的引用。挂载改变了从父目录重新解析该路径时看到的内容,但不会自动替换进程已有的当前目录引用。

正确演示

挂载前先退出:

cd /
mount /dev/nvme0n2p1 /opt/storage_lab/cover_test
ls -la /opt/storage_lab/cover_test

使用绝对路径重新解析时,看到的才是当前挂载文件系统。


错误 9:未挂载时对目录执行 df,把根文件系统当成实验盘

现象

df -Th /opt/storage_lab/mount_data

输出:

/dev/mapper/rl-root

错误复盘:未挂载路径由根文件系统承载

原因

此时 mount_data 只是 / 文件系统中的普通目录。df 路径 显示承载该路径的文件系统,所以显示根逻辑卷完全正常。

正确判断

先确认:

findmnt /opt/storage_lab/mount_data

如果没有结果,说明它不是独立挂载点。挂载 p1 后再执行 df,才会显示 /dev/nvme0n2p1。


错误 10:删除普通文件时使用 rm -rf

当时操作

rm -rf /opt/storage_lab/mount_data/bigfile.bin

问题

  • -r 用于递归删除目录。
  • -f 会跳过部分提示并忽略不存在的目标。
  • 对普通文件不需要这两个选项。

虽然本次明确路径下删除成功,但这种习惯会扩大输错路径时的破坏范围。

规范写法

rm /opt/storage_lab/mount_data/bigfile.bin

执行前可先确认:

ls -lh /opt/storage_lab/mount_data/bigfile.bin

错误 11:认为 p2 “还没有做分区”

当时状态

lsblk 已显示:

nvme0n2p2  1G  part

所以 p2 已经是分区。它缺少的是 swap 类型和 swap 签名。

正确区分

状态验证命令
是否存在分区lsblk、fdisk -l
GPT 分区类型fdisk -l
是否有 swap 签名lsblk -f、blkid
是否已经启用swapon --show

错误 12:在 fdisk 的“分区类型”提示中输入 p

现象

Partition type or alias: p
Type of partition 2 is unchanged: Linux filesystem

错误复盘:分区类型未改变

原因

p 只有在 fdisk 主菜单中才表示打印分区表。当前提示正在等待“类型编号或别名”,所以 p 被当成了无效或不匹配的类型输入。

正确做法

先看当前提示。回到主菜单后:

t → 选择 p2 → 输入 Linux swap 的编号或别名

错误 13:在分区类型列表的分页器中输入 19

现象

输入 L 后看到很长的类型列表,在页面底部直接输入 19,屏幕出现:

:19

错误复盘:19 被分页器当成搜索内容

退出后检查,类型仍是 Linux filesystem。

原因

当时仍在分页器中,键盘输入由分页器处理,不是由 fdisk 的类型提示处理。

正确做法

  1. 按 q 退出分页器。
  2. 确认重新看到:

    Partition type or alias:
  3. 再输入本机列表对应的 19 或可用别名。
  4. 用 p 检查,并用 w 保存。

错误 14:把“Linux swap 分区类型”当成已经可用的 swap

问题

分区表显示 Linux swap 只是 GPT 元数据。它不能替代真正的 swap 签名和启用动作。

完整流程

fdisk t         → 修改 GPT 分区类型
mkswap          → 写入 swap 签名
swapon          → 激活
swapon --show   → 验证活动状态

每一步观察的是不同层次。


错误 15:没有先区分硬链接和软链接的跨文件系统能力

现象

尝试从根文件系统向挂载的 XFS 创建硬链接:

Invalid cross-device link

错误复盘:跨文件系统硬链接失败

原因

硬链接需要指向同一个 inode,而 inode 只在各自文件系统内部有意义。

正确结论

  • 硬链接不能跨文件系统。
  • 软链接保存目标路径,可以跨文件系统。
  • 这里的报错正是实验预期,不是磁盘损坏或权限问题。

易误判 16:findmnt -S 没有输出

现象

findmnt -S /dev/nvme0n2p1

没有输出。

正确解释

-S 是按挂载源查询。设备当时没有挂载,所以没有匹配结果是正常现象,不代表设备不存在。

设备是否存在应使用:

lsblk
blkid /dev/nvme0n2p1

易误判 17:parted 创建“2G”后 lsblk 只显示 1.9G

现象

parted /dev/nvme0n3 mkpart primary 1 2G

结果约为:

1906MiB
lsblk:1.9G

正确解释

这里的 G 使用十进制边界,2GB 不等于 2GiB。换算后约为 1.86GiB,显示 1.9G 是正常的。

如果题目要求精确二进制容量,应明确使用 MiB 或 GiB 边界。


易误判 18:findmnt 显示 usrquota,而命令输入的是 uquota

现象

挂载命令:

mount -o uquota ...

findmnt 却显示:

usrquota

正确解释

这是工具对同类用户配额选项的规范化显示,不是选项失效。随后:

Accounting: ON
Enforcement: ON

已经证明用户配额正常启用。


教学补充 19:xfs_quota 命令没有出现在原笔记中

这一点不是用户漏记,也不是应当自行猜出的命令。它是根据 Rocky Linux 的 XFS 环境补充的扩展实操。

需要掌握的最小主线:

mount -o uquota
        ↓
xfs_quota ... state
        ↓
xfs_quota ... limit
        ↓
xfs_quota ... report

其中:

  • -x 是管理模式。
  • -c 执行一条内部命令。
  • bsoft、bhard 分别设置块空间软、硬限制。

截图中的 > 是反斜杠续行造成的 Shell 提示,不是需要输入的字符。


错误复盘总表

现象根本原因以后如何检查
建成两个分区却不是 GPT空盘上直接 n,默认得到 DOS disklabel看 fdisk -l 的 Disklabel type
umount: target is busy当前 Shell 或其他进程仍在使用挂载点fuser -vm,再退出目录
挂载后仍看到底层文件Shell 保留了挂载前当前目录引用cd / 后用绝对路径重新访问
df 显示根逻辑卷目标目录当时没有挂载实验盘先执行 findmnt 目录
p2 被说成“未分区”混淆分区、签名、启用三个层次分别用 lsblk、blkid、swapon
swap 类型没有变化在错误提示位置输入 p看清 Partition type or alias
输入 19 后仍没变化19 输入给了分页器先按 q 回到 fdisk 提示
硬链接跨盘失败inode 不能跨文件系统使用软链接或复制文件
2G 最终显示 1.9G十进制 GB 与二进制 GiB 不同parted ... unit MiB print free
uquota 显示为 usrquota挂载选项被规范化显示看 xfs_quota state 是否 ON

十七、实验后的设备状态

/dev/nvme0n1                 20G 系统盘,全程未修改
├── nvme0n1p1                vfat → /boot/efi
├── nvme0n1p2                xfs   → /boot
└── nvme0n1p3                LVM2_member
    ├── rl-root              xfs   → /
    └── rl-swap              swap  → 系统原有 swap

/dev/nvme0n2                 5G,GPT 实验盘
├── nvme0n2p1                2G XFS,LABEL=LAB_DATA
├── nvme0n2p2                1G swap,LABEL=LAB_SWAP,目前已 swapoff
└── 约 2G 未分配

/dev/nvme0n3                 3G,GPT 实验盘
├── nvme0n3p1                约 1.9G XFS,LABEL=QUOTA_LAB
│                            当前挂载到 /opt/storage_lab/quota_data
│                            用户配额已启用
└── 约 1165MiB 未分配

十八、重启后哪些内容会保留

内容是否保留
GPT 分区表和分区保留
XFS 文件系统保留
文件系统标签、UUID保留
分区中的普通文件保留
mkswap 写入的 swap 签名保留
swapoff 后的 LAB_SWAP 签名仍保留
Alice 的 XFS quota 限制元数据保留在该 XFS 中
手动 mount 建立的挂载关系不保留
手动 swapon 的活动状态不因本实验自动恢复
fstab.practice 文件文件保留,但启动过程不会读取
uquota 的当前挂载状态不保留

由于真实 /etc/fstab 没有被修改,重启后若继续 quota 实验,应重新使用:

mount -o uquota /dev/nvme0n3p1 /opt/storage_lab/quota_data

十九、命令与参数速查

块设备和文件系统

命令作用
lsblk查看块设备树、分区、LVM 和挂载点
lsblk -f查看文件系统类型、标签、UUID
lsblk -o ...自定义输出字段
blkid查看设备签名、标签、UUID、PARTUUID
df -Th查看已挂载文件系统类型和空间
du -sh 路径汇总指定目录实际占用的数据块

分区

命令或参数作用
fdisk 设备交互式管理分区
g在 fdisk 中创建 GPT
n创建分区
t修改分区类型
p在主菜单中打印分区表
w写入并退出
q不保存退出,或退出分页器
parted 设备 mklabel gpt使用 parted 创建 GPT
parted 设备 print查看分区表
parted 设备 unit MiB print free以 MiB 查看分区和空闲空间
partprobe 设备通知内核重新读取分区表

文件系统与挂载

命令或参数作用
mkfs.xfs 分区创建 XFS 文件系统
mkfs.xfs -L 标签 分区创建 XFS 并设置标签
xfs_admin -L 标签 分区修改 XFS 标签
mount 设备 目录临时挂载
mount -o remount,ro 目录重挂载为只读
mount -o remount,rw 目录重挂载为读写
findmnt 路径查看实际挂载源、类型和选项
fuser -vm 路径查找占用挂载文件系统的进程
umount 路径正常卸载

swap

命令作用
mkswap -L 标签 分区写入 swap 签名并设置标签
swapon 分区启用指定 swap
swapon --show列出活动 swap
swapoff 分区关闭指定 swap
free -h查看内存和总 swap

链接和空间

命令作用
ln 源 新名称创建硬链接
ln -s 目标 新名称创建软链接
ls -li查看 inode 和链接计数
readlink 软链接输出软链接中保存的目标路径
fallocate -l 200M 文件预分配 200MiB 文件

XFS 配额

命令或参数作用
mount -o uquota ...挂载时启用 XFS 用户配额
xfs_quota -x -c 'state' 挂载点查看配额状态
limit bsoft=... bhard=... 用户设置用户块空间软、硬限制
report -h -u以易读单位显示用户配额报表

二十、本次练习的核心结论

  1. 系统盘应根据 /、/boot、/boot/efi 等挂载关系判断,不能只看设备编号。
  2. 磁盘、分区、文件系统、挂载点是不同层次。
  3. lsblk -f 查看文件系统属性,不是普通文件属性。
  4. GPT 和 MBR 是分区表格式,不是文件系统。
  5. fdisk 通常到 w 才保存;parted 操作通常立即生效。
  6. mkfs、mkswap 都会覆盖目标设备上的原有签名,必须先确认设备名。
  7. 文件系统标签 LABEL 与 GPT 分区名称 PARTLABEL 不属于同一层次。
  8. 挂载是把文件系统接入目录树,不会把数据复制进挂载目录。
  9. 挂载到非空目录只会遮住原内容,卸载后原内容重新可见。
  10. Shell 当前目录位于挂载点内,可能导致 umount: target is busy。
  11. 文件系统只读时报 Read-only file system,与普通权限不足不同。
  12. df 统计整个文件系统,du 统计指定目录树中的数据块。
  13. swap 分区类型、swap 签名和 swap 激活是三个独立步骤。
  14. swapoff 停止使用 swap,但不会清除签名和标签。
  15. 硬链接共享 inode,不能跨文件系统。
  16. 软链接保存目标路径,可以跨文件系统。
  17. 安全 fstab 练习使用 mount -a -T 读取独立文件,没有实现永久挂载。
  18. parted 中十进制 2G 换算后不是精确 2GiB。
  19. XFS 用户配额要在挂载时使用 uquota/usrquota 启用。
  20. 用户配额按 UID 统计整个文件系统,而不是只统计某个目录。
  21. 软限制允许在宽限期内暂时超过,硬限制是不可正常突破的绝对上限。

标签: none

添加新评论