云计算基础-7:Linux存储管理-2

存储管理是 Linux 系统运维的核心技能之一。无论是日常的文件操作、磁盘分区,还是企业级的 RAID 配置,都离不开对存储机制的深入理解。

很多初学者对存储管理感到困惑,是因为没有建立起 “inode – block – 文件系统” 之间的关联。本文将通过层层拆解的方式,先讲透核心概念,再逐一演示实战操作,帮你构建完整的 Linux 存储知识体系,内容有点难理解很正常,可以先做个了解


对前文的补充解释-Linux 挂载点与磁盘数据的完整关系详解

核心结论

操作/mnt/disk1 目录可见内容数据实际存储位置数据是否丢失占用空间位置
正常挂载 sdb1sdb1 磁盘中的数据sdb1 磁盘sdb1 磁盘
卸载 sdb1 / 拔掉磁盘根文件系统中 /mnt/disk1 目录原本的内容根文件系统磁盘否(sdb1 数据仍在磁盘上)根文件系统磁盘(原目录内容)
重新挂载 sdb1再次显示 sdb1 磁盘中的数据sdb1 磁盘sdb1 磁盘
删除 /mnt/disk1 目录后再插磁盘目录不存在,无法直接访问sdb1 磁盘否(数据仍在磁盘上)无(目录已删除)

一句话:挂载只是 “嫁接”,不是 “复制”;数据永远在磁盘上,挂载只是建立访问路径。

举个简单的例子

我们图书馆比喻,加入挂载的概念:

  • **根文件系统 (/)**:主图书馆大楼,建在第一块磁盘 (sda) 上
  • /mnt/disk1 目录:主图书馆里预先留好的一个空房间,这个房间本身属于主图书馆
  • sdb1 磁盘分区:一个独立的移动图书馆车,里面有自己的书架 (block)、图书卡 (inode) 和管理员 (superblock)
  • 挂载操作 (mount):把移动图书馆车整个推进主图书馆的那个空房间里,并且把房间门和移动图书馆的门合二为一
  • 卸载操作 (umount):把移动图书馆车从房间里推出去,恢复主图书馆那个空房间的原样

往 /mnt/disk1 写数据,影响的是哪里的空间?

当 sdb1 正常挂载在 /mnt/disk1 上时:

  • 你所有对 /mnt/disk1 目录的增删改查操作,全部作用在 sdb1 磁盘上
  • 这些操作不会影响根文件系统 (sda) 的任何空间
  • 就像你把书放进了推进房间的移动图书馆车里,而不是主图书馆的房间里

拔掉 sdb1 或取消挂载后,/mnt/disk1 的数据还在吗?

还在,但不是你之前看到的那些数据。

这是 Linux 挂载最容易让人误解的地方:挂载会 “遮盖” 挂载点目录原本的内容

  • 在你挂载 sdb1 之前,/mnt/disk1 是根文件系统里的一个普通空目录,它本身存在于 sda 磁盘上
  • 当你挂载 sdb1 后,原来的空目录被 “遮盖” 了,你看到的是 sdb1 里的内容
  • 当你卸载 sdb1 或拔掉磁盘后,”遮盖” 效果消失,你看到的又变回了根文件系统里那个原本的空目录

所以:

  • 你之前写入 sdb1 的数据没有丢失,它们仍然完整地保存在 sdb1 磁盘上
  • 你现在在 /mnt/disk1 看到的,是根文件系统中这个目录原本的内容(通常是空的,如果里面挂载之前有文件,你会看到这些文件)
  • 这些内容不占用系统内存,它们占用的是根文件系统 (sda) 的磁盘空间

重新插上磁盘,数据还在吗?

100% 还在。

数据从来没有离开过 sdb1 磁盘。你只需要重新执行挂载命令:

mount /dev/sdb1 /mnt/disk1

挂载成功后,你之前写入的所有数据都会原封不动地出现在 /mnt/disk1 目录中。

这就像你把移动图书馆车推出去又推回来,车里的书一本都不会少。

如果先删除 /mnt/disk1 目录,再插上磁盘,数据还在吗?

数据仍然完整地保存在 sdb1 磁盘上,一点都不会少。

你删除的只是主图书馆里的那个空房间,而不是移动图书馆车里的书。移动图书馆车本身是独立存在的,和主图书馆的房间没有任何关系。

你只需要重新创建那个目录,然后再次挂载即可:

# 重新创建挂载点目录
mkdir -p /mnt/disk1

# 重新挂载sdb1
mount /dev/sdb1 /mnt/disk1

所有数据都会立刻恢复访问。

完整的实验演示(你可以自己动手验证)

# 1. 先查看挂载状态
df -h /mnt/disk1
# 输出:/dev/sdb1  20G  45M  19G  1% /mnt/disk1

# 2. 在挂载的磁盘中创建一个测试文件
echo "这是sdb1磁盘里的数据" > /mnt/disk1/sdb1_data.txt
ls /mnt/disk1
# 输出:sdb1_data.txt

# 3. 卸载sdb1
umount /mnt/disk1

# 4. 再次查看/mnt/disk1目录
ls /mnt/disk1
# 输出:空(因为现在看到的是根文件系统里的空目录)

# 5. 在根文件系统的/mnt/disk1目录中创建一个文件
echo "这是根文件系统里的数据" > /mnt/disk1/root_data.txt
ls /mnt/disk1
# 输出:root_data.txt

# 6. 重新挂载sdb1
mount /dev/sdb1 /mnt/disk1

# 7. 再次查看/mnt/disk1目录
ls /mnt/disk1
# 输出:sdb1_data.txt(root_data.txt被遮盖了,看不到了)

# 8. 再次卸载sdb1
umount /mnt/disk1

# 9. 查看/mnt/disk1目录
ls /mnt/disk1
# 输出:root_data.txt(被遮盖的文件又出现了)

生产环境最常见的挂载大坑

这是 90% 的 Linux 初学者都会踩的坑,也是很多生产事故的根源:

我们要查看挂载点是否真的挂载成功

场景: 你配置了开机自动挂载 sdb1 到 /mnt/disk1,但是某次服务器重启后,sdb1 因为故障没有挂载成功。你不知情,继续往 /mnt/disk1 里写数据。

后果: 这些数据全部写到了根文件系统 (sda) 的磁盘上,占用了根分区的空间。当根分区被写满后,系统会崩溃。

更危险的是: 当你后来发现 sdb1 没有挂载,手动挂载上去后,之前写的数据会突然 “消失”(被遮盖了),你会以为数据丢了。

总结一下

挂载的本质是建立访问路径,不是复制数据。数据永远存储在对应的物理磁盘上。

挂载点目录本身属于根文件系统,挂载会遮盖它原本的内容,卸载后恢复。

卸载或拔掉磁盘不会删除磁盘上的数据,只是暂时无法访问。

删除挂载点目录不会影响磁盘上的数据,重新创建目录并挂载即可恢复。

永远不要在未挂载的挂载点目录中写入数据,这会占用根分区空间,也容易误导自己数据丢失。

文件系统详解

EXT4 文件系统

EXT4 是第四代扩展文件系统(Fourth extended filesystem),是 Linux 系统中最常用的文件系统之一。

XFS 文件系统

XFS 是一种高性能的日志文件系统,由 Silicon Graphics 开发,特别适合处理大文件和高并发 I/O 场景。

文件系统对比

文件系统类型最大容量限制特点
EXT3日志文件系统16TB第三代扩展文件系统,稳定性好
EXT4日志文件系统16TB第四代扩展文件系统,性能更好
XFS日志文件系统100TB高性能,适合大数据场景

如何选择

  • 日常使用:EXT4 是默认选择,稳定可靠
  • 大容量存储、数据库服务器:推荐 XFS,性能更优

核心概念:inode、block、superblock

inode(索引节点)

inode 是文件系统中最重要的概念之一,它记录了文件的元数据(metadata)。

inode 记录的信息:

  • 文件的属性(大小、权限、属主、属组)
  • 连接数(有多少个文件名指向这个 inode)
  • 块数量、块的编号(数据存储在哪些 block 中)
  • 时间戳(创建时间、修改时间、访问时间)

关键特性:

  • 一个文件占用一个 inode
  • inode 大小为 128 bytes(EXT4)
  • inode 决定了文件系统中可以创建的文件数量

block(数据块)

block 是存储文件实际数据的单位。

关键特性:

  • 存储文件的实际内容
  • 大文件会占用多个 block
  • block 大小默认为 4K
  • block 决定了文件系统的存储容量

superblock(超级块)

superblock 是文件系统的”总管理员”,记录了整个文件系统的整体信息。

记录的信息:

  1. block 与 inode 的总量
  2. 未使用与已使用的 inode / block 数量
  3. block 的大小
  4. 文件系统的状态

block group(块组)

EXT4 文件系统将磁盘划分为多个 block group,每个 block group 包含自己的 inode table、block bitmap 和 data blocks。这种设计提高了文件系统的性能和可靠性。

这里还是举个简单例子吧

如果把整个EXT4 文件系统比作一座现代化的大型图书馆:

  • 超级块 (superblock) 是图书馆的总管理处,墙上挂着全馆的总览图,记录着全馆共有多少个书架格子、多少张图书卡、已经用了多少、还剩多少,以及图书馆的开放状态和基本规则。
  • 块组 (block group) 是图书馆的一个个独立楼层。为了提高效率,图书馆没有把所有书架和图书卡都堆在一个地方,而是按楼层划分,每个楼层都有自己的图书卡柜、空卡登记表、空格子登记表和书架。
  • inode (索引节点)每本书专属的目录卡片。每张卡片上只记录这本书的关键信息:书名、作者、页数、借阅权限、存放位置(在哪个楼层的哪个书架的哪些格子里)、被多少人同时借阅过,以及创建、修改和最后被人翻阅的时间。卡片本身不包含书的任何内容
  • block (数据块)书架上一个个标准大小的格子。所有书的内容都存放在这些格子里,薄书可能只占 1 个格子,厚书会连续或分散占用多个格子。
  • inode 位图 (inode bitmap) 是每个楼层的空卡登记表,用打勾 / 打叉的方式快速标记哪些图书卡已经被使用,哪些还是空的。
  • 块位图 (block bitmap) 是每个楼层的空格子登记表,同样用打勾 / 打叉的方式快速标记哪些书架格子已经放了书,哪些还是空的。
  • inode 表 (inode table) 是每个楼层存放所有图书卡的卡片柜

完整的 “取书” 流程(对应文件读取过程)

当你(操作系统)来到图书馆,想要借一本名叫《Linux 内核设计与实现》的书(读取一个文件):

  1. 第一步:查总目录找卡片位置


    你先去图书馆的总目录(目录项 dentry,它记录了文件名和 inode 号的对应关系)查找《Linux 内核设计与实现》这本书,总目录告诉你:这本书对应的图书卡编号是12345,存放在3 楼的卡片柜里。


  2. 第二步:去对应楼层取图书卡


    你来到 3 楼,从3 楼的卡片柜 (inode 表) 中取出编号为 12345 的那张inode 卡片


  3. 第三步:查看卡片上的存放信息

    你仔细阅读这张卡片,上面写着:

    • 这本书共 1200 页(文件大小)
    • 内容存放在 3 楼书架的第 1024、1025、1026、1027 号格子里(数据块编号)
    • 这本书只能被管理员修改(文件权限)
    • 最后一次被人翻阅是昨天(访问时间)
  4. 第四步:按卡片指引去书架取书


    你按照卡片上的指引,依次走到 3 楼书架的 1024、1025、1026、1027 号格子前,把每个格子里的书页都取出来,按顺序拼在一起,就得到了完整的《Linux 内核设计与实现》这本书。



实战:inode 与 block 的关系

问题一:新分区中,文件的数量和什么有关系?

答案:inode 数量决定了文件系统中可以创建的文件数量。

验证实验:

# 1. 观察某个分区中的 inode 节点数
df -i

输出示例:

[root@localhost ~]# df -i
文件系统                  Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/mapper/centos-root 8910848  128338 8782510       2% /
devtmpfs                 120221     405  119816       1% /dev
tmpfs                    124486       1  124485       1% /dev/shm
tmpfs                    124486     914  123572       1% /run
tmpfs                    124486      16  124470       1% /sys/fs/cgroup
/dev/sda1                524288     340  523948       1% /boot
tmpfs                    124486       9  124477       1% /run/user/42
tmpfs                    124486       1  124485       1% /run/user/0
/dev/sdb1                 51200      11   51189       1% /mnt/disk1

#  这里我们着重看sdb1这块磁盘
# 在sdb1上创建一个文件
[root@localhost ~]# touch /mnt/disk1/1.txt
[root@localhost ~]# df -i
文件系统                  Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sdb1                 51200      12   51188       1% /mnt/disk1

你会发现 IUsed(已用I) 增加了 1,说明创建一个文件会消耗一个 inode。

# 4. 创造大量文件,观察 inode 使用情况
[root@localhost ~]# touch /mnt/disk1/file{1..51188}
[root@localhost ~]# df -i
文件系统                  Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sdb1                 51200   51200       0     100% /mnt/disk1

# 请问写满之后,还能否创建新文件呢?
[root@localhost ~]# touch  /mnt/disk1/txt
touch: 无法创建"/mnt/disk1/txt": 设备上没有空间

# 能否向已存在的文件中写入内容呢?答案是?
[root@localhost ~]# echo   666   >   /mnt/disk1/file1
[root@localhost ~]# cat /mnt/disk1/file1
666

结论

  • inode 决定了文件系统中文件的数量
  • 即使还有磁盘空间,如果 inode 用完了,也无法创建新文件
  • inode消耗的是文件数量,并非空间存储大小,可以继续存储内容

问题二:当分区空间大小消耗完毕,还能否新增文件?

答案:不能,block 用完后无法存储新数据。

验证实验:

# 1. 向目标分区写入大量数据,填满磁盘
[root@localhost ~]# dd if=/dev/zero of=/mnt/disk1/file1 bs=1k count=100000000
dd: 写入"/mnt/disk1/file1" 出错: 设备上没有空间
记录了187125+0 的读入
记录了187124+0 的写出
191614976字节(192 MB)已复制,0.457181 秒,419 MB/秒

# 2. 查看目标sdb1分区容量,已满
[root@localhost ~]# df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs        17G  3.6G   14G   21% /
devtmpfs                devtmpfs  470M     0  470M    0% /dev
tmpfs                   tmpfs     487M     0  487M    0% /dev/shm
tmpfs                   tmpfs     487M  8.3M  478M    2% /run
tmpfs                   tmpfs     487M     0  487M    0% /sys/fs/cgroup
/dev/sda1               xfs      1014M  166M  849M   17% /boot
tmpfs                   tmpfs      98M   12K   98M    1% /run/user/42
tmpfs                   tmpfs      98M     0   98M    0% /run/user/0
/dev/sdb1               ext4      190M  186M     0  100% /mnt/disk1


# 3. 尝试创建新文件
[root@localhost ~]# touch  /mnt/disk1/txt
touch: 无法创建"/mnt/disk1/txt": 设备上没有空间

# 4.留出一个inode,创建文件并写入数据
[root@localhost ~]# rm -rf /mnt/disk1/file2
[root@localhost ~]# touch  /mnt/disk1/txt
[root@localhost ~]# echo  1111 > /mnt/disk1/txt 
-bash: echo: 写错误: 设备上没有空间

结论

  • 磁盘空间的限制根据 inode 和 block 两方面
  • inode决定文件数量却不会影响存储,block也决定存储空间却不会影响文件数量
  • 如果存储用完可以创建文件却不能写入数据,而文件数量用完却可以在已有的文件中写入数据。
限制因素决定内容
inode文件数量上限
block存储空间上限

提示:请定期清理磁盘空间,避免 inode 或 block 耗尽导致系统报错。


文件链接

文件链接是 Linux 系统中非常重要的概念,它允许我们为一个文件创建多个”入口”。Linux 支持两种类型的链接:软链接硬链接

符号链接(软连接)

软链接(symbolic link) 类似于 Windows 中的快捷方式,它记录的是源文件的路径。

创建软链接

# 1. 创建一个文件,并输入内容
[root@localhost ~]# echo  123456789 >  /aaa

# 2. 创建一个软连接
root@localhost ~]# ln -s /aaa   aaa
# -s 表示创建软连接

# 3. 观察软连接
[root@localhost ~]# ll  aaa
lrwxrwxrwx. 1 root root 4 5月  18 15:23 aaa -> /aaa
# 注意开头的 'l' 表示这是一个链接文件

查看源文件和软链接

# 4. 观察软连接和源文件
[root@localhost ~]# ll aaa /aaa 
lrwxrwxrwx. 1 root root  4 5月  18 15:23 aaa -> /aaa
-rw-r--r--. 1 root root 10 5月  18 15:23 /aaa

# 5. 查看两个文件,内容一致
[root@localhost ~]# cat aaa
123456789
[root@localhost ~]# cat /aaa 
123456789

删除源文件

# 6. 删除源文件,软连接失效
[root@localhost ~]# rm -rf /aaa 
[root@localhost ~]# ll aaa 
lrwxrwxrwx. 1 root root 4 5月  18 15:23 aaa -> /aaa
[root@localhost ~]# cat aaa
cat: aaa: 没有那个文件或目录
# 软连接仍然存在,但指向的路径已经不存在,变成"死链接"

软链接的特点

特性说明
类似快捷方式软链接就像 Windows 的快捷方式
可跨分区可以对任何文件和目录做软连接,不受分区限制
记录路径软链接记录的只是源文件的路径
源文件删除后失效失去源文件后,软连接不可用
独立 inode软链接有自己独立的 inode

硬链接

硬链接 是指多个文件名指向同一个 inode。它与软链接有本质的区别。

创建硬链接

# 1. 创建一个文件
[root@localhost ~]# echo "222" > /file2

# 2. 在同分区创建硬链接(成功)
[root@localhost ~]# ln /file2 /file2-h1

# 3. 尝试跨分区在sdb1上创建硬链接(失败)
[root@localhost ~]# ln /file2 /mnt/disk1/file2-h2
ln: 无法创建硬链接"/mnt/disk1/file2-h2" => "/file2": 无效的跨设备连接

注意:硬链接只能在同一个分区内创建,不能跨分区。

删除源文件

# 4. 删除源文件,硬链接依然可用
[root@localhost ~]# rm -rf /file2
[root@localhost ~]# cat /file2-h1
222
# 硬链接不受源文件删除的影响

目录不允许创建硬链接

[root@localhost ~]# ln /home/ /mnt
ln: "/home/": 不允许将硬链接指向目录

硬链接的特点

特性说明
只能针对文件不能对目录创建硬链接
只能同分区硬链接只能在同一个文件系统内创建
共享 inode硬链接和源文件共享同一个 inode
源文件删除不影响删除源文件后,硬链接依然可用

软链接 vs 硬链接

对比项软链接硬链接
本质记录源文件路径与源文件共享 inode
跨分区✅ 可以❌ 不可以
目录链接✅ 可以❌ 不可以
源文件删除❌ 失效✅ 依然可用
inode独立 inode共享 inode
文件大小存储路径的长度与源文件相同
类似概念Windows 快捷方式文件的”别名”

RAID 磁盘阵列

RAID 简介

RAID 全称是 廉价磁盘冗余阵列(Redundant Array of Independent Disks)

作用:

  • 容错:某块硬盘损坏时,数据不会丢失
  • 提升读写速率:多块硬盘同时工作,提高 I/O 性能

常见 RAID 类型

RAID 0(条带集)

特性说明
磁盘数量2 块及以上
读写性能100% × N(最快)
容错能力❌ 不容错
空间利用率100%

特点:数据分散存储在多块磁盘上,读写速度最快,但任何一块磁盘损坏都会导致数据丢失。

怎么运作

数据拆开平均分到每块盘,同时读写。

  • 文件 1 前一半放 A 盘,后一半放 B 盘
  • 文件 2 前一半放 B 盘,后一半放 A 盘
  • 两块盘同时干活,速度翻倍

举例:

你有 2 个抽屉,把一本书撕成两半,左边放抽屉 1,右边放抽屉 2。

拿书时两个抽屉同时拿,速度更快。

故障会怎样

只要坏 1 块盘,全部数据直接没了

抽屉 1 坏了,左边书页全丢,整本书报废。

能不能换盘救数据

不能。坏一块全盘报废,换新盘也救不回来,数据直接丢失。

RAID 1(镜像集)

特性说明
磁盘数量2 块
读写性能一般
容错能力✅ 容错
空间利用率50%

特点:数据完整复制到两块磁盘上,一块损坏不影响数据读取,但存储空间只有一半可用。

怎么运作

每块盘存一模一样完整数据,互相备份

  • A 盘存:文件 1、文件 2、文件 3
  • B 盘也完整存:文件 1、文件 2、文件 3

举例:

2 个抽屉,两本一模一样的书,抽屉 1 一本,抽屉 2 一本。

不管拿哪个抽屉,都能拿到完整的书。

故障会怎样

坏任意 1 块盘,数据完全没事

抽屉 1 坏了,抽屉 2 还有完整的书,正常使用。

能不能换盘救数据

可以,数据不丢

  1. 拔掉坏盘
  2. 插上新硬盘
  3. 系统自动把好盘的数据完整复制到新盘
  4. 阵列恢复正常,全程数据不丢

缺点:2 块盘只能用 1 块盘的容量,100G+100G 只能用 100G。

RAID 5(带奇偶校验条带集)

特性说明
磁盘数量3 块及以上
读写性能
容错能力✅ 容错(允许 1 块磁盘损坏)
空间利用率(n-1)/n

特点:数据和校验信息分散存储在所有磁盘上,兼顾性能和容错,是最常用的 RAID 级别。

怎么运作

数据 + 校验信息分开存在所有盘,不单独放一块盘

最少需要 3 块盘

  • A 盘:文件 1
  • B 盘:文件 2
  • C 盘:文件 1 + 文件 2 的校验码(用来恢复数据)

下一轮轮换:

  • A 盘:校验码
  • B 盘:文件 3
  • C 盘:文件 4

举例:

3 个抽屉,2 本不同的书 + 1 张 “复原笔记”

笔记可以根据两本书算出任意一本丢了的内容。

也可以理解为1+2=3(每个数字代表一个磁盘代号),有一天2坏了变成了1+?=3,插上新磁盘后阵列会自动算出2这个数字。

故障会怎样

最多允许坏 1 块盘,坏 2 块直接报废。

坏任意一块,靠另外两块盘的数据 + 校验码,算出丢失内容,正常读写。

能不能换盘救数据

可以,数据不丢

  1. 拔掉坏盘
  2. 插入新硬盘
  3. RAID 自动用剩下两块盘,算出丢失数据,同步到新盘
  4. 阵列修复完成,继续正常使用

特点:3 块盘用 2 块容量,100+100+100 = 可用 200G,企业最常用。

硬 RAID vs 软 RAID

对比项硬 RAID软 RAID
实现方式需要 RAID 卡通过操作系统实现
处理速度有独立 CPU,速度快依赖系统 CPU
成本较高较低
适用场景企业级服务器个人电脑、测试环境

软 RAID 实战示例

准备磁盘

# 查看系统中的磁盘
[root@localhost ~]# ll   /dev/sd*
brw-rw----. 1 root disk 8, 32 5月  19 11:37 /dev/sdc
brw-rw----. 1 root disk 8, 48 5月  19 11:37 /dev/sdd
brw-rw----. 1 root disk 8, 64 5月  19 11:37 /dev/sde
brw-rw----. 1 root disk 8, 80 5月  19 11:37 /dev/sdf

我们准备了 4 块磁盘:/dev/sdc/dev/sdd/dev/sde/dev/sdf

使用RAID 管理工具创建 RAID 5

# RAID5: (3块数据盘) + (1块热备硬盘)
[root@localhost ~]# mdadm -C /dev/md0 -l5 -n3 -x1 /dev/sd{c,d,e,f}

参数说明:

参数说明
-C创建 RAID
/dev/md0第一个 RAID 设备
-l5RAID 5
-n3RAID 成员的数量(3 块)
-x1热备磁盘的数量(1 块)

格式化并挂载

# 格式化
[root@localhost ~]# mkfs.ext4 /dev/md0

# 创建挂载点
[root@localhost ~]# mkdir /mnt/raid5

# 挂载
[root@localhost ~]# mount /dev/md0 /mnt/raid5

# 测试写入数据
[root@localhost ~]# cp -rf /etc /mnt/raid5/etc1

查看 RAID 信息

[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:                        # 软RAID设备名称
           Version : 1.2         # RAID元数据版本
     Creation Time : Wed May 20 10:33:57 2026  # 创建时间
        Raid Level : raid5       # RAID级别:RAID5
        Array Size : 41908224 (39.97 GiB 42.91 GB)  # 阵列总可用容量
     Used Dev Size : 20954112 (19.98 GiB 21.46 GB)  # 每块盘实际使用容量
      Raid Devices : 3           # 正常工作的RAID成员盘数量(RAID5需要3块)
     Total Devices : 4           # 阵列中总磁盘数(3个工作 + 1个热备)
       Persistence : Superblock is persistent  # 超级块持久化,重启不丢配置

       Update Time : Wed May 20 10:35:29 2026  # 最后更新时间
             State : active      # 阵列状态:正常活跃
    Active Devices : 3           # 活跃工作的磁盘数
   Working Devices : 4           # 正常运行的磁盘总数
    Failed Devices : 0           # 损坏磁盘数:0,无坏盘
     Spare Devices : 1           # 热备盘数量:1块

            Layout : left-symmetric  # RAID5数据布局方式(默认)
        Chunk Size : 512K        # 数据块大小(条带大小)

Consistency Policy : resync      # 一致性策略:同步

              Name : localhost.localdomain:0  (local to host localhost.localdomain)  # 阵列名称
              UUID : 6ef1a84e:c593e6b3:01ca15fa:fe5b7711  # 阵列唯一ID
            Events : 19          # 阵列事件计数(操作次数)

    Number   Major   Minor   RaidDevice State
       0       8       32        0      active sync   /dev/sdc  # 活跃成员盘
       1       8       48        1      active sync   /dev/sdd  # 活跃成员盘
       4       8       64        2      active sync   /dev/sde  # 活跃成员盘

       3       8       80        -      spare   /dev/sdf        # 热备盘(空闲待命)

模拟硬盘损坏

# 终端一:持续查看 RAID 状态
[root@localhost ~]# watch -n 0.5 'mdadm -D /dev/md0 | tail'

# 终端二:模拟一块硬盘损坏并移除
[root@localhost ~]# mdadm /dev/md0 -f /dev/sde -r /dev/sde
# -f: 标记为失败 (fail)
# -r: 移除 (remove)

观察结果:热备磁盘 /dev/sdf 会自动顶替损坏的磁盘,RAID 5 继续正常工作。


总结

通过本文的学习,你应该掌握了:

  • 理解 EXT4 和 XFS 文件系统的特点和适用场景
  • 掌握 inode、block、superblock 的核心概念
  • 理解 inode 决定文件数量,block 决定存储容量的原理
  • 掌握软链接和硬链接的区别和使用场景
  • 了解 RAID 0、RAID 1、RAID 5 的特点和适用场景
  • 能够使用 mdadm 创建和管理软 RAID

学习建议:存储管理是 Linux 运维的核心技能之一,建议在自己的虚拟机上多练习这些命令,通过实际操作来加深理解。特别是 inode 和 block 的关系、软链接和硬链接的区别,建议动手实验来加深印象。


🙋 学习路上不孤单,有坑一起填!



卡在参数调试、命令打架、功能没反应、资源失效?其他问题?直接戳我,也可以进群和同好交流!



📱 个人QQ:3838586495    👥 交流Q群:1094091455    📮 邮箱:leyan2504@163.com



内容帮你省了大把踩坑时间?可以文末小小打赏鼓励一波,也欢迎安利给身边学习的朋友~



✨ 欢迎来评论区「交作业」:分享你的配置思路、提出疑难问题;评论区正确填写邮箱,不错过任何人的解答回复!


暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇