Linux命令-分区管理
磁盘管理是Linux系统管理的重要组成部分,涉及对存储设备的监控、分区、格式化、挂载和维护等操作。有效的磁盘管理可以确保系统存储资源的合理利用,预防磁盘空间不足等问题,保障数据的安全性和完整性。
本章介绍的命令工具能够帮助管理员监控磁盘空间使用情况、分析目录占用、管理磁盘分区、检查和修复文件系统等。通过掌握这些命令,您将能够高效地进行磁盘资源管理,确保系统的稳定运行。
df - 显示磁盘空间
df(disk free)命令用于显示文件系统的磁盘空间使用情况,包括总容量、已用空间、可用空间和挂载点等信息。该命令是Linux系统管理员监控磁盘使用情况的基础工具。
语法格式
df [选项] [文件或目录]选项
| 选项 | 描述 | 示例 |
|---|---|---|
-a | 显示所有文件系统,包括虚拟文件系统 | df -a |
-h | 以人类可读格式显示(自动转换单位) | df -h |
-H | 类似-h但以1000为换算单位(非1024) | df -H |
-i | 显示inode信息而非块使用情况 | df -i |
-k | 以KB为单位显示(默认) | df -k |
-l | 只显示本地文件系统 | df -l |
-T | 显示文件系统类型 | df -T |
-t <类型> | 只显示指定类型的文件系统 | df -t ext4 |
-x <类型> | 排除指定类型的文件系统 | df -x tmpfs |
经典案例
df # 查看所有文件系统使用情况(基本用法)
df -h # 以易读格式显示(自动转换GB/MB)
df -T # 显示文件系统类型
df -h /home # 查看指定目录所在分区的空间
df -t ext4 # 只显示ext4文件系统的使用情况
df -i # 查看inode使用情况
df -x tmpfs # 排除tmpfs文件系统注意事项
- 100%使用率的文件系统可能导致系统问题
- 某些特殊文件系统(如proc、sysfs)显示为0是正常现象
- NFS等网络文件系统可能因网络问题显示不准确
- 使用
-h选项时,1K=1024字节
输出字段解释
Filesystem: 设备或分区名称Size: 总容量Used: 已用空间Avail: 可用空间Use%: 使用百分比Mounted on: 挂载点
常见问题排查
- 空间不足但df显示有空间:可能是inode耗尽,使用
df -i检查 - 删除文件后空间未释放:可能有进程仍在使用,需重启服务或使用
lsof查找
du - 统计目录磁盘用量
- 递归统计目录及其子目录的磁盘用量
- 支持文件/目录粒度的空间分析
- 提供原始块计数与人类可读格式
语法格式
du [选项] [文件/目录...]选项
| 选项 | 描述 | 示例 |
|---|---|---|
-a | 显示所有文件的统计(默认只显示目录) | du -a |
-h | 以人类可读格式显示(KB/MB/GB) | du -h |
-s | 只显示总用量(不显示子目录详情) | du -sh |
-c | 显示总计(配合-s使用) | du -sch * |
--max-depth=N | 设置统计深度 | du -h --max-depth=1 |
--exclude=PATTERN | 排除匹配模式的文件 | du --exclude='*.log' |
-b | 以字节为单位显示 | du -b |
-k | 以KB为单位显示 | du -k |
-m | 以MB为单位显示 | du -m |
--time | 显示最后修改时间 | du --time |
--apparent-size | 显示表面大小而非实际占用 | du --apparent-size |
经典案例
# 以人类可读的格式显示 /var 目录的总大小
du -sh /var
# 显示 /home 目录下每个子目录的大小(仅一层深度)
du -h --max-depth=1 /home
# 计算 /var/log 目录的总大小,并显示总和
du -ch /var/log
# 排除所有 .log 文件后计算 /var 目录的大小
du -h --exclude="*.log" /var注意事项
- 权限要求:
du需要读取权限才能计算文件或目录的大小。如果权限不足,可能会跳过某些文件或目录。 - 符号链接:默认情况下,
du会统计符号链接指向的文件或目录的大小。可以使用-L选项强制跟踪符号链接。 - 隐藏文件:
du会统计隐藏文件(以.开头的文件)的磁盘使用情况。 - 系统性能:递归计算大型目录可能会消耗较多系统资源,建议在非高峰期使用。
mount - 挂载文件系统
mount命令用于将存储设备或网络共享挂载到Linux文件系统的指定目录。这是访问磁盘分区、ISO镜像、网络存储等资源的关键操作。
语法格式
mount [-选项] 设备 挂载点
mount [-选项] -t 类型 设备 挂载点
mount -a [-选项]选项
| 选项 | 描述 | 示例 |
|---|---|---|
-t <类型> | 指定文件系统类型 | mount -t ext4 |
-o <选项> | 挂载选项(可多个,逗号分隔) | mount -o ro,noexec |
-a | 挂载/etc/fstab中的所有文件系统 | mount -a |
-n | 不写入/etc/mtab文件 | mount -n |
-r | 只读挂载(等同于-o ro) | mount -r |
-w | 读写挂载(默认) | mount -w |
-v | 显示详细输出 | mount -v |
-l | 显示已挂载的卷标 | mount -l |
-f | 模拟挂载(不实际执行) | mount -f |
-U <UUID> | 通过UUID挂载 | mount -U 123e4567... |
-L <卷标> | 通过卷标挂载 | mount -L MYDISK |
常用挂载选项(-o参数)
| 选项 | 描述 |
|---|---|
ro/rw | 只读/读写 |
noexec | 禁止执行程序 |
nosuid | 忽略SUID/SGID位 |
nodev | 不解释设备文件 |
remount | 重新挂载已挂载的文件系统 |
defaults | 使用默认选项(rw,suid,dev,exec,auto,nouser,async) |
经典案例
mount /dev/sdb1 /mnt/data # 挂载普通磁盘分区
mount -o loop ubuntu.iso /mnt/iso # 挂载ISO镜像文件
mount -t nfs 192.168.1.100:/shared /mnt/nfs # 挂载NFS网络共享
mount -o ro /dev/sdc1 /backup # 以只读方式挂载
mount -o remount,rw / # 重新挂载已挂载的文件系统
mount -l # 查看所有挂载点注意事项
- 只有 root 用户或具有 sudo 权限的用户可以执行 mount 命令
- 挂载前确保挂载点目录已存在
- 使用 umount 命令卸载文件系统
- 长期挂载建议写入 /etc/fstab 配置文件
- 危险操作:不要随意挂载未知来源的设备
常见文件系统类型
- ext4/ext3/ext2: Linux 原生文件系统
- ntfs/vfat: Windows 文件系统
- xfs: 高性能文件系统
- nfs/cifs: 网络文件系统
- iso9660: CD/DVD 镜像
umount - 卸载挂载文件系统
umount(unmount)命令用于卸载已挂载的文件系统,是 mount 命令的逆操作。正确卸载文件系统可以确保数据完整性和系统稳定性。
语法格式
umount [选项] <挂载点|设备>选项
| 选项 | 描述 | 示例 |
|---|---|---|
-v | 显示详细执行过程 | umount -v /mnt/usb |
-n | 不更新/etc/mtab文件 | umount -n /dev/sdb1 |
-r | 若卸载失败,尝试以只读方式重新挂载 | umount -r /mnt/cdrom |
-d | 同时卸载关联的loop设备 | umount -d /mnt/iso |
-f | 强制卸载(可能损坏数据) | umount -f /mnt/nfs |
-l | 延迟卸载(lazy unmount) | umount -l /mnt/tmp |
-t <类型> | 只卸载指定类型的文件系统 | umount -t nfs -a |
-a | 卸载/etc/mtab中的所有文件系统 | umount -a |
经典案例
umount /mnt/usb # 通过挂载点卸载
umount /dev/sdb1 # 通过设备路径卸载
umount -a -t nfs # 卸载所有NFS文件系统
umount -f /mnt/cdrom # 强制卸载(当设备忙时)
umount -l /mnt/network # 延迟卸载(允许进程完成操作)
umount -v /mnt/backup # 卸载并显示详细信息注意事项
- 卸载前确保没有进程正在使用挂载点(使用
lsof /挂载点或fuser -vm /挂载点检查) - 重要数据应先同步:
sync命令可确保数据写入磁盘 - GUI环境下可能需要先关闭文件管理器窗口
- USB设备卸载后指示灯可能还会亮,等待几秒再拔出
- 强制卸载(-f)可能导致数据丢失,应作为最后手段
常见错误处理
设备忙无法卸载
bash# 查找占用进程 fuser -vm /mnt/usb # 或 lsof /mnt/usb # 终止占用进程(谨慎操作) fuser -km /mnt/usb卸载网络共享(NFS/CIFS)超时
bashumount -l /mnt/nfs # 延迟卸载卸载后仍显示在挂载列表
bash# 可能是 /etc/mtab 不同步 umount -n /mnt/temp
fdisk - 磁盘分区
fdisk 是 Linux 下经典的磁盘分区工具,用于创建、删除、调整和管理磁盘分区表(支持 MBR 格式)。需 root 权限运行。
语法格式
fdisk [选项] <设备>
fdisk -l [设备]选项
| 选项 | 描述 | 示例 |
|---|---|---|
-l | 列出分区表信息 | fdisk -l |
-s <分区> | 显示分区大小(块数) | fdisk -s /dev/sda1 |
-u | 显示/输入时使用扇区而非柱面 | fdisk -u /dev/sdb |
-b <大小> | 设置扇区大小(512/1024/2048/4096) | fdisk -b 4096 /dev/sdc |
-c | 关闭DOS兼容模式 | fdisk -c /dev/sdd |
-C <柱面> | 指定柱面数 | fdisk -C 1024 /dev/sde |
-H <磁头> | 指定磁头数 | fdisk -H 255 /dev/sdf |
-S <扇区> | 指定每磁道扇区数 | fdisk -S 63 /dev/sdg |
交互命令(进入fdisk后使用)
| 命令 | 描述 |
|---|---|
m | 显示帮助菜单 |
p | 打印分区表 |
n | 新建分区 |
d | 删除分区 |
t | 更改分区类型 |
w | 写入并退出 |
q | 不保存退出 |
l | 列出已知分区类型 |
v | 验证分区表 |
g | 创建新的GPT分区表 |
o | 创建新的DOS分区表 |
经典案例
# 查看所有磁盘分区信息
fdisk -l
# 查看指定磁盘信息
fdisk -l /dev/sda
# 交互式分区操作
fdisk /dev/sdb
# 在交互界面中按序操作:
# n → p → 1 → 回车 → +10G → w
# 创建交换分区
fdisk /dev/sdc
# n → p → 回车 → 回车 → t → 82 → w
# 将分区类型改为Linux LVM
fdisk /dev/sdd
# t → 31 → w
# 创建GPT分区表
fdisk /dev/nvme0n1
# g → n → 回车 → 回车 → +20G → wmkfs - 创建Linux文件系统
mkfs(Make Filesystem)是 Linux 下用于创建文件系统的命令行工具,实际是不同文件系统格式化工具的前端命令(如 mkfs.ext4、mkfs.xfs 等)。
语法格式
mkfs [选项] [-t 文件系统类型] [文件系统选项] 设备 [大小]选项
| 选项 | 描述 | 示例 |
|---|---|---|
-t fstype | 指定要创建的文件系统类型 | mkfs -t ext4 /dev/sdb1 |
-V | 详细模式,显示执行的命令 | mkfs -V -t xfs /dev/sdc1 |
-c | 在创建文件系统前检查坏块 | mkfs -c /dev/sdd1 |
-l filename | 从文件读取坏块列表 | mkfs -l badblocks.txt /dev/sde1 |
-v | 显示版本信息 | mkfs -v |
-h | 显示帮助信息 | mkfs -h |
文件系统专用工具
mkfs.ext4 /dev/sdb1 # 创建ext4文件系统
mkfs.xfs /dev/sdb2 # 创建XFS文件系统
mkfs.ntfs /dev/sdc1 # 创建NTFS文件系统经典案例
# 在/dev/sdb1上创建ext4文件系统
mkfs -t ext4 /dev/sdb1
# 创建XFS文件系统并检查坏块
mkfs -t xfs -c /dev/sdc1
# 创建带卷标的分区
mkfs -t ext4 -L "DATA_DISK" /dev/sdd1
# 创建FAT32文件系统(需安装dosfstools)
mkfs -t vfat -F 32 /dev/sde1注意事项
- 执行mkfs会永久擦除设备上的所有数据
- 需要root权限或sudo执行
- 不同文件系统类型需要对应的工具包(如xfsprogs、e2fsprogs等)
- 建议先使用fdisk或parted确认分区正确性
- 对于生产环境,建议使用
-c选项检查坏块 - 创建文件系统后,可以使用
tune2fs(ext系列)或xfs_admin(XFS)调整参数
扩展知识
- 使用
blkid查看已格式化的文件系统信息 - 通过
tune2fs(ext系列)或xfs_admin(XFS)调整文件系统参数 - 建议先用
lsblk确认设备名称再操作
blkid - 查看块设备属性
blkid(Block ID)是 Linux 下用于查看块设备(磁盘/分区)属性信息的命令行工具,可显示文件系统类型、UUID、LABEL 等关键信息,常用于磁盘管理和 /etc/fstab 配置。
语法结构
blkid [选项] [设备名]选项
| 选项 | 描述 | 示例 |
|---|---|---|
-c cachefile | 指定缓存文件 | blkid -c /dev/null |
-g | 重新生成UUID缓存 | blkid -g |
-o format | 指定输出格式 | blkid -o list |
-s tag | 显示特定标签 | blkid -s UUID |
-p | 低级别超级块探测 | blkid -p /dev/sda1 |
-i | 显示额外信息 | blkid -i /dev/sdb1 |
-U uuid | 通过UUID查找设备 | blkid -U "3e6b...a12" |
-L label | 通过卷标查找设备 | blkid -L "ROOT" |
经典案例
# 显示所有块设备信息
blkid
# 显示特定设备信息
blkid /dev/sda1
# 只显示UUID信息
blkid -s UUID /dev/sdb1
# 使用列表格式输出
blkid -o list
# 通过UUID查找设备
blkid -U "3e6b9dc6-01eb-4b75-a12a-12dda4c6f54a"
# 显示完整探测信息(包括未挂载设备)
blkid -p -o udev /dev/sdc*注意事项
- 需要root权限:普通用户可能无法获取完整信息
- 缓存机制:首次执行会扫描设备,后续使用缓存(
-c /dev/null强制刷新) - LVM/RAID设备:需先激活逻辑卷才能正确识别
- NTFS兼容性:Windows双系统环境下可能需要
ntfs-3g驱动
重新加载分区:分区后不显示使用partprobe /dev/sdb重新加载
resize2fs - 调整 ext2/ext3/ext4 文件系统大小
resize2fs 是 Linux 系统中用于 调整 ext2/ext3/ext4 文件系统大小 的命令,通常与 LVM 的 lvextend 或 lvresize 配合使用。它可以在线(已挂载)或离线(未挂载)状态下扩展文件系统,但 仅支持收缩未挂载的文件系统。
语法格式
resize2fs [选项] 设备 [新大小]选项
| 选项 | 描述 | 示例 |
|---|---|---|
-d | 启用调试模式 | resize2fs -d /dev/sda1 |
-f | 强制调整大小,即使文件系统看起来有问题 | resize2fs -f /dev/sda1 |
-p | 显示调整进度的百分比 | resize2fs -p /dev/sda1 |
-M | 将文件系统缩小到最小可能的大小 | resize2fs -M /dev/sda1 |
-P | 打印文件系统的最小可能大小 | resize2fs -P /dev/sda1 |
-F | 刷新文件系统的缓冲区 | resize2fs -F /dev/sda1 |
经典案例
lvextend -L +10G /dev/vg_data/lv_files # 先扩展LV(假设已用 lvextend)
resize2fs /dev/vg_data/lv_files 10G # 再调整分区的文件系统大小调整为10GB
resize2fs -M /dev/sdb2 # 收缩文件系统(需先卸载)注意事项
- 必须先扩展底层存储(LVM/分区)
- 收缩操作必须卸载文件系统
- 对正在使用的文件系统操作可能导致数据损坏
- 建议操作前使用
e2fsck -f检查文件系统
xfs_growfs - 在线调整xfs格式文件大小
xfs_growfs 是 Linux 系统中用于 扩展 XFS 文件系统 的命令,适用于动态增加存储容量。与 resize2fs(用于 ext4)不同,XFS 不支持收缩,只能扩容。
语法格式
xfs_growfs [选项] 挂载点|设备选项
| 选项 | 描述 | 示例 |
|---|---|---|
-d | 扩展文件系统到设备的最大可用空间 | xfs_growfs -d /mnt/data |
-D size | 将文件系统扩展到指定大小(单位:块) | xfs_growfs -D 1000000 /dev/sda1 |
-L | 启用日志记录 | xfs_growfs -L /mnt/data |
-n | 仅显示操作信息,不实际执行扩展 | xfs_growfs -n /mnt/data |
-V | 显示版本信息 | xfs_growfs -V |
经典案例
# 先扩展底层LV(假设已用 lvextend)
sudo lvextend -L +20G /dev/vg_data/lv_xfs
# 再扩展文件系统
sudo xfs_growfs /mnt/xfs_data
# 将文件系统扩展到指定大小(块为单位)
xfs_growfs -D 1000000 /dev/sda1注意事项
- 仅支持扩展:XFS 无法收缩!如需缩小必须备份→重建→恢复
- 必须挂载状态:与 ext4 不同,XFS 扩展时要求文件系统已挂载
- 底层存储需先扩容:
- LVM 逻辑卷:先用
lvextend - 普通分区:用
parted调整分区表后生效
- LVM 逻辑卷:先用
- 无数据风险:扩展操作安全,但需确保存储设备稳定
e2fsck - 检查和修复ext文件系统
2fsck(ext2/3/4 Filesystem Check)是 Linux 系统中用于 检查和修复 ext2/ext3/ext4 文件系统 的工具。它类似于 Windows 的 chkdsk,用于检测文件系统错误并尝试修复。
语法格式
e2fsck [选项] 设备文件选项
| 选项 | 描述 | 示例 |
|---|---|---|
-p | 自动修复文件系统中的问题(不提示用户) | e2fsck -p /dev/sda1 |
-f | 强制检查,即使文件系统看起来是干净的 | e2fsck -f /dev/sda1 |
-y | 对所有问题回答 “是” | e2fsck -y /dev/sda1 |
-n | 对所有问题回答 “否”(仅显示问题,不修复) | e2fsck -n /dev/sda1 |
-c | 检查坏块 | e2fsck -c /dev/sda1 |
-v | 显示详细输出 | e2fsck -v /dev/sda1 |
-b superblock | 使用备用超级块 | e2fsck -b 8193 /dev/sda1 |
经典案例
e2fsck -p /dev/sdb1 # 自动修复文件系统(推荐)
e2fsck -f /dev/vg_data/lv_files # 强制检查并修复(交互式)
e2fsck -n /dev/sdc1 # 仅检查但不修复
e2fsck -c /dev/sdd1 # 检查坏块(适用于老旧硬盘)-c 会扫描坏道,耗时较长
e2fsck -b 32768 /dev/sda1 # 使用备用超级块修复(主超级块损坏时)(32768 是常见的备用超级块位置)注意事项
必须卸载文件系统
bashumount /dev/sdb1 # 先卸载 e2fsck /dev/sdb1 # 再检查若无法卸载(如根分区),需使用 Live CD/USB 启动后操作。
系统启动时自动运行:
- 若
/etc/fstab中pass值非0,系统会在启动时自动运行fsck。
- 若
风险提示:
-y可能强制修复导致数据丢失,慎用!- 重要数据建议先备份再修复。
XFS 文件系统:
- 使用
xfs_repair而非e2fsck。
- 使用
xfs_repair - XFS 文件系统修复工具
xfs_repair 是 Linux 系统中用于 检查和修复 XFS 文件系统 的工具。与 e2fsck(用于 ext4)不同,XFS 是一个日志型文件系统,修复方式更加高效,但 只能在未挂载状态下运行。
语法格式
xfs_repair [选项] 设备文件选项
| 选项 | 描述 | 示例 |
|---|---|---|
-n | 仅检查文件系统,不进行修复 | xfs_repair -n /dev/sda1 |
-d | 修复只读挂载的文件系统(危险,慎用) | xfs_repair -d /dev/sda1 |
-L | 强制清空日志(会丢失未提交的数据) | xfs_repair -L /dev/sda1 |
-v | 显示详细输出 | xfs_repair -v /dev/sda1 |
-f | 强制修复,即使设备看起来没问题 | xfs_repair -f /dev/sda1 |
-m | 指定内存限制(单位:MB) | xfs_repair -m 512 /dev/sda1 |
经典案例
xfs_repair /dev/sdb1 # 执行修复
xfs_repair -n /dev/vg_data/lv_xfs # 仅检查不修复(安全模式)
xfs_repair -L /dev/sda2 # 强制清空日志(修复启动失败
xfs_repair -d /dev/sdc1 # 紧急修复(超级块损坏时)
xfs_repair -c subopt=1 /dev/sdd1 # 检查并优化大型文件系统注意事项
- 文件系统状态:
xfs_repair必须在文件系统未挂载时运行。如果文件系统已挂载,可能会导致数据损坏。 - 日志清空:
-L选项会强制清空日志,可能导致未提交的数据丢失,仅在必要时使用。 - 备份数据:在运行
xfs_repair之前,建议备份重要数据,以防修复过程中出现意外。 - 内存限制:对于大型文件系统,可以使用
-m选项限制内存使用,避免系统资源耗尽。 - 只读修复:
-d选项允许在只读挂载的文件系统上运行修复,但可能导致数据不一致,慎用。
mdadm - 磁盘阵列工具
mdadm 是 Linux 系统中用于管理软件 RAID(独立磁盘冗余阵列)的工具。它可以创建、管理、监控和修复 RAID 设备,支持 RAID 0、1、4、5、6、10 等多种级别。mdadm 提供了灵活的配置选项,是 Linux 服务器存储管理的核心工具之一。
语法格式
mdadm [模式] [选项] <RAID设备> [成员设备]主要模式
| 模式 | 描述 |
|---|---|
--create (-C) | 创建新 RAID 阵列 |
--assemble (-A) | 装配已存在的阵列 |
--manage (-F) | 管理运行中的阵列 |
--monitor (-F) | 监控阵列状态 |
--build (-B) | 创建没有超级块的旧式阵列 |
--misc (-Q) | 查询或报告设备信息 |
选项
| 选项 | 作用 | 示例 |
|---|---|---|
-A或--assemble | 启动 RAID 阵列 | mdadm -A /dev/mdX /dev/sd[ab]1 |
-C 或 --create | 创建 RAID 磁盘阵列组 | mdadm -Cv -l1 /dev/md0 /dev/sd[ab]1 |
-c 或 --chunk | 设置数据块大小 | mdadm -C /dev/md0 -l 5 -c 256 -n 3 /dev/sd[abc]1 |
-l 或 --level | 设置 RAID 设备级别 | mdadm -C -l1 /dev/md0 /dev/sd[ab]1 |
-n 或 --raid-devices | 设置 RAID 中活动设备的数量 | mdadm -C -n2 /dev/md0 /dev/sd[ab]1 |
-x 或 --spare-devices | 设置初始 RAID 设备的备用成员数量 | mdadm -C -x1 /dev/md0 /dev/sd[abc]1 |
-a 或 --add | 向 RAID 中添加新设备 | mdadm /dev/md0 -a /dev/sdc1 |
-G或--grow | 设置RAID设备大小 | mdadm -G /dev/md0 -n 4 -a/dev/sdd1 |
-r 或 --remove | 将指定成员移出 RAID 设备 | mdadm /dev/md0 -r /dev/sdb1 |
-f 或 --fail | 将指定 RAID 设备成员设置为故障模式 | mdadm /dev/md0 -f /dev/sdb1 |
-D 或 --detail | 显示 RAID 设备的详细信息 | mdadm -D /dev/md0 |
-s或--scan | 扫描配置文件 | mdadm -Ds |
-Q 或 --query | 查看 RAID 设备的简要信息 | mdadm -Q/dev/sda1 |
-E 或 --examine | 显示 RAID 设备成员的详细信息 | mdadm -E /dev/sda1 |
-v 或--verbose | 显示详细操作信息 | mdadm -Cv -l1 /dev/md0 /dev/sd[ab]1 |
-S或--stop | 停用一个 RAID 设备,并释放所有资源 | mdadm -S /dev/md0 |
--zero-superblock | 使用零覆盖 RAID 设备中的超级块,可清除磁盘上的 RAID 信息 | mdadm --zero-superblock /dev/sdb1 |
--size | 指定 RAID 阵列中每个磁盘的大小,通常用于创建或调整 RAID 阵列时 | mdadm -C /dev/md0 -l 1 --size=500000 -n 2 /dev/sda1 /dev/sdb1 |
经典案例
# 创建 RAID5 阵列
# 使用 3 块活动盘(sdb/sdc/sdd)和 1 块热备盘(sde)阵列设备名为 /dev/md0
mdadm -Cv /dev/md0 -l 5 -n 3 -x 1 /dev/sd[bcde]
# 查看阵列状态
mdadm -D /dev/md0
cat /proc/mdstat
# 创建raid1指定raid大小为10G
mdadm -C /dev/mdX -l 1 -n 2 --size=10G /dev/sda1 /dev/sdb1
# raid扩容最大空间
mdadm -G /dev/md10 -n 5 --size=max案例 1:创建 RAID1 阵列并挂载使用
# 假设系统中有两块新的磁盘 /dev/sdb 和 /dev/sdc。首先,创建 RAID1 阵列:
mdadm -Cv /dev/md1 -n 2 -l 1 /dev/sdb /dev/sdc
# 这里创建了一个名为 /dev/md1 的 RAID1 设备,使用 2 个磁盘。
# 然后,格式化 RAID 设备为 ext4 文件系统:
mkfs.ext4 /dev/md1
# 接着,创建挂载点并挂载:
mkdir /mnt/raid1
mount /dev/md1 /mnt/raid1
# 最后,为了在系统重启后自动挂载,需要编辑 /etc/fstab 文件,添加一行:
/dev/md1 /mnt/raid1 ext4 defaults 0 2案例 2:创建 RAID5 阵列并添加热备盘
# 假设系统中有三块磁盘 /dev/sdb、/dev/sdc、/dev/sdd,并且还有一块备用磁盘 /dev/sde。
# 创建 RAID5 阵列:
mdadm -Cv /dev/md5 -n 3 -l 5 /dev/sdb /dev/sdc /dev/sdd
# 创建了一个名为 /dev/md5 的 RAID5 阵列,使用 3 个磁盘。
# 添加热备盘:
mdadm -a /dev/md5 /dev/sde
# 将备用磁盘添加到 RAID5 阵列中。当有磁盘故障时,热备盘会自动替换故障磁盘,保证 RAID 阵列的正常运行。案例 3:查看 RAID 阵列状态并移除故障磁盘
# 查看 RAID 阵列状态:
mdadm -D /dev/md0
# 这个命令会显示 RAID 设备 /dev/md0 的详细信息,包括成员磁盘的状态等。
# 假设发现 /dev/sdb 磁盘出现故障,将其设置为故障模式并移除:
mdadm /dev/md0 -f /dev/sdb
mdadm /dev/md0 -r /dev/sdb
# 先将磁盘设置为故障模式,然后再将其从 RAID 设备中移除。
# 清除磁盘上的 RAID 超级块信息
mdadm --zero-superblock /dev/sdX注意事项
- 数据备份:创建或修改 RAID 阵列前应备份重要数据
- 设备状态:确保成员设备没有挂载或使用
- 超级块:现代 mdadm 默认会创建超级块(v1.2),包含阵列元数据
- 监控:建议设置监控(通过 cron 或 mdadm --monitor)
- 配置文件:创建后应保存配置到
/etc/mdadm/mdadm.conf或/etc/mdadm.conf - 性能考虑:RAID 5/6 在大型阵列上可能需要较长的重建时间
- 电源保护:对于 RAID 5/6,建议使用带电池的 RAID 控制器或 UPS
dd - 数据转换和复制工具
dd (disk dump) 是 Linux 系统下的一个强大的数据转换和复制工具,常用于:
- 磁盘克隆和备份
- 创建虚拟磁盘镜像
- 数据格式转换
- 磁盘性能测试
语法格式
dd if=<输入文件> of=<输出文件> [OPTIONS]选项
| 选项 | 描述 | 示例 |
|---|---|---|
if=FILE | 输入文件(默认为标准输入) | dd if=/dev/sda |
of=FILE | 输出文件(默认为标准输出) | dd of=backup.img |
bs=BYTES | 设置块大小(默认 512B) | dd bs=4M |
count=N | 复制指定数量的块 | dd count=100 |
skip=N | 跳过输入文件的前 N 个块 | dd skip=10 |
seek=N | 跳过输出文件的前 N 个块 | dd seek=5 |
conv=FLAGS | 转换数据(如大小写、同步写入等) | dd conv=ucase |
status=LEVEL | 显示进度信息(none, noxfer, progress) | dd status=progress |
经典案例
dd if=/dev/cdrom of=backup.iso bs=1M # 制作ISO镜像
dd if=/dev/sda of=/dev/sdb bs=4M status=progress # 磁盘克隆
dd if=/dev/zero of=1GB.file bs=1M count=1024 # 创建空文件
dd if=/dev/zero of=/dev/null bs=1G count=10 # 内存性能测试
dd if=mbr.bak of=/dev/sda bs=446 count=1 # 修复MBR(前446字节)
dd if=/dev/sda | ssh user@host "dd of=/backup/sda.img" # 网络传输
dd if=/dev/sda skip=1 seek=1 bs=512 count=63 # 跳过MBR备份分区表
# 测试磁盘写入速度(1GB文件,块大小1M)
dd if=/dev/zero of=./testfile bs=1M count=1000 oflag=direct
# 测试磁盘读取速度(读取1GB文件)
dd if=./testfile of=/dev/null bs=1M iflag=direct
# 测试随机I/O性能(4K小块,10000次)
dd if=/dev/urandom of=./randomfile bs=4K count=10000
# 磁盘压力测试(持续写入,直到手动停止)
dd if=/dev/zero of=/dev/sdb bs=1M status=progress注意事项
- 高危操作警告:错误的 of 参数可能覆盖重要数据
- 进度查看:建议添加
status=progress参数 - 块大小优化:较大的 bs 参数(如 1M/4M)能提高性能
- 数据完整性:完成后建议运行
sync命令 - 恢复数据:误操作后应立即卸载设备,避免数据被覆盖
- 使用
oflag=direct和iflag=direct绕过缓存,测试真实磁盘性能
dumpe2fs - 显示ext2/3/4文件系统信息
dumpe2fs命令用于显示ext2、ext3或ext4文件系统的详细信息,包括超级块信息、块组描述符、文件系统特征等。是系统管理员进行文件系统分析和故障排查的重要工具。
语法格式
dumpe2fs [选项] 设备文件选项
| 选项 | 描述 | 示例 |
|---|---|---|
-b | 显示文件系统中的坏块 | dumpe2fs -b /dev/sda1 |
-h | 仅显示超级块信息 | dumpe2fs -h /dev/sdb2 |
-i | 从损坏的文件系统显示信息 | dumpe2fs -i /dev/sdc1 |
-x | 以16进制显示信息 | dumpe2fs -x /dev/sdd1 |
-o superblock=块号 | 指定备用超级块 | dumpe2fs -o superblock=32768 /dev/sde1 |
经典案例
# 查看/dev/nvme0n1p2分区的完整文件系统信息
dumpe2fs /dev/nvme0n1p2
# 仅显示超级块信息(适合快速查看)
dumpe2fs -h /dev/sda1
# 检查文件系统坏块
dumpe2fs -b /dev/sdb1 | grep -i "bad blocks"
# 使用备用超级块查看损坏的文件系统
dumpe2fs -o superblock=8193 /dev/sdc1注意事项
- 需要root权限才能执行此命令
- 不要在已挂载的文件系统上运行(可能导致信息不一致)
- 输出信息量很大,建议配合
less或grep使用 - 对于xfs等非ext系列文件系统,应使用
xfs_info命令 - 重要参数说明:
- Block size:文件系统块大小(影响性能)
- Reserved blocks:保留块百分比(默认5%)
- Inode count:文件系统支持的最大文件数
tune2fs - 调整ext2/ext3/ext4文件系统参数
tune2fs命令用于调整ext2、ext3或ext4文件系统的可调参数,包括标签设置、保留块比例、检查间隔等。是系统管理员进行文件系统优化和维护的重要工具。
语法格式
tune2fs [选项] 设备文件选项
| 选项 | 描述 | 示例 |
|---|---|---|
-l | 显示文件系统超级块信息 | tune2fs -l /dev/sda1 |
-L 标签 | 设置文件系统卷标 | tune2fs -L DATA /dev/sdb1 |
-m 百分比 | 设置保留块百分比 | tune2fs -m 1 /dev/sdc1 |
| `-i 间隔[d | w | m]` |
-c 次数 | 设置最大挂载次数检查 | tune2fs -c 30 /dev/sde1 |
-C 次数 | 设置当前挂载计数 | tune2fs -C 5 /dev/sdf1 |
-e 行为 | 设置错误行为(continue/remount-ro/panic) | tune2fs -e remount-ro /dev/sdg1 |
-o [^]挂载选项 | 设置默认挂载选项 | tune2fs -o journal_data /dev/sdh1 |
-r 块数 | 设置保留块数量 | tune2fs -r 8192 /dev/sdi1 |
经典案例
# 查看文件系统当前参数
tune2fs -l /dev/nvme0n1p2
# 设置卷标为"WEB_DATA"
tune2fs -L WEB_DATA /dev/sdb1
# 减少保留块比例到1%(默认为5%)
tune2fs -m 1 /dev/sdc1
# 禁用180天检查间隔
tune2fs -i 0 /dev/sdd1
# 设置文件系统错误时自动remount为只读
tune2fs -e remount-ro /dev/sde1
# 启用journal_data写日志功能
tune2fs -o journal_data /dev/sdf1注意事项
- 需要root权限才能执行修改操作
- 修改前建议先备份重要数据
- 某些参数修改后需要重新挂载或重启才能生效
- 不要对已挂载的文件系统执行危险操作
- 保留块比例不宜设置过低(建议至少1%)
- 生产环境修改前应在测试环境验证
