一、Linux系统中查看磁盘及挂载情况的命令
1.1 df命令
df -h 可以显示磁盘挂载情况,并以可读的方式展示各分区的使用情况、剩余空间等信息。
1.2 mount命令
mount 可以显示已挂载的文件系统及其挂载点。
1.3 cat命令
cat /proc/mounts 可以查看已挂载的文件系统信息,包括文件系统类型、挂载设备、挂载点等。
1.4 lsblk命令
lsblk 可以显示系统的块设备信息,包括磁盘、分区、挂载点等。
1.5 blkid命令
blkid 可以显示块设备的UUID等信息,包括已挂载的和未挂载的设备。
1.6 fdisk命令
fdisk -l 可以列出系统中的磁盘和分区信息。
1.7 parted命令
parted -l 可以显示磁盘的分区信息,同时还可以进行更多的磁盘操作,如创建分区、调整分区大小等。
以上命令中,df和mount是最常用的两个命令,可以较为直观地查看磁盘挂载情况。而cat、lsblk、blkid和fdisk命令则提供了更详细的信息,适合用于特定的需要。可以根据实际需求选择合适的命令来查看磁盘挂载情况。
二、调整 Linux 系统 swap/home/root等分区 大小
2.1 Linux 系统 swap/home/root等分区简介
在安装 Linux 操作系统(CentOS、Ubuntu、Debian 等)时,如果采用分区向导提供的各类标准分区方案对系统盘进行分区,基本上给 home 的分区分配的磁盘空间都很大(占比能达到 80% 左右),其它分区(/ 跟分区、/var 分区、swap分区等)却很小。可在实际生产应用中,home 分区并不需要那么大,大部分数据是放在 / 目录下,因此安装好系统后就需要调整这些分区大小,不然在生产环境当中,容易导致硬盘分区写满溢出,没有写入权限。
Tips: 安装 Linux 系统时建议对系统盘分区采用 “使用整个磁盘并配置LVM” 向导 进行分区,并且 将 /home、/var 和 /tmp 分别放在单独分区。在对磁盘进行分区时,推荐设置分区向导使用部分(40% - 50%)系统盘卷组,这样安装好 Linux 系统后,就可以使用逻辑卷管理(LVM)增加逻辑卷(分区)容量,所以安装时使用一部分系统盘空间 可以提高系统灵活性。
如下图为安装 debian 12.6 时,“使用整个磁盘并配置LVM” 向导 进行分区,并将 /home、/var 和 /tmp 分别放在单独分区,然后 设置分区向导使用 50% 的系统盘卷组(保留50% 的系统盘空间带安装好后做动态分配)。

安装好系统后, 上踹 df -h 命令可以查看各分区的信息。
|
|
2.2 vgdisplay 命令查看LVM的信息
|
|
这里可以看到,系统盘总共有 930.53G(VG Size),已经分配(Alloc PE / Size) 672.2G,未分配(Free PE / Size) 258.33G。
未分配(Free PE / Size)的 258.33G 空闲空间就可以使用 LVM 进行手动分配给各分区或创建新分区。
2.3 减少 home 分区大小
Step 1:设置(减少)/home 分区大小
|
|
正常情况下,只需要三条命令就可以把 home 分区大小 100G 了。
如果是新系统,执行 umount /home 这条命令是没问题,如果是非全新系统,可能就会出现其他程序在占用 home,那么就得先执行 fuser -m /home 释放一下占用。
一般情况下,执行 resize2fs -p /dev/mapper/debian--vg-home 100G 这条命令都会提示 运行e2fsck -f /dev/mapper/debian--vg-home命令,这时按提示先执行提命令(e2fsck命令)再重新执行 resize2fs 命令。
重新 mount /home 后,使用 df -h 命令就可以看到 /home 分区被设置成了 100G 大小了。
Step 2:缩小(减少)home 逻辑卷组大小
第一步 中的命令减少的是 系统 home 分区的大小,并不是 home 分区所在的逻辑卷组(LV)的大小,使用下面的 lvreduce 将缩小 home 分区所在的逻辑卷组(LV)的大小(多余的空间将释放到 Free PE / Size 池中)。
|
|
使用 lvreduce 指令用于减少LVM逻辑卷占用的空间大小。可能会删除逻辑卷上已有的数据,所以在操作前必须进行确认。建议在新系统下进行调整,如果项目在投入使用阶段了,需要做好数据备份。
2.4 对交换分区 swap 空间进行扩大
swap 交换分区就是内存的交换,一般建议设置成硬件内存的2倍。
|
|
2.5 对 / 分区空间进行扩大
|
|
2.6 设置 tmpfs 大小
编辑 /etc/fstab 文件,在其中添加 tmpfs 配置项后
|
|
三、RAID磁盘阵列的原理与搭建
3.1 RAID磁盘阵列的原理简介
磁盘阵列(Redundant Arrays of Independent Disks,RAID) 是由 “多个独立磁盘构成的具有冗余能力的阵列”之意(其中一块盘坏了,数据不丢失)。 磁盘阵列是由很多价格较便宜的磁盘,以硬件(RAID卡)或软件(MDADM)形式组合成一个容量巨大的磁盘组,利用多个磁盘组合在一起,提升整个磁盘系统效能。利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上。 磁盘阵列还能利用同位检查(Parity Check)的观念,在阵列中任意一个硬盘故障时,仍可读出数据,在数据重构时,将数据经计算后重新置入新硬盘中(也就是坏了一块盘,拔掉,插入新盘,数据还能恢复到新盘,利用奇偶校验)
Tips: RAID可以预防数据丢失,但是它并不能完全保证数据不会丢失,所以大家使用RAID的同时还是注意备份重要的数据。
RAID的创建有两种方式:
- 软RAID:通过操作系统软件(mdadm)来实现;
- 硬RAID:使用硬件阵列卡;
RAID几种常见的类型:
| RAID类型 | RAID0 | RAID1 | RAID10 | RAID5 | RAID6 |
|---|---|---|---|---|---|
| 别名 | 条带 | 镜像 | 分布式奇偶校验条带 | 双重奇偶校验条带 | 镜像加条带 |
| 最少磁盘数 | 2 | 2 | 4 | 3 | 4 |
| 最大容错磁盘数 | 无 | n-1 | n/2 | 1 | 2 |
| 数据安全性 | 完全没有 | 最佳 | 最佳 | 好 | 比 RAID5 好 |
| 理论写入性能 | n | 1 | n/2 | <n-1 | <n-2 |
| 理论读出性能 | n | n | n | <n-1 | <n-2 |
| 可用容量 | 100% | 50% | 50% | (n-1)/n | (n-2)/n |
| 一般应用 | 强调性能但数据不重要的环境 | 数据与备份 | 服务器、云系统常用 | 数据与备份 | 数据与备份 |
在企业中用的最多的是:raid1、raid5和raid10。不过随着云的高速发展,阿里云,腾讯云等供应商一般可以把硬件问题解决掉。(你在用云的时候,会关注供应商底层是用什么raid类型吗)
3.2 使用4块SSD盘做 软Raid5
创建 软Raid5
|
|
删除raid5
|
|
3.3 RAID5 掉盘故障处理全流程
- 阶段一:故障排查与定位(找出真凶) 目标:确认阵列状态,找出哪块盘坏了,并获取其物理序列号。
- 检查 RAID 阵列状态
|
|
- 检查底层磁盘健康状况 查看所有硬盘的基本信息,提取序列号以防盘符漂移。
|
|
预期输出:列出 sda、sdb、sdc、sdd 的型号和序列号 (SERIAL)。记下疑似坏盘的序列号。
针对疑似坏盘(假设为 /dev/sdd)提取 SMART 数据:
|
|
结论:若 5 和 187 均大于 0,且伴随 dmesg 中的 I/O error 或 UNC,确认为物理坏道,不可强行修盘,必须更换。
- 阶段二:降级抢救与数据备份(最高优先级) 目标:排除坏盘,用剩余好盘强制拉起 RAID5,修复文件系统并备份数据。
- 停掉占用 I/O 的服务(如 Docker) 避免在拉起阵列和修复文件系统时发生二次崩溃或数据不一致。
|
|
- 强制拉起降级阵列 假设确认好的三块盘是 /dev/sda、/dev/sdb、/dev/sdc(绝对不要包含坏盘)。
|
|
- 检查并修复文件系统 确认文件系统类型,强制修复因掉盘导致的元数据错误。
|
|
如果是 ext4 格式:
|
|
复盘检查:再次运行 sudo e2fsck /dev/md0(不加 -f),若秒出结果并显示 clean,说明修复完成。
- 挂载并备份
|
|
操作:立即使用 rsync -av 或 cp 将数据拷贝至外置存储或 NAS。备份完成前,严禁向 /mnt/recovery 写入新数据。
- 阶段三:物理更换硬盘 目标:将坏盘从系统中剥离,插入新盘。
- 逻辑剔除坏盘 (如果是强制拉起的,坏盘可能不在阵列里,但为了保险起见执行一次)
|
|
- 物理更换
|
|
操作:断电后,根据阶段一记录的序列号(SERIAL),在机箱中拔出坏盘,插入新盘(容量必须 ≥ 原盘)。通电开机。
- 识别与准备新盘
|
|
预期输出:找到新盘(假设系统分配为 /dev/sde)。
对新盘进行分区,设为 Linux RAID 类型(可选,如果是使用一整块盘,可以不分区):
|
|
依次输入:n -> p -> 1 -> 回车 -> 回车 -> t -> fd -> w
|
|
清除新盘上可能残留的旧 RAID 信息(非常重要):
|
|
- 阶段四:加入阵列与数据重建 目标:将新盘加入阵列,触发重建,恢复 RAID5 冗余。
- 加入新盘
|
|
- 监控重建进度 重建过程极耗 I/O(8TB 盘约需 10-24 小时),期间绝对不能重启。
|
|
预期输出:显示 recovery = X.X% 进度。重建完成后显示 [4/4] [UUUU] 且无 recovery 字样。
(可选) 限制重建速度,防止影响其他业务:
|
|
& 阶段五:收尾与固化配置(防止重启阵列再次消失) 目标:修复 Debian 系统配置,确保下次重启阵列自动组装。
- 更新 mdadm 配置文件 Debian 的配置文件位于 /etc/mdadm/mdadm.conf。
|
|
注意:如果原有文件里已有 ARRAY /dev/md0 … 的行,请先手动编辑 /etc/mdadm/mdadm.conf 删掉旧行,避免重复。
- 更新 initramfs(核心步骤) 必须将阵列信息打包进启动镜像,否则重启时系统看不到阵列。
|
|
- 验证与重启 重新挂载你的 RAID 阵列,启动 Docker:
|
|
终极测试:在业务允许的时间窗口内,执行一次 sudo reboot,确认重启后 cat /proc/mdstat 能自动显示 [4/4] [UUUU] 且网络、业务正常。
Tips:
- 不要对故障盘使用 –create:这会直接抹除 RAID 元数据,导致数据永久丢失。
- 修改 /etc/fstab 防止开机卡死:如果你配置了自动挂载,建议加上 nofail 参数(如 defaults,nofail 0 0),这样即使阵列坏了,系统也能正常启动获取 IP,不会掉入紧急模式。
3.4 补充说明
在 Linux 中创建软 RAID,有两种非常主流的做法,关键在于你最初创建 RAID5 时是怎么做的,新加入的盘就必须和原来的保持一致。
回看你之前的截图(/proc/mdstat 显示成员是 sda、sdb、sdc),没有数字后缀。这说明你最初就是用整块裸盘(Whole Disk)直接创建的 RAID,而不是用分区。因此,新盘也必须直接用裸盘加入。
两种做法的区别:
- 整盘直接做 RAID(你当前的情况)
特征:成员名为 /dev/sda、/dev/sdb,没有 1、2 等后缀。
优点:少了一层分区表的抽象,结构最简单,直接拿整盘组建。
操作:新盘直接 mdadm --add /dev/sdd。
- 分区后做 RAID(很多人习惯的做法)
特征:成员名为 /dev/sda1、/dev/sdb1(带有数字后缀)。
优点:如果你以后想在同一块盘上划出不同区域做不同的 RAID,或者留一点空间做其他用途,就可以这么做。
操作:先用 fdisk /dev/sdd 给新盘分一个区(类型设为 fd),然后加入命令必须是 mdadm --add /dev/sdd1。
为什么新盘不能“临时”分区?
如果你原来的三块盘是整盘(sda),你强行把新盘分区(sdd1)加进去,mdadm 会直接报错,因为它认为阵列的底层结构不一致(一个是整盘,一个是分区)。强行混合加入会导致阵列重建失败,直接损坏数据。
所以,针对你的新 8T 盘,正确命令依然是:
|
|
唯一需要注意的例外:
你可以用 lsblk /dev/sdd 或者 fdisk -l /dev/sdd 看一眼新盘。如果这是出厂全新的盘,里面干干净净没分区,那就闭眼直接 mdadm /dev/md0 --add /dev/sdd。
但如果你买的是二手的或者之前用过且带分区表的盘,只要那个分区没被挂载,直接用 mdadm --zero-superblock /dev/sdd 把整盘头部的旧信息抹掉,然后一样可以直接把整盘(/dev/sdd)加进去,完全不用管它里面有没有分区表,mdadm 会接管整块裸盘。