在 Linux 系统中,磁盘管理是系统管理的核心任务之一,涉及存储设备的识别、分区、格式化、挂载以及维护等操作。下面从基础到高级,详细为您下介绍 Linux 磁盘管理的各个方面:
一、磁盘基础概念
1. 物理存储结构
- 磁盘(Drive):物理存储设备,如 HDD(机械硬盘)、SSD(固态硬盘)。
- 分区(Partition):磁盘的逻辑划分,可分为主分区(Primary)、扩展分区(Extended)和逻辑分区(Logical)。
- 文件系统(Filesystem):数据在分区上的组织方式,如
ext4、XFS、NTFS等。
2. 设备命名规则
- 传统命名:
/dev/sdX(SCSI/SATA 磁盘,如sda、sdb)。 - NVMe 命名:
/dev/nvmeXnY(NVMe SSD,如nvme0n1)。 - 虚拟磁盘:
/dev/vdX(虚拟机环境,如vda)。
二、查看磁盘信息
1. 识别物理磁盘
# 查看所有块设备(磁盘和分区)
lsblk
# 输出示例:
# NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
# sda 8:0 0 465.8G 0 disk
# ├─sda1 8:1 0 512M 0 part /boot/efi
# ├─sda2 8:2 0 1G 0 part /boot
# └─sda3 8:3 0 464.3G 0 part /
# 查看详细磁盘信息(包括分区表)
fdisk -l
# 查看磁盘UUID和文件系统
lsblk -f
2. 查看磁盘使用情况
# 查看已挂载磁盘的使用情况(-h:人类可读格式)
df -h
# 查看目录占用空间(-s:汇总,-h:人类可读)
du -sh /path/to/directory
3. 监控磁盘 I/O 性能
# 安装iotop工具(需root权限)
sudo apt install iotop # Debian/Ubuntu
sudo yum install iotop # CentOS/RHEL
# 实时监控磁盘I/O
sudo iotop
# 使用iostat查看磁盘I/O统计(需安装sysstat包)
iostat -x 1 # 每秒更新一次
三、磁盘分区
1. MBR vs GPT 分区表
- MBR(主引导记录):
- 最大支持 2TB 磁盘
- 最多 4 个主分区或 3 主 + 1 扩展(包含多个逻辑分区)
- GPT(GUID 分区表):
- 支持超过 2TB 的磁盘
- 最多 128 个分区
- 包含冗余分区表和 UEFI 支持
2. 使用fdisk分区(MBR/GPT)
# 对/dev/sdb进行分区(需root权限)
sudo fdisk /dev/sdb
# fdisk交互命令:
m # 显示帮助菜单
n # 创建新分区
p # 选择主分区(1-4)
e # 选择扩展分区
l # 列出可用分区类型(如83=Linux, 82=Swap)
t # 更改分区类型
d # 删除分区
w # 保存并退出
q # 不保存退出
3. 使用
parted分区(推荐 GPT)# 对/dev/sdb进行GPT分区(需root权限)
sudo parted /dev/sdb
# parted交互命令:
mklabel gpt # 创建GPT分区表
mkpart primary # 创建主分区
ext4 # 文件系统类型
1MB # 起始位置
100GB # 结束位置(或100%表示占满)
print # 显示分区表
quit # 退出
四、格式化文件系统
1. 常见文件系统类型
- Linux 原生:
ext4(稳定)、XFS(高性能)、Btrfs(支持快照) - 跨平台:
NTFS(Windows 兼容)、FAT32(通用但不支持大文件)
2. 格式化命令
# 格式化为ext4文件系统
sudo mkfs.ext4 /dev/sdb1
# 格式化为XFS文件系统(需指定LVM卷组时常用)
sudo mkfs.xfs /dev/sdb1
# 格式化为NTFS(需安装ntfs-3g包)
sudo mkfs.ntfs -f /dev/sdb1
# 格式化时设置卷标
sudo mkfs.ext4 -L "DATA_DISK" /dev/sdb1
五、挂载与卸载磁盘
1. 临时挂载(重启失效)
# 创建挂载点目录
sudo mkdir /mnt/data
# 挂载分区到/mnt/data
sudo mount /dev/sdb1 /mnt/data
# 挂载时指定文件系统类型(可选)
sudo mount -t ext4 /dev/sdb1 /mnt/data
# 挂载CD-ROM/DVD
sudo mount /dev/cdrom /media/cdrom
2. 卸载磁盘
# 卸载/mnt/data(确保无人使用)
sudo umount /mnt/data
# 强制卸载(谨慎使用)
sudo umount -f /mnt/data
# 按挂载点路径卸载(推荐)
sudo umount /path/to/mountpoint
3. 查看挂载信息
# 查看当前挂载情况
mount
# 查看更友好的挂载信息
findmnt
# 查看特定设备的挂载点
findmnt /dev/sdb1
六、开机自动挂载(/etc/fstab)
1. 编辑 fstab 文件
# 备份原文件
sudo cp /etc/fstab /etc/fstab.bak
# 编辑fstab(推荐使用UUID而非设备名)
sudo nano /etc/fstab
# 添加一行(格式:<设备> <挂载点> <文件系统> <选项> <转储> <检查>)
UUID=1234-abcd /mnt/data ext4 defaults 0 0
2. 获取 UUID
# 方法1:使用blkid命令
blkid /dev/sdb1
# 方法2:从lsblk查看
lsblk -f
3. 测试 fstab 配置
# 检查语法错误
sudo mount -a # 若无错误,配置正确
# 重新挂载所有分区
sudo mount -a -v # 详细输出挂载过程
七、高级磁盘管理
1. LVM(逻辑卷管理)
LVM 允许动态调整分区大小,适合经常变化的存储需求。
# 1. 创建物理卷
sudo pvcreate /dev/sdb /dev/sdc
# 2. 创建卷组
sudo vgcreate vg_data /dev/sdb /dev/sdc
# 3. 创建逻辑卷
sudo lvcreate -L 50G -n lv_data vg_data
# 4. 格式化并挂载
sudo mkfs.ext4 /dev/vg_data/lv_data
sudo mount /dev/vg_data/lv_data /mnt/data
# 5. 扩展逻辑卷
sudo lvextend -L +20G /dev/vg_data/lv_data
sudo resize2fs /dev/vg_data/lv_data # ext4
sudo xfs_growfs /mnt/data # XFS
2. RAID 配置(mdadm)
RAID 提供数据冗余或性能提升。
# 创建RAID1(镜像)
sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc
# 格式化并挂载
sudo mkfs.ext4 /dev/md0
sudo mount /dev/md0 /mnt/raid
# 查看RAID状态
sudo mdadm --detail /dev/md0
3. SWAP 空间管理
# 创建swap文件
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 永久启用(添加到fstab)
/swapfile none swap defaults 0 0
# 查看swap使用情况
swapon -s
free -h
八、磁盘维护与故障排除
1. 检查和修复文件系统
# 卸载分区后检查ext4
sudo e2fsck -f /dev/sdb1
# 在线检查XFS(只能修复日志)
sudo xfs_repair /dev/sdb1
2. 坏道检测
# 扫描并尝试修复坏扇区(谨慎使用,可能耗时很久)
sudo badblocks -v -w -s /dev/sdb
3. 磁盘性能优化
- 调整 I/O 调度器(SSD 推荐
noop或mq-deadline):echo mq-deadline | sudo tee /sys/block/sda/queue/scheduler - 禁用不必要的日志(XFS 默认无日志,ext4 可调整):
mount -o data=writeback /dev/sdb1
九、安全注意事项
- 数据备份:操作前务必备份重要数据。
- 权限控制:磁盘管理命令通常需要 root 权限,使用
sudo时需谨慎。 - 生产环境:在生产系统操作前,建议在测试环境验证。
- 大磁盘支持:超过 2TB 的磁盘必须使用 GPT 分区表。
十、常用工具速查表
| 功能 | 命令示例 | 备注 |
|---|---|---|
| 查看磁盘信息 | lsblk, fdisk -l, df -h |
|
| 分区 | fdisk /dev/sdb, parted /dev/sdb |
MBR 用 fdisk,GPT 用 parted |
| 格式化 | mkfs.ext4 /dev/sdb1 |
|
| 挂载 / 卸载 | mount /dev/sdb1 /mnt, umount /mnt |
|
| 自动挂载 | 编辑/etc/fstab |
使用 UUID 而非设备名 |
| LVM 管理 | pvcreate, vgcreate, lvcreate |
|
| RAID 管理 | mdadm --create /dev/md0 |
|
| 性能监控 | iotop, iostat, hdparm -tT |
通过以上命令和步骤,你就可以完成 Linux 系统中大部分的磁盘管理任务了。