【云计算学习之路】学习Centos7系统:Linux磁盘管理
-
- 一、Linux下磁盘简介
-
- [1.1 磁盘物理结构与逻辑抽象](#1.1 磁盘物理结构与逻辑抽象)
- [1.2 磁盘容量计算](#1.2 磁盘容量计算)
- [1.3 磁盘分区类型](#1.3 磁盘分区类型)
- 二、硬盘Inode与Block详解
-
- [2.1 Block(数据块)详解](#2.1 Block(数据块)详解)
- [2.2 Inode(索引节点)详解](#2.2 Inode(索引节点)详解)
- [2.3 Inode与Block的核心关系](#2.3 Inode与Block的核心关系)
- 三、硬链接与软链接介绍
-
- [3.1 硬链接(Hard Link)](#3.1 硬链接(Hard Link))
- [3.2 软链接(Symbolic Link)](#3.2 软链接(Symbolic Link))
- [3.3 硬链接与软链接核心对比](#3.3 硬链接与软链接核心对比)
- 四、Linux下磁盘实战操作命令
-
- [4.1 查看磁盘信息命令](#4.1 查看磁盘信息命令)
-
- [1. lsblk:查看磁盘及分区信息(最常用)](#1. lsblk:查看磁盘及分区信息(最常用))
- [2. fdisk \-l:查看磁盘分区表详细信息](#2. fdisk -l:查看磁盘分区表详细信息)
- [3. df \-h:查看磁盘挂载及空间使用情况](#3. df -h:查看磁盘挂载及空间使用情况)
- [4.2 磁盘分区命令(fdisk/parted)](#4.2 磁盘分区命令(fdisk/parted))
-
- [1. fdisk分区(MBR,适用于≤2TB磁盘)](#1. fdisk分区(MBR,适用于≤2TB磁盘))
- [2. parted分区(GPT,适用于\>2TB磁盘)](#2. parted分区(GPT,适用于>2TB磁盘))
- [4.3 磁盘格式化命令(mkfs)](#4.3 磁盘格式化命令(mkfs))
- 五、Linux下磁盘MOUNT命令详解
-
- [5.1 mount命令基础语法](#5.1 mount命令基础语法)
- [5.2 临时挂载(重启失效)](#5.2 临时挂载(重启失效))
- [5.3 永久挂载(重启生效)](#5.3 永久挂载(重启生效))
-
- [1. /etc/fstab文件格式](#1. /etc/fstab文件格式)
- [2. 永久挂载实操步骤](#2. 永久挂载实操步骤)
- [5.4 常见挂载问题排查](#5.4 常见挂载问题排查)
- 六、Linux下磁盘故障常见修复方法
-
- [6.1 故障1:磁盘空间满(No space left on device)](#6.1 故障1:磁盘空间满(No space left on device))
- [6.2 故障2:分区挂载失败(mount: wrong fs type, bad superblock)](#6.2 故障2:分区挂载失败(mount: wrong fs type, bad superblock))
- [6.3 故障3:磁盘坏道(物理坏道/逻辑坏道)](#6.3 故障3:磁盘坏道(物理坏道/逻辑坏道))
- [6.4 故障4:系统启动时无法进入,提示"mount: can\&\#39;t mount /dev/mapper/centos\-root"](#39;t mount /dev/mapper/centos-root”)
- 七、总结与学习建议
作为云计算学习的基础,Linux系统的磁盘管理是运维工作的核心技能之一。在CentOS7系统中,磁盘管理涉及磁盘识别、分区、格式化、挂载、故障排查等多个环节,而Inode、Block、软硬链接等概念则是理解磁盘存储逻辑的关键。本文将从基础概念入手,结合实操命令,详细讲解CentOS7下的磁盘管理全流程,适合云计算新手入门学习,助力快速上手。
一、Linux下磁盘简介
在Linux系统中,所有硬件设备都被抽象为文件,磁盘也不例外------无论是本地硬盘(机械硬盘HDD、固态硬盘SSD)、U盘,还是虚拟磁盘,都会被识别为一个"块设备文件",存储在/dev目录下,例如/dev/sda、/dev/sdb(SATA接口磁盘)、/dev/vda(KVM虚拟磁盘)。
1.1 磁盘物理结构与逻辑抽象
磁盘的物理结构由盘片、磁头、磁道、扇区、柱面组成,其中扇区是磁盘最小的物理存储单位(默认512字节),而多个扇区会组成一个逻辑块(Block),用于操作系统高效管理数据。从逻辑层面,Linux会将磁盘抽象为一维的扇区数组,通过LBA(逻辑块地址)寻址,屏蔽底层硬件差异,简化存储管理逻辑,无需关注磁头、柱面等硬件细节即可实现数据访问。
1.2 磁盘容量计算
磁盘的实际容量可通过物理参数计算得出,公式如下:
磁盘容量 = 磁头数 × 柱面数(磁道数) × 每磁道扇区数 × 每扇区字节数(默认512字节)
示例:一个磁盘有2个盘片(4个盘面)、1024个柱面、每磁道63个扇区,其容量计算为:4 × 1024 × 63 × 512 = 64MB。需要注意的是,厂商通常按1000进制计算容量(1GB=1000MB),而系统按1024进制计算(1GB=1024MB),因此实际显示的磁盘容量会略小于厂商标注值。
1.3 磁盘分区类型
CentOS7支持两种分区表格式,对应不同的磁盘容量和功能需求:
-
MBR(Master Boot Record):传统分区表,支持最大磁盘容量2TB,最多4个主分区,或3个主分区+1个扩展分区(扩展分区内可分多个逻辑分区),兼容性强,适合小容量磁盘。
-
GPT(GUID Partition Table):新型分区表,支持最大磁盘容量18EB,无主分区数量限制(最多128个分区),支持UEFI启动,适合大容量磁盘和虚拟化场景,是CentOS7推荐的分区表格式。
二、硬盘Inode与Block详解
Inode(索引节点)和Block(数据块)是Linux文件系统的核心组成部分,二者分工明确、协同工作,决定了文件的存储和访问逻辑------Inode负责记录文件的"元数据",Block负责存储文件的"实际内容",理解二者的关系是掌握Linux磁盘管理的关键。
2.1 Block(数据块)详解
Block是Linux文件系统中实际存储文件内容的最小逻辑单位,相当于"文件存储的容器",其大小由文件系统格式化时指定(常见大小为4KB,也可设置为1KB、2KB、8KB),不同大小的Block适用于不同场景:
-
小Block(1KB):适合存储大量小文件(如日志文件),节省磁盘空间,但会增加磁盘IO(需读取多个Block);
-
大Block(8KB):适合存储大文件(如视频、压缩包),减少IO次数,提升读写效率,但会浪费空间(即使文件小于1个Block,也会占用1个Block)。
【实操示例】:查看CentOS7系统中某个分区的Block大小,使用tune2fs \-l /dev/sda1 \| grep \&\#34;Block size\&\#34;命令,输出结果如下(以4KB为例):
bash
[root@localhost ~]# tune2fs -l /dev/sda1 | grep "Block size"
Block size: 4096
2.2 Inode(索引节点)详解
Inode是文件的"身份标识",每个文件(包括目录)都对应一个唯一的Inode,其核心作用是存储文件的元数据,不存储文件名称和实际内容。Inode包含的元数据信息如下:
-
文件的类型(普通文件、目录、链接、设备文件等);
-
文件的权限(r、w、x,分所有者、所属组、其他用户);
-
文件的所有者和所属组(UID、GID);
-
文件的创建时间、修改时间、访问时间(ctime、mtime、atime);
-
文件的大小;
-
指向文件内容的指针(记录存储该文件的Block位置)。
关键特性:Linux系统识别文件时,先通过文件名找到对应的Inode,再通过Inode中的指针找到存储文件内容的Block,最终读取文件------也就是说,文件名只是Inode的"别名",核心识别依据是Inode编号。
【实操示例】:查看文件的Inode编号,使用ls \-i命令,输出结果如下:
bash
[root@localhost ~]# ls -i test.txt
131072 test.txt # 131072即为test.txt的Inode编号

2.3 Inode与Block的核心关系
Inode与Block是"指引与存储"的关系,用户访问文件的完整流程如下:
-
用户输入文件名(如
cat test.txt),系统先查找当前目录的Inode; -
从目录Inode中,根据文件名找到目标文件的Inode编号;
-
通过Inode编号找到目标文件的Inode,读取其中记录的Block指针;
-
根据Block指针,定位到存储文件内容的所有Block,拼接后返回给用户。
补充:磁盘格式化时,会预先划分出Inode区和Block区------Inode区的大小固定,若Inode耗尽(即使磁盘有剩余空间),也无法创建新文件(常见于大量小文件场景)。
三、硬链接与软链接介绍
链接(Link)是Linux系统中实现"文件共享"的重要方式,分为硬链接(Hard Link)和软链接(Symbolic Link,又称符号链接),二者的底层实现基于Inode,核心差异在于是否共享Inode,适用场景也不同。
3.1 硬链接(Hard Link)
硬链接是"文件的别名",本质是为同一个Inode创建多个文件名------多个硬链接共享同一个Inode和Block,修改任意一个硬链接的内容,其他硬链接会同步变化(因为指向的是同一个Block)。
核心特性:
-
硬链接与原文件的Inode编号相同,共享所有元数据和Block;
-
删除原文件后,硬链接依然有效(只要还有一个硬链接存在,文件内容就不会被删除);
-
不支持跨文件系统(因为Inode是文件系统内的唯一标识,不同文件系统的Inode编号可重复);
-
不支持链接目录(避免出现目录循环引用,普通用户无法创建,超级用户也不推荐);
-
创建硬链接会增加Inode的"链接数"(通过
ls \-l命令的第二列查看)。
【实操示例】:创建硬链接
bash
# 1. 创建原文件
[root@localhost ~]# echo "test hard link" > test.txt
# 2. 创建硬链接(命令格式:ln 原文件 硬链接名)
[root@localhost ~]# ln test.txt test_hard.link
# 3. 查看Inode编号和链接数(第二列2表示链接数为2)
[root@localhost ~]# ls -li
total 8
131072 -rw-r--r--. 2 root root 16 May 21 10:30 test.txt
131072 -rw-r--r--. 2 root root 16 May 21 10:30 test_hard.link
# 4. 修改硬链接内容,原文件同步变化
[root@localhost ~]# echo "modify hard link" >> test_hard.link
[root@localhost ~]# cat test.txt
test hard link
modify hard link
3.2 软链接(Symbolic Link)
软链接又称"符号链接",相当于Windows系统的"快捷方式"------软链接是一个独立的文件,有自己的Inode和Block,其Block中存储的不是文件内容,而是原文件的路径(绝对路径或相对路径)。
核心特性:
-
软链接有自己独立的Inode编号,与原文件的Inode无关;
-
依赖原文件:若删除原文件,软链接会失效(变为"悬空链接",ls命令显示为红色);
-
支持跨文件系统(只需指定原文件的正确路径即可);
-
支持链接目录(常用场景:简化目录访问路径,如
ln \-s /usr/local/java /java); -
创建软链接不会改变原文件的链接数。
【实操示例】:创建软链接
bash
# 1. 基于上述原文件,创建软链接(命令格式:ln -s 原文件 软链接名)
[root@localhost ~]# ln -s test.txt test_soft.link
# 2. 查看Inode编号和文件类型(l表示软链接,Inode编号与原文件不同)
[root@localhost ~]# ls -li
total 8
131072 -rw-r--r--. 2 root root 32 May 21 10:35 test.txt
131072 -rw-r--r--. 2 root root 32 May 21 10:35 test_hard.link
131073 lrwxrwxrwx. 1 root root 8 May 21 10:36 test_soft.link -> test.txt
# 3. 删除原文件,软链接失效
[root@localhost ~]# rm -f test.txt
[root@localhost ~]# ls -l test_soft.link
lrwxrwxrwx. 1 root root 8 May 21 10:36 test_soft.link -> test.txt # 红色显示,悬空链接
3.3 硬链接与软链接核心对比
| 对比维度 | 硬链接 | 软链接 |
|---|---|---|
| Inode编号 | 与原文件相同 | 独立的新Inode |
| 跨文件系统 | 不支持 | 支持 |
| 链接目录 | 普通用户不支持 | 支持 |
| 原文件删除后 | 仍可访问(需有其他硬链接) | 失效(悬空链接) |
| 存储内容 | 直接指向数据Block | 存储原文件路径 |
| 链接计数 | 增加原文件的链接数 | 不影响原文件链接数 |
| 创建命令 | ln 原文件 硬链接名 | ln -s 原文件 软链接名 |
四、Linux下磁盘实战操作命令
CentOS7下的磁盘操作主要围绕"查看磁盘信息、分区、格式化"三个核心环节,以下是高频实战命令,每个命令均搭配示例和说明,便于直接上手实操。
4.1 查看磁盘信息命令
1. lsblk:查看磁盘及分区信息(最常用)
作用:列出系统中所有块设备(磁盘、分区、光驱等),显示设备名称、大小、类型、挂载点等信息,直观清晰。
bash
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 49G 0 part
├─centos-root 253:0 0 45G 0 lvm /
└─centos-swap 253:1 0 4G 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk # 未分区、未挂载的磁盘
sr0 11:0 1 4.2G 0 rom # 光驱设备
2. fdisk -l:查看磁盘分区表详细信息
作用:列出磁盘的分区表信息,包括磁盘容量、扇区大小、分区类型、起始扇区、结束扇区等,适合查看分区细节和确认分区表格式(MBR/GPT)。
bash
[root@localhost ~]# fdisk -l
Disk /dev/sda: 53.7 GB, 53687091200 bytes, 104857600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos # MBR分区表(dos对应MBR,gpt对应GPT)
Disk identifier: 0x00099725
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 104857566 51379183+ 8e Linux LVM
3. df -h:查看磁盘挂载及空间使用情况
作用:显示所有已挂载文件系统的磁盘空间使用情况,\-h选项以"人类可读"的格式(KB、MB、GB)显示,便于查看。
bash
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 45G 2.3G 43G 6% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 8.6M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 1014M 130M 885M 13% /boot
tmpfs 378M 0 378M 0% /run/user/0
4.2 磁盘分区命令(fdisk/parted)
磁盘分区需先确定磁盘设备名(如/dev/sdb),再使用分区命令进行操作,其中fdisk适用于MBR分区表,parted适用于GPT分区表(推荐)。
1. fdisk分区(MBR,适用于≤2TB磁盘)
bash
# 1. 进入fdisk交互界面(操作/dev/sdb磁盘)
[root@localhost ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): m # 查看帮助(m=help)
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
# 2. 创建新分区(n=new)
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): # 默认起始扇区
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +10G # 分区大小10G
Using default value 41943039
Partition 1 of type Linux and of size 20 GiB is set
# 3. 查看分区表(p=print)
Command (m for help): p
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x999c4d89
Device Boot Start End Blocks Id System
/dev/sdb1 2048 20973567 10485760 83 Linux
# 4. 保存分区表并退出(w=write)
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
2. parted分区(GPT,适用于>2TB磁盘)
bash
# 1. 进入parted交互界面(操作/dev/sdc磁盘)
[root@localhost ~]# parted /dev/sdc
GNU Parted 3.1
Using /dev/sdc
Welcome to GNU Parted! Type 'help' to view a list of commands.
# 2. 创建GPT分区表(mklabel gpt)
(parted) mklabel gpt
Warning: The existing disk label on /dev/sdc will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? yes # 确认(注意:会清除磁盘所有数据)
# 3. 创建分区(mkpart,格式:mkpart 分区名 文件系统类型 起始位置 结束位置)
(parted) mkpart primary ext4 0GB 100GB # 主分区,ext4格式,0GB开始,100GB结束
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? ignore # 忽略对齐提示(非生产环境可忽略)
# 4. 查看分区表(print)
(parted) print
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdc: 107GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 100GB 100GB ext4 primary
# 5. 退出parted(quit)
(parted) quit
Information: You may need to update /etc/fstab.
4.3 磁盘格式化命令(mkfs)
分区创建完成后,需格式化分区(指定文件系统),才能用于存储数据。CentOS7常用的文件系统有ext4(传统稳定,适用于大部分场景)和xfs(CentOS7默认文件系统,性能更优,适用于大文件场景)。
bash
# 1. 格式化分区为ext4格式(命令格式:mkfs.ext4 分区设备名)
[root@localhost ~]# mkfs.ext4 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 2621440 blocks
131072 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2684354560
80 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
# 2. 格式化分区为xfs格式(命令格式:mkfs.xfs 分区设备名)
[root@localhost ~]# mkfs.xfs /dev/sdc1
meta-data=/dev/sdc1 isize=512 agcount=4, agsize=6249472 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=24997888, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=12206, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
五、Linux下磁盘MOUNT命令详解
格式化后的分区,需要通过mount命令挂载到系统的某个目录(挂载点),才能被系统识别和使用。挂载分为"临时挂载"(重启后失效)和"永久挂载"(重启后仍有效),核心是"将分区与挂载点关联"。
5.1 mount命令基础语法
bash
mount [选项] 分区设备名 挂载点目录
# 常用选项:
# -t:指定文件系统类型(如ext4、xfs,可省略,系统会自动识别)
# -o:指定挂载参数(如rw可读可写、ro只读、noexec禁止执行程序)
# -a:挂载/etc/fstab文件中所有未挂载的分区(用于永久挂载生效)
5.2 临时挂载(重启失效)
临时挂载适合测试场景,操作简单,重启后挂载关系会自动消失。
bash
# 1. 创建挂载点目录(必须先创建,目录不存在会报错)
[root@localhost ~]# mkdir /data
# 2. 挂载/dev/sdb1(ext4格式)到/data目录
[root@localhost ~]# mount /dev/sdb1 /data
# 3. 验证挂载是否成功(df -h查看)
[root@localhost ~]# df -h | grep /data
/dev/sdb1 9.8G 37M 9.2G 1% /data
# 4. 卸载分区(umount命令,格式:umount 挂载点/分区设备名)
[root@localhost ~]# umount /data # 或 umount /dev/sdb1
5.3 永久挂载(重启生效)
永久挂载需要修改/etc/fstab文件(系统启动时会自动读取该文件,挂载指定分区),这是生产环境的标准操作,需注意配置格式正确,否则会导致系统启动失败。
1. /etc/fstab文件格式
bash
# 格式:分区设备名 挂载点 文件系统类型 挂载参数 dump pass
# 示例(已有的挂载配置):
/dev/mapper/centos-root / xfs defaults 0 0
UUID=5e4b3d2a-7f89-4a3b-8c7d-1e2f3a4b5c6d /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
# 字段说明:
# 1. 分区设备名:可写设备路径(/dev/sdb1)或UUID(推荐,避免设备名变化导致挂载失败)
# 2. 挂载点:分区要挂载的目录(如/data)
# 3. 文件系统类型:如ext4、xfs
# 4. 挂载参数:defaults(默认参数,包含rw、suid、dev、exec等)
# 5. dump:0表示不备份,1表示备份(通常设为0)
# 6. pass:0表示不检查,1表示优先检查(根分区设为1,其他分区设为2或0)
2. 永久挂载实操步骤
bash
# 1. 查看分区的UUID(推荐使用UUID挂载,避免设备名变化)
[root@localhost ~]# blkid /dev/sdb1
/dev/sdb1: UUID="a1b2c3d4-5678-90ef-ghij-klmnopqrstuv" TYPE="ext4"
# 2. 编辑/etc/fstab文件,添加挂载配置
[root@localhost ~]# vi /etc/fstab
# 在文件末尾添加以下内容(根据实际UUID和文件系统修改)
UUID=a1b2c3d4-5678-90ef-ghij-klmnopqrstuv /data ext4 defaults 0 0
# 3. 验证配置是否正确(执行mount -a,无报错即正确)
[root@localhost ~]# mount -a
# 4. 验证挂载是否生效(df -h查看)
[root@localhost ~]# df -h | grep /data
/dev/sdb1 9.8G 37M 9.2G 1% /data
【注意】:修改/etc/fstab文件时,务必确保格式正确(字段之间用空格或制表符分隔),若配置错误,系统启动时会进入紧急模式,需修改文件纠正后重启。
5.4 常见挂载问题排查
-
问题1:挂载时提示"mount: /data: can't find in /etc/fstab."------ 挂载点目录不存在,需先创建
mkdir /data; -
问题2:挂载时提示"mount: /dev/sdb1 is already mounted or /data busy"------ 分区已挂载,或挂载点目录被占用(使用
umount卸载后重新挂载,或更换挂载点); -
问题3:系统启动时无法挂载分区------
/etc/fstab配置错误,进入紧急模式后,执行vi /etc/fstab修改错误配置,保存后执行mount \-a,再重启系统。
六、Linux下磁盘故障常见修复方法
CentOS7系统中,磁盘常见故障包括"磁盘满、分区挂载失败、磁盘坏道"等,以下是每种故障的排查思路和修复方法,结合实操命令,帮助快速解决问题。
6.1 故障1:磁盘空间满(No space left on device)
故障现象:
创建文件、写入数据时提示"No space left on device",无法进行写入操作,可能是Block耗尽,也可能是Inode耗尽。
排查与修复步骤:
bash
# 1. 查看磁盘空间使用情况,确定哪个分区满了
[root@localhost ~]# df -h
# 2. 若Block耗尽(Use%=100%),查找大文件并删除无用文件
# 查找当前目录下大于100MB的文件
[root@localhost ~]# find . -type f -size +100M
# 查看目录大小,按大小排序(从大到小)
[root@localhost ~]# du -sh /* | sort -rh
# 删除无用大文件(谨慎操作,避免删除系统文件)
[root@localhost ~]# rm -f /var/log/xxx.log
# 3. 若Block未耗尽,但提示空间满,可能是Inode耗尽,查看Inode使用情况
[root@localhost ~]# df -i
# 若Inode的Use%=100%,查找大量小文件并删除(如日志、临时文件)
[root@localhost ~]# find /tmp -type f -name "*.tmp" -delete
6.2 故障2:分区挂载失败(mount: wrong fs type, bad superblock)
故障现象:
执行mount命令或系统启动时,提示"wrong fs type, bad superblock",原因通常是分区文件系统损坏、超级块(superblock)损坏,或挂载参数错误。
排查与修复步骤:
bash
# 1. 先卸载故障分区(若已挂载)
[root@localhost ~]# umount /dev/sdb1
# 2. 检查分区文件系统,修复损坏(ext4格式用e2fsck,xfs格式用xfs_repair)
# ext4格式修复(-f强制修复,-y自动确认)
[root@localhost ~]# e2fsck -fy /dev/sdb1
# xfs格式修复(需先卸载分区,-f强制修复)
[root@localhost ~]# xfs_repair -f /dev/sdb1
# 3. 修复后重新挂载
[root@localhost ~]# mount /dev/sdb1 /data
# 4. 若超级块损坏,使用备份超级块修复(ext4格式)
# 查看备份超级块位置
[root@localhost ~]# dumpe2fs /dev/sdb1 | grep -i superblock
# 使用备份超级块修复(替换下面的备份超级块位置)
[root@localhost ~]# e2fsck -b 32768 /dev/sdb1
6.3 故障3:磁盘坏道(物理坏道/逻辑坏道)
故障现象:
磁盘读写速度变慢、频繁出现IO错误,或系统日志中出现"read error on sector xxx",可能是磁盘存在坏道(物理坏道无法修复,逻辑坏道可通过工具修复)。
排查与修复步骤:
bash
# 1. 扫描磁盘坏道(使用badblocks命令,-v显示详细过程)
[root@localhost ~]# badblocks -v /dev/sdb # 扫描整个磁盘
# 扫描结果会显示坏道的扇区位置
# 2. 修复逻辑坏道(结合e2fsck命令,标记坏道,避免系统使用)
[root@localhost ~]# e2fsck -c /dev/sdb1 # -c选项会扫描坏道并标记
# 3. 若存在大量物理坏道,建议备份数据后更换磁盘
# 临时规避物理坏道:将坏道区域单独分区,不挂载使用
# 长期解决方案:更换新磁盘,避免数据丢失
【注意】:扫描和修复坏道时,需确保分区未挂载,且提前备份重要数据,避免修复过程中数据丢失。
6.4 故障4:系统启动时无法进入,提示"mount: can't mount /dev/mapper/centos-root"
故障现象:
系统启动时,卡在挂载根分区的步骤,提示无法挂载根分区,原因通常是/etc/fstab配置错误,或根分区文件系统损坏。
排查与修复步骤:
bash
# 1. 系统会进入紧急模式,输入root密码登录
Give root password for maintenance
(or type Control-D to continue): # 输入root密码
# 2. 查看/etc/fstab文件,检查配置是否错误(如UUID错误、文件系统类型错误)
[root@localhost ~]# vi /etc/fstab
# 修正错误配置(如删除错误的挂载项,或修改UUID、文件系统类型)
# 3. 若配置正确,检查根分区文件系统是否损坏,修复根分区
[root@localhost ~]# e2fsck -fy /dev/mapper/centos-root # 若为xfs格式,用xfs_repair -f
# 4. 修复后,执行mount -a验证,再重启系统
[root@localhost ~]# mount -a
[root@localhost ~]# reboot
七、总结与学习建议
本文围绕CentOS7系统的磁盘管理,从基础概念(磁盘简介、Inode、Block、软硬链接)到实操命令(查看、分区、格式化、挂载),再到故障修复,完整覆盖了Linux磁盘管理的核心知识点。对于云计算新手来说,重点掌握以下几点:
-
理解Inode与Block的关系:Inode管"元数据",Block管"内容",这是Linux文件存储的核心逻辑;
-
区分软硬链接的差异:硬链接是"别名",软链接是"快捷方式",根据场景选择使用;
-
熟练掌握实操命令:lsblk、fdisk/parted、mkfs、mount、umount是日常运维的高频命令,多动手练习;
-
重视永久挂载配置:修改
/etc/fstab时务必谨慎,避免配置错误导致系统启动失败; -
故障排查思路:先定位故障原因(如磁盘满、文件系统损坏),再针对性修复,优先备份数据。
磁盘管理是Linux运维和云计算学习的基础,建议结合虚拟机实际操作,反复练习分区、挂载、故障修复等流程,加深对知识点的理解。后续将继续更新云计算相关学习内容,敬请关注!