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. 卸载操作

卸载前需确保设备未被使用(可通过fuserlsof查看进程):

# 卸载设备
[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 两种分区方案,以及fdiskgdiskparted等分区工具的使用。

一、硬盘分区的意义
  • 隔离操作系统与用户数据,避免单一分区故障影响全局。
  • 限制应用程序的可用空间,防止资源滥用。
  • 针对不同场景定制文件系统(如小文件用 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_growfsresize2fs)。
四、文件系统格式化与挂载

分区创建后需格式化并挂载才能使用:

# 格式化分区(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
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐