前言
本文详细介绍了Linux系统中磁盘管理与文件系统的相关知识,包括硬盘存储原理、分区管理、文件系统类型、常用命令操作等内容。通过学习,读者将掌握Linux环境下磁盘分区、格式化、挂载等核心技能,并理解不同文件系统的特点及应用场景。
一、硬盘存储基础
1.1 硬盘存储容量计算
硬盘存储容量可通过以下公式计算:
硬盘存储容量 = 磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节数
- 柱面大小示例:
1柱面 = 512字节 × 扇区数/磁头数 × 磁道 = 512 × 63 × 255 ≈ 7.84MB
1.2 磁盘结构
1.2.1 硬盘的物理结构
- 盘片:硬盘有多个盘片,每盘片2面
- 磁头:每面一个磁头
1.2.2 硬盘的数据结构
- 扇区:盘片被分为多个扇形区域,每个扇区存放512字节的数据,硬盘的最小存储单位
- 磁道:同一盘片不同半径的同心圆
- 柱面:不同盘片相同半径构成的圆柱面,由同一半径圆的多个磁道组成
二、Linux磁盘分区表示
2.1 设备文件命名规则
Linux中将硬盘、分区等设备表示为文件,命名格式为/dev/sdXN
或/dev/hdXN
,具体规则如下:
部分 | 说明 |
---|---|
sd | 表示SCSI设备 |
hd | 表示IDE设备 |
X (字母) | 硬盘顺序号,从a 开始(如sda 表示第一块硬盘) |
N (数字) | 分区顺序号,主分区为1-4,逻辑分区从5开始(如sdb5 表示第二块硬盘的第一个逻辑分区) |
2.2 MBR磁盘分区
2.2.1 MBR结构
主启动记录(MBR)位于硬盘第一个物理扇区,共512字节,结构如下:
部分 | 字节范围 | 说明 |
---|---|---|
主引导记录 | 前446字节 | 包含引导程序 |
分区表 | 447-510字节 | 记录分区信息,共4个条目 |
结束标志 | 511-512字节 | 固定为0x55AA |
2.2.2 MBR分区限制
- 支持最大卷为2.2TB。
- 每个磁盘最多支持:
- 4个主分区,或
- 3个主分区 + 1个扩展分区(扩展分区内可划分多个逻辑分区)。
2.3 Linux文件系统类型
2.3.1 常见文件系统类型
文件系统 | 特点 | 适用场景 |
---|---|---|
XFS | 高性能日志文件系统,支持大文件(上百万TB),宕机后可快速恢复数据 | 大文件存储、高吞吐场景 |
SWAP | 交换文件系统,用于虚拟内存,缓解物理内存不足(建议大小为物理内存的1.5-2倍) | 内存扩展 |
EXT4 | 第4代扩展文件系统,默认日志功能,性能稳定(CentOS 7之前默认) | 通用文件存储 |
NTFS | 微软专有文件系统,Linux默认只读,需借助NTFS-3G实现写入 | Windows兼容需求 |
2.3.1.1 补充
- Linux 系统还广泛支持其他各种类型的文件系统,如 JFS、FAT16、FAT32、NTFS 等。JFS 文件系统多用于商业版本的 UNIX 操作系统中,具有出色的性能表现。
- 由于 NTFS 是微软公司的专有文件系统,Linux 系统默认只支持从 NTFS 分区读取文件,如果需要向 NTFS 分区中写入文件数据,需要结合其他辅助软件(如 NTFS-3G)
- 例如,对于拥有
512
MB物理内存的主机,其交换分区的大小建议设置为1024
MB。如果服务器的物理内存足够大(如 8GB 以上),也可以不设置交换分区。交换分区不用于直接存储用户的文件和目录等数据。
三、磁盘分区管理
3.1 查看磁盘信息
3.1.1 fdisk -l命令
显示硬盘整体情况和分区表,输出字段说明:
字段 | 说明 |
---|---|
Device | 分区设备文件名(如/dev/sda1 ) |
Boot | 引导分区标记(* 表示是) |
Start/End | 分区的起始/结束柱面位置 |
Blocks | 分区大小(块为单位,默认1KB) |
Id | 系统ID号(如83为Linux分区,8e表示LVM 逻辑卷) |
System | 分区类型 |
交互模式中的常用指令
fdisk指令说明:
命令 | 功能描述 |
---|---|
a | 切换可引导标记(设置/取消分区启动标志) |
b | 编辑BSD磁盘标签 |
c | 切换DOS兼容性标记 |
d | 删除指定分区 |
l | 列出已知分区类型(如82为Linux swap,83为Linux分区) |
m | 显示帮助菜单 |
n | 创建新分区 |
o | 创建新的空白DOS分区表 |
p | 打印当前分区表信息 |
q | 退出程序且不保存修改 |
s | 创建新的空白Sun磁盘标签 |
t | 改变一个分区的系统号码 |
u | 切换显示/输入单位(如柱面/扇区) |
v | 验证分区表完整性 |
w | 保存修改并退出程序 |
x | 高级功能(仅限专家使用) |
3.1.2 lsblk命令
以树形结构查看磁盘分区,常用参数:
选项 | 描述 |
---|---|
-a | 显示所有设备 |
-b | 以bytes方式显示设备大小 |
-d | 不显示 slaves 或 holders |
-D | 打印 discard capabilities |
-e | 排除设备 |
-f | 显示文件系统信息 |
-h | 显示帮助信息 |
-i | 仅使用 ASCII 字符 |
-m | 显示权限信息 |
-l | 使用列表格式显示 |
-n | 不显示标题 |
-o | 输出列 |
-P | 使用 key=“value” 格式显示 |
-r | 使用原始格式显示 |
-t | 显示拓扑结构信息 |
示例:
[root@simon ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 500M 0 part /boot
├─sda2 8:2 0 4G 0 part [SWAP]
└─sda3 8:3 0 95.5G 0 part /
sr0 11:0 1 4.4G 0 rom /mnt
3.2 创建系统文件(格式化)mkfs
mkfs
命令有两种使用格式:
mkfs -t xfs /dev/sdb1 # 格式化为XFS
mkfs.xfs /dev/sdb1
也可以将磁盘分区格式化为FAT32
类型
mkfs -t vfat -F 32 /dev/sdb6 # 格式化为FAT32
mkfs.vfat -F 32 /dev/sdb6
3.3 创建交换文件系统mkswap
mkswap /dev/sdb5 # 创建交换分区
swapon /dev/sdb5 # 开启
swapoff /dev/sdb5 # 关闭
swapon -s # 检测
3.4 blkid查看磁盘的UUID
blkid //查看磁盘分区的UUID
查看磁盘分区的uuid
之后可以进行永久挂载。
四、文件系统操作
4.1 挂载与卸载
mount
命令可以挂载文件系统、ISO镜像到指定文件夹
mount [ -t 类型 ] 存储设备 挂载点目录
mount -o loop ISO镜像文件 挂载点目录
mount /dev/sdb1 /mnt # 挂载到/mnt
umount
命令卸载已挂载的文件系统
umount 存储设备位置
umount 挂载点目录
umount /mnt # 卸载
4.2 查看磁盘使用情况df
df [选项] [文件]
参数 | 功能描述 |
---|---|
-s | 仅显示每个Names参数占用的数据块总数(不递归子目录) |
-a | 递归显示目录及子目录中所有文件占用的数据块数 |
-k | 以1024字节(1KB)为单位输出磁盘空间使用情况 |
-x | 跳过统计挂载的其他文件系统目录 |
-l | 统计所有文件大小(硬链接文件重复计算) |
-i | 显示inode信息而非块使用量 |
-h | 以易读格式显示(如KB/MB/GB) |
-P | 使用POSIX兼容的输出格式 |
-T | 显示文件系统类型 |
[root@simon ~]# df -hT
4.3 开机自动挂载配置
在/etc/fstab
文件中,每一行记录对应一个分区或设备的挂载配置信息,这些信息从左到右包括六个字段(使用空格或制表符分隔),各部分的含义如下所述。
UUID=7cbacfa5-7877-4b6f-8f5b-a1dd1b598035 / xfs defaults 0 0
各字段含义:
字段 | 说明 |
---|---|
1 | 设备名或UUID(可通过blkid 查看) |
2 | 挂载点目录 |
3 | 文件系统类型(如xfs、swap) |
4 | 挂载参数(如defaults 、ro 、noexec ) |
5 | 是否需dump备份(0忽略,1需要) |
6 | 启动时磁盘检查顺序(0不检查,1根分区优先检查,2其他分区其次检查) |
通过在/etc/fstab
文件中添加相应的挂载配置,可以实现开机后自动挂载指定的分区。
五、案例
给虚拟机添加一块20G的新磁盘,对这块磁盘进行多分区操作,目标:主分区分sdb1(5g)、sdb2(5g)、sdb3(5g),拓展分区sdb4(5g),然后将sdb2更改为swap
分区,实现永久挂载。具体操作如下:
5.1 先给虚拟机分配20g磁盘
5.2 重启或者执行以下指令加载新建的硬盘
不重启加载新建的硬盘
磁盘添加完成,进入系统,使用下面命令扫描SCSI总线
加载磁盘
echo "- - -" > /sys/class/scsi_host/host0/scan
host1
host2
fdisk -l # 列出系统中所有磁盘及其分区的详细信息
5.3 使用fdisk命令开始分区
fdisk /dev/sdb
[root@simon ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x19c2ae1b 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n # 增加一个新的分区
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p # p表示主分区
分区号 (1-4,默认 1):1
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+5G # 设置分区大小5g
分区 1 已设置为 Linux 类型,大小设为 5 GiB
命令(输入 m 获取帮助):n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
分区号 (2-4,默认 2):2
起始 扇区 (10487808-41943039,默认为 10487808):
将使用默认值 10487808
Last 扇区, +扇区 or +size{K,M,G} (10487808-41943039,默认为 41943039):+5G
分区 2 已设置为 Linux 类型,大小设为 5 GiB
命令(输入 m 获取帮助):n
Partition type:
p primary (2 primary, 0 extended, 2 free)
e extended
Select (default p): p
分区号 (3,4,默认 3):
起始 扇区 (20973568-41943039,默认为 20973568):
将使用默认值 20973568
Last 扇区, +扇区 or +size{K,M,G} (20973568-41943039,默认为 41943039):+5G
分区 3 已设置为 Linux 类型,大小设为 5 GiB
命令(输入 m 获取帮助):n
Partition type:
p primary (3 primary, 0 extended, 1 free)
e extended
Select (default e): e # e表示拓展分区
已选择分区 4
起始 扇区 (31459328-41943039,默认为 31459328):
将使用默认值 31459328
Last 扇区, +扇区 or +size{K,M,G} (31459328-41943039,默认为 41943039):+5G
值超出范围。
Last 扇区, +扇区 or +size{K,M,G} (31459328-41943039,默认为 41943039):
将使用默认值 41943039
分区 4 已设置为 Extended 类型,大小设为 5 GiB
命令(输入 m 获取帮助):w
正在同步磁盘。
5.4 文件系统格式化
mkfs.xfs /dev/sdb1
5.5 使用mount
命令进行挂载
[root@simon opt]# mkdir yjs0805
[root@simon opt]# mount /dev/sdb1 /opt/yjs0805/
#新创建的盘以及格式化后进行挂载 这是临时挂载
5.6 查看磁盘使用情况
[root@simon opt]# df -hT
5.7 企业需求永久挂载,防止重启后设别识别不到
[root@simon opt]# blkid
[root@simon opt]# vim /etc/fstab
更改/etc/fstab
可以执行mount -a
验证是否有错误
[root@simon opt]# mount -a
5.8创建swap分区
将上面的/dev/sdb2
更改为swap
分区,swap
分区的ID
为82
[root@simon opt]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):t # 改变一个分区的系统号码
分区号 (1-4,默认 4):2
Hex 代码(输入 L 列出所有代码):82
已将分区“Linux”的类型更改为“Linux swap / Solaris”
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x19c2ae1b
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 10487807 5242880 83 Linux
/dev/sdb2 10487808 20973567 5242880 82 Linux swap / Solaris
/dev/sdb3 20973568 31459327 5242880 83 Linux
/dev/sdb4 31459328 41943039 5241856 5 Extended
使用swapon
命令开启swap
分区,可以使用swapon -s
检测状态。
[root@simon opt]# mkswap /dev/sdb2
正在设置交换空间版本 1,大小 = 5242876 KiB
无标签,UUID=c6573a02-96d1-4b9d-96c7-755aa9959c12
[root@simon opt]# swapon /dev/sdb2
[root@simon opt]# swapon -s
文件名 类型 大小 已用 权限
/dev/sda2 partition 4194300 0 -2
/dev/sdb2 partition 5242876 0 -3
swap 不需要像普通文件系统那样使用 mount 命令挂载。swap 分区的管理是通过专门的命令完成的,例如 swapon 和 swapoff,但可以将其添加到 /etc/fstab 文件以实现开机自动启用
六、GPT分区
6.1 GPT简单介绍
-
分区支持:
- MBR 最多仅支持 4 个主分区,而 GPT 则支持多达 128 个主分区(具体数量可能因操作系统而异)。
-
硬盘容量:
- GPT 突破了 MBR 的 2TB 容量限制,理论上可支持高达 9.4ZB(相当于上亿 TB)的超大容量硬盘。
-
数据冗余与可靠性:
- GPT 采用双备份机制,在硬盘起始和结束位置均存储分区表副本,显著提升数据损坏时的恢复概率。
- MBR 仅存储单一份区表,一旦损坏将面临数据丢失风险。
-
GPT 核心优势:
- 完美支持 2TB 以上大容量硬盘
- 具备更出色的容错和数据恢复能力
- 提供更灵活的分区方案
6.2 GPT和MBR 的区别
特性 | GPT | MBR |
---|---|---|
最大分区数 | 128 个 | 4 个(主分区或 3 个主分区 + 1 个扩展分区) |
支持硬盘容量 | 最大支持 9.4ZB(非常大) | 最大支持 2TB |
分区表存储位置 | 在硬盘的开始和结束都有副本 | 只有一个分区表副本 |
操作系统支持 | 新的操作系统(如 Windows 10、Linux)支持 GPT | 兼容老操作系统,如 Windows XP |
启动模式 | 支持 UEFI 引导 | 只能支持 BIOS 引导 |
6.3 GPT 常见的用途
- 大容量硬盘需求:对于超过 2TB 的硬盘,必须采用 GPT 分区方案。
- 现代系统兼容性:当前主流操作系统(如 Windows 10 和 Linux)默认支持 GPT 分区格式。
- 启动方式要求:UEFI 启动模式必须搭配 GPT 分区,而传统的 MBR 仅兼容 BIOS 启动模式。
综上所述,GPT 作为现代硬盘分区标准,具有分区数量多、存储容量大、可靠性高等优势,特别适合大容量存储设备和新型计算机系统。
6.4 gdisk命令交互模式中的指令
命令 | 功能描述 |
---|---|
b | 将GPT数据备份到一个文件 |
c | 更改分区名称 |
d | 删除一个分区 |
i | 显示分区详细信息 |
l | 列出已知分区类型(如8200为Linux swap,8300为Linux filesystem,8e00为Linux LVM) |
n | 增加一个新的分区 |
o | 创建一个新的空白的GPT分区表 |
p | 显示当前磁盘的分区表 |
q | 退出gdisk程序且不保存任何修改 |
r | 恢复和转换选项(专家模式) |
s | 排序分区 |
t | 改变分区的类型 |
v | 验证磁盘分区表 |
w | 将分区表写入磁盘并退出(保存修改) |
x | 额外功能(专家模式) |
? | 显示帮助信息 |
6.5 案例
给虚拟机添加一块20G的新磁盘,对这块磁盘创建GPT分区。
1、为虚拟机分配20g磁盘
和第五章步骤相同,请移步上文
2、使用gdisk
命令进行分区
gdisk
命令和fdisk
命令很相似,**注意点:**分区类型(默认8300为Linux文件系统)
[root@simon ~]# gdisk /dev/sdb
GPT fdisk (gdisk) version 0.8.10
Partition table scan:
MBR: not present
BSD: not present
APM: not present
GPT: not present
Creating new GPT entries.
Command (? for help): n
Partition number (1-128, default 1):
First sector (34-41943006, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-41943006, default = 41943006) or {+-}size{KMGTP}:
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 8300
Changed type of partition to '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
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.
3、格式化与挂载
mkfs.xfs /dev/sdb1
mount /dev/sdb1 /opt/yjs0805
df -Th
总结
本文系统介绍了Linux磁盘管理与文件系统的核心知识,包括:
- 硬盘存储原理:容量计算与区域定位方法。
- 分区管理:MBR/GPT分区表、工具命令(
fdisk
/gdisk
)。 - 文件系统:常见类型(XFS、EXT4、SWAP)及格式化操作。
- 挂载配置:手动挂载与
/etc/fstab
自动挂载。 - 实用命令:
lsblk
、df
、blkid
等工具的使用。
通过实践这些内容,读者将能够熟练管理Linux系统中的磁盘与文件系统,满足日常运维和开发的存储需求。