Linux 文件系统&硬盘分区&RAID技术详解
1988 年由加州大学伯克利分校提出,最初为 “廉价磁盘冗余阵列”(Redundant Array of Inexpensive Disks),后更名为 “独立磁盘冗余阵列”(Redundant Array of Independent Disks)。核心思想:通过多磁盘组合,平衡性能、可靠性与成本。
Linux 文件系统&硬盘分区&RAID技术详解
Linux 文件系统
文件系统是 Linux 系统中管理数据存储的核心部分,负责组织和管理磁盘上的文件与目录。本文将重点介绍 Linux 文件系统的挂载、卸载操作及相关实践案例。
一、挂载和卸载文件系统
挂载(Mount)是将存储设备(如硬盘、ISO 文件等)关联到 Linux 目录树的过程,只有挂载后,用户才能访问设备中的数据;卸载(Umount)则是解除这种关联,确保数据安全写入设备。
Linux 文件系统
文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构,即在存储设备上组织文件的方法。Linux服务器上的文件是按文件系统层次结构访问的。
1. 环境准备
在进行挂载操作前,需准备存储设备并格式化文件系统。以新增硬盘/dev/sdb
为例:
# 查看新增硬盘信息
[root@server ~]# lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 20G 0 disk
# 格式化文件系统(以XFS为例,常用的还有ext4等)
[root@server ~]# mkfs.xfs /dev/sdb
meta-data=/dev/sdb isize=512 agcount=4, agsize=1310656 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=5242624, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
-
补充说明
:
mkfs.xfs
用于创建 XFS 文件系统,适合大文件存储,性能优异;mkfs.ext4
则适合中小文件,支持更多功能(如日志恢复)。- 若设备已存在文件系统,需用
-f
强制格式化(谨慎操作,数据会丢失):mkfs.xfs -f /dev/sdb
。
2. 挂载操作
挂载设备需指定设备路径和目标目录(挂载点),目录需提前创建:
# 创建挂载点
[root@server ~]# mkdir /mnt/mydisk
# 临时挂载(重启后失效)
[root@server ~]# mount /dev/sdb /mnt/mydisk
# 查看挂载结果
[root@server ~]# df -h /mnt/mydisk
Filesystem Size Used Avail Use% Mounted on
/dev/sdb 20G 33M 20G 1% /mnt/mydisk
-
补充说明
:
- 临时挂载仅在当前会话有效,重启后需重新执行。
- 挂载时可指定文件系统类型(如
-t xfs
),但现代 Linux 通常能自动识别。
3. 持久化挂载
为避免重启后挂载失效,需将挂载信息写入/etc/fstab
文件:
# 查看设备UUID(推荐使用UUID而非设备名,避免设备名变动导致挂载失败)
[root@server ~]# blkid /dev/sdb
/dev/sdb: UUID="a1b2c3d4-1234-5678-90ab-cdef01234567" TYPE="xfs"
# 编辑/etc/fstab,添加如下行
[root@server ~]# vim /etc/fstab
UUID=a1b2c3d4-1234-5678-90ab-cdef01234567 /mnt/mydisk xfs defaults 0 0
-
参数说明
:
defaults
:默认挂载选项(rw, suid, dev, exec, auto, nouser, async)。- 最后两个数字:
0
表示不备份,0
表示不进行磁盘检查。
4. 卸载操作
卸载前需确保设备未被使用(可通过fuser
或lsof
查看进程):
# 卸载设备
[root@server ~]# umount /mnt/mydisk
# 若提示设备忙,可强制卸载(谨慎使用)
[root@server ~]# umount -l /mnt/mydisk # 延迟卸载,适合进程未释放的场景
5. 案例:构建基于 ISO 文件的 yum 仓库
ISO 文件是光盘镜像,可挂载为本地 yum 源,解决无网络环境下的软件安装问题:
# 创建ISO挂载点
[root@server ~]# mkdir /mnt/iso
# 挂载ISO文件(需使用loop选项,将文件视为块设备)
[root@server ~]# mount -o loop /path/to/server.iso /mnt/iso
# 配置yum源(创建repo文件)
[root@server ~]# vim /etc/yum.repos.d/iso.repo
[iso-baseos]
name=server BaseOS from ISO
baseurl=file:///mnt/iso/BaseOS
gpgcheck=0
enabled=1
[iso-appstream]
name=server AppStream from ISO
baseurl=file:///mnt/iso/AppStream
gpgcheck=0
enabled=1
# 生成缓存
[root@server ~]# dnf makecache
rocky 8 AppStream from dvd 192 MB/s | 9.1 MB 00:00
rocky 8 BaseOS from dvd 163 MB/s | 2.7 MB 00:00
Metadata cache created.
# 安装软件包(以httpd为例)
[root@server ~]# dnf install -y httpd
-
补充说明
:
loop
选项用于挂载镜像文件,模拟物理设备。- 若需持久化挂载 ISO,可在
/etc/fstab
添加:/path/to/server.iso /mnt/iso iso9660 loop 0 0
。
Linux 硬盘分区管理
硬盘分区是将物理硬盘划分为多个逻辑区域的过程,便于数据管理和隔离。本文介绍 MBR 与 GPT 两种分区方案,以及fdisk
、gdisk
、parted
等分区工具的使用。
一、硬盘分区的意义
- 隔离操作系统与用户数据,避免单一分区故障影响全局。
- 限制应用程序的可用空间,防止资源滥用。
- 针对不同场景定制文件系统(如小文件用 ext4,大文件用 XFS)。
- 支持交换分区(Swap),缓解内存不足问题。
二、分区方案
1. MBR 分区方案
适用于 BIOS 固件系统,是传统的分区格式:
-
限制:
- 最多支持 4 个主分区,或 3 个主分区 + 1 个扩展分区(扩展分区内可创建多个逻辑分区,最多 15 个)。
- 单分区最大容量 2TiB(因扇区计数用 4 字节,2^32 * 512 字节 = 2TiB)。
-
主引导扇区结构:
- 引导程序(446 字节):负责启动操作系统。
- 分区表(64 字节):包含 4 个主分区信息(每个 16 字节)。
- 结束标志(2 字节):固定为
0xAA55
。
2. GPT 分区方案
适用于 UEFI 固件系统,解决 MBR 的容量和分区数限制:
- 优势:
- 支持单分区最大 8ZiB(80 亿 TiB),满足大容量存储需求。
- 最多 128 个分区,无需扩展分区。
- 分区表冗余存储(头部和尾部各一份),提高可靠性。
- 结构:
- LBA0(保护性 MBR):兼容老系统,标记磁盘为 GPT 格式。
- LBA1(GPT 表头):记录分区表位置、大小及校验码。
- LBA2-33(分区表项):存储 128 个分区的详细信息。
三、分区工具
1. fdisk 工具(MBR 分区)
用于管理 MBR 分区,支持 2TiB 以下磁盘:
# 进入分区工具(指定磁盘)
[root@server ~]# fdisk /dev/sdb
# 常用命令:
# n:新建分区(主分区p/扩展分区e)
# d:删除分区
# t:修改分区类型(如82为Swap)
# p:查看分区表
# w:保存退出
# q:不保存退出
# 示例:创建1个2G主分区
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-41943039, default 2048):
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +2G
Command (m for help): p
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 4196351 4194304 2G 83 Linux
Command (m for help): w
The partition table has been altered!
Syncing disks.
# 通知内核更新分区表(无需重启)
[root@server ~]# partprobe /dev/sdb
- 补充说明:
- 扩展分区本身不能格式化,需在其中创建逻辑分区(编号从 5 开始)。
- 若分区表未生效,可尝试
partprobe
或重启系统。
2. gdisk 工具(GPT 分区)
用于管理 GPT 分区,支持大容量磁盘(>2TiB):
# 进入gdisk工具(转换MBR为GPT)
[root@server ~]# gdisk /dev/sdb
GPT fdisk (gdisk) version 0.8.10
Partition table scan:
MBR: MBR only
BSD: not present
APM: not present
GPT: not present
# 提示将MBR转换为GPT(输入o确认)
Command (? for help): o
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): Y
# 创建新分区(示例:1个5G分区)
Command (? for help): n
Partition number (1-128, default 1): 1
First sector (34-41943006, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-41943006, default 41943006): +5G
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 8300 # Linux文件系统类型
Command (? for help): p # 查看分区表
Number Start (sector) End (sector) Size Code Name
1 2048 10487807 5.0 GiB 8300 Linux filesystem
Command (? for help): w # 保存退出
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!!
Do you want to proceed? (Y/N): Y
-
补充说明
:
gdisk
命令与fdisk
类似,新增了 GPT 特有的功能(如分区命名)。- 分区类型代码:
8300
为 Linux 文件系统,8200
为 Swap。
3. parted 工具(灵活分区)
支持 MBR 和 GPT,可交互或非交互操作,适合脚本自动化:
# 交互模式管理GPT磁盘
[root@server ~]# parted /dev/sdb
(parted) mklabel gpt # 设置分区表为GPT
(parted) mkpart data01 xfs 1MiB 5GiB # 创建1-5GiB的xfs分区
(parted) print # 查看分区
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 20480MiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1.00MiB 5000MiB 4999MiB xfs data01
(parted) quit # 退出
# 非交互模式扩展分区(示例:将分区1扩展到10GiB)
[root@server ~]# parted /dev/sdb unit MiB resizepart 1 10241
Information: You may need to update /etc/fstab.
-
补充说明
:
unit MiB
指定单位为 MiB,避免单位换算错误。- 扩展分区后需重新调整文件系统大小(如
xfs_growfs
或resize2fs
)。
四、文件系统格式化与挂载
分区创建后需格式化并挂载才能使用:
# 格式化分区(XFS为例)
[root@server ~]# mkfs.xfs /dev/sdb1
# 若已有文件系统,强制格式化:mkfs.xfs -f /dev/sdb1
# 临时挂载
[root@server ~]# mkdir /data
[root@server ~]# mount /dev/sdb1 /data
# 持久化挂载(写入/etc/fstab)
[root@server ~]# echo "/dev/sdb1 /data xfs defaults 0 0" >> /etc/fstab
五、综合案例
1. 解决 inode 耗尽问题
现象:磁盘空间未占满,但无法创建文件(提示No space left on device
)。
# 查看inode使用情况
[root@server ~]# df -hi /myapp-2
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sdb2 64K 64K 0 100% /myapp-2
# 原因:大量小文件耗尽inode(ext4默认inode数量固定)
# 解决:删除或合并小文件
[root@server ~]# rm -f /myapp-2/file-* # 删除小文件
# 或合并为大文件:cat /myapp-2/file-* > all_files.txt && rm -f /myapp-2/file-*
Linux RAID 存储技术
RAID(独立磁盘冗余阵列)通过将多个物理磁盘组合为逻辑卷,提升存储性能或可靠性。本文介绍 RAID 级别、实现方式及软 RAID 的管理。
一、RAID 技术概述
1. 历史与定义
- 1988 年由加州大学伯克利分校提出,最初为 “廉价磁盘冗余阵列”(Redundant Array of Inexpensive Disks),后更名为 “独立磁盘冗余阵列”(Redundant Array of Independent Disks)。
- 核心思想:通过多磁盘组合,平衡性能、可靠性与成本。
2. 实现方式
- 软 RAID:由操作系统和 CPU 实现,无专用硬件,成本低但占用 CPU 资源(如 Linux 的
mdadm
工具)。 - 硬 RAID:配备专用 RAID 控制器(含处理芯片和缓存),性能好但成本高。
- 软硬混合 RAID:有 RAID 处理芯片但无 I/O 芯片,性能介于两者之间。
二、常见 RAID 级别
RAID 级别 | 最小磁盘数 | 容错能力 | 空间开销 | 读写性能 | 适用场景 |
---|---|---|---|---|---|
RAID 0 | 2 | 无 | 0% | 最高 | 临时文件、视频编辑(追求速度) |
RAID 1 | 2 | 单盘故障 | 50% | 读高写低 | 系统盘、数据库(追求可靠性) |
RAID 5 | 3 | 单盘故障 | 1/N(N 为盘数) | 中 | 通用存储(平衡性能与成本) |
RAID 6 | 4 | 双盘故障 | 2/N | 中 | 关键数据(高可靠性需求) |
RAID 10 | 4 | 每组最多单盘故障 | 50% | 高 | 数据库、高 IO 场景 |
![]() |
1. RAID 0(条带化)
- 原理:将数据分散到多磁盘,并行读写,无冗余。
- 优缺点:性能最优,但无容错,单盘故障导致数据全丢。
2. RAID 1(镜像)
- 原理:数据同时写入两块磁盘,互为镜像。
- 优缺点:可靠性高(单盘故障不丢数据),但容量仅为单盘(空间开销 50%)。
3. RAID 5(分布式奇偶校验)
-
原理:数据条带化存储,同时计算奇偶校验信息并分布在各磁盘。
-
优缺点
:
- 优点:单盘容错、空间利用率高(N-1 容量)。
- 缺点:写入性能低(需计算校验),重构时性能下降。
4. RAID 6(双重奇偶校验)
- 原理:在 RAID 5 基础上增加第二份奇偶校验,支持双盘容错。
- 优缺点:可靠性更高,但空间开销大(N-2 容量),写入性能更低。
三、软 RAID 管理(mdadm 工具)
以mdadm
为例,介绍常见 RAID 级别(0/1/5)的创建与管理。
环境准备
添加 6 块硬盘:/dev/sdb
、/dev/sdc
、/dev/sdd
、/dev/sde
、/dev/sdf
、/dev/sdg
(容量均为 20G)。
1. RAID 0 管理
# 创建RAID 0(2块盘,设备名/dev/md0)
[root@server ~]# mdadm -C /dev/md0 --level raid0 -n 2 /dev/sd{b,c}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
# 格式化与挂载
[root@server ~]# mkfs.xfs /dev/md0
[root@server ~]# mkdir /data/raid0
[root@server ~]# mount /dev/md0 /data/raid0
# 验证
[root@server ~]# df -h /data/raid0
Filesystem Size Used Avail Use% Mounted on
/dev/md0 40G 319M 40G 1% /data/raid0 # 容量=20G*2
2. RAID 1 管理
# 创建RAID 1(2块盘,设备名/dev/md1)
[root@server ~]# mdadm --create /dev/md1 --level 1 --raid-devices 2 /dev/sd{b,c}
mdadm: array /dev/md1 started.
# 添加热备盘(故障时自动替换)
[root@server ~]# mdadm /dev/md1 --add /dev/sdd
mdadm: added /dev/sdd
# 格式化与挂载
[root@server ~]# mkfs.xfs /dev/md1
[root@server ~]# mkdir /data/raid1
[root@server ~]# mount /dev/md1 /data/raid1
# 验证(容量=单盘20G)
[root@server ~]# df -h /data/raid1
Filesystem Size Used Avail Use% Mounted on
/dev/md1 20G 175M 20G 1% /data/raid1
3. RAID 5 管理
# 创建RAID 5(4块盘,设备名/dev/md5,容量=20G*3)
[root@server ~]# mdadm --create /dev/md5 --level 5 --raid-devices 4 /dev/sd{b..e}
mdadm: array /dev/md5 started.
# 添加热备盘
[root@server ~]# mdadm /dev/md5 --add /dev/sdf
mdadm: added /dev/sdf
# 格式化与挂载
[root@server ~]# mkfs.xfs /dev/md5
[root@server ~]# mkdir /data/raid5
[root@server ~]# mount /dev/md5 /data/raid5
# 验证
[root@server ~]# df -h /data/raid5
Filesystem Size Used Avail Use% Mounted on
/dev/md5 60G 461M 60G 1% /data/raid5
- 故障处理:
# 模拟磁盘故障
[root@server ~]# mdadm /dev/md5 --fail /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md5
# 查看状态(热备盘自动重构)
[root@server ~]# mdadm --detail /dev/md5
...
State : clean, degraded, recovering
Rebuild Status : 50% complete
...
# 移除故障盘
[root@server ~]# mdadm /dev/md5 --remove /dev/sdb
mdadm: hot removed /dev/sdb from /dev/md5
# 替换新盘
[root@server ~]# mdadm /dev/md5 --add /dev/sdb
mdadm: added /dev/sdb
- 扩容 RAID 5:
# 添加新盘(需处于正常状态)
[root@server ~]# mdadm /dev/md5 --add /dev/sdg
mdadm: added /dev/sdg
# 扩容至5块盘
[root@server ~]# mdadm -G /dev/md5 --raid-devices 5
# 扩展文件系统(XFS为例)
[root@server ~]# xfs_growfs /data/raid5
更多推荐
所有评论(0)