主题
Linux 磁盘管理
磁盘管理是 Linux 系统管理中的重要组成部分,涉及磁盘分区、格式化、挂载以及存储资源的优化和监控。有效的磁盘管理可以提高系统性能,确保数据安全,并合理分配存储资源。
磁盘基础
磁盘类型
物理磁盘
- HDD (Hard Disk Drive):传统机械硬盘
- SSD (Solid State Drive):固态硬盘,无机械部件,读写速度快
- NVMe SSD:基于 PCIe 接口的高速固态硬盘
虚拟磁盘
- 在虚拟化环境中的磁盘,如虚拟机的虚拟硬盘
磁盘命名
Linux 系统中磁盘的命名规则:
- IDE 磁盘:以
hd开头,如hda,hdb - SATA/SCSI/USB 磁盘:以
sd开头,如sda,sdb - NVMe 磁盘:以
nvme开头,如nvme0n1 - 分区:在磁盘名后添加数字,如
sda1,sda2
bash
# 查看系统中的磁盘和分区
lsblk
# 或
fdisk -l磁盘分区
分区表类型
MBR (Master Boot Record)
- 支持最大 2TB 磁盘
- 最多 4 个主分区,或 3 个主分区+1个扩展分区
- 传统分区表格式,兼容性好
GPT (GUID Partition Table)
- 支持大于 2TB 的磁盘
- 最多支持 128 个分区
- 提供更好的错误检测和恢复机制
- 适合 UEFI 引导模式
分区工具
fdisk
传统的磁盘分区工具,适用于 MBR 分区表。
bash
# 启动 fdisk 交互式分区工具
sudo fdisk /dev/sda
# 常用命令:
# p - 显示分区表
# n - 创建新分区
# d - 删除分区
# t - 更改分区类型
# w - 保存更改并退出
# q - 退出不保存gdisk
GPT 版本的 fdisk,用于 GPT 分区表。
bash
# 启动 gdisk 交互式分区工具
sudo gdisk /dev/sda
# 常用命令与 fdisk 类似parted
功能更强大的分区工具,支持 MBR 和 GPT,可用于脚本。
bash
# 启动 parted 交互式工具
sudo parted /dev/sda
# 常用命令:
# print - 显示分区信息
# mklabel gpt - 创建 GPT 分区表
# mkpart primary 0% 100% - 创建主分区
# quit - 退出
# 非交互式操作
sudo parted /dev/sda mklabel gpt
sudo parted /dev/sda mkpart primary ext4 0% 20GiB创建分区的步骤
- 选择分区工具
- 创建分区表
- 创建分区
- 设置分区类型
- 保存更改
磁盘格式化
文件系统类型
格式化是在分区上创建文件系统的过程,常用的 Linux 文件系统包括:
- ext4:最常用的 Linux 文件系统
- XFS:高性能 64 位文件系统
- Btrfs:新一代文件系统,支持高级功能
- FAT32/NTFS:用于与 Windows 系统兼容
格式化工具
mkfs 系列命令
bash
# 格式化分区为 ext4
sudo mkfs.ext4 /dev/sda1
# 格式化分区为 XFS
sudo mkfs.xfs /dev/sda1
# 格式化分区为 Btrfs
sudo mkfs.btrfs /dev/sda1
# 格式化分区为 FAT32
sudo mkfs.vfat -F 32 /dev/sda1
# 格式化分区为 NTFS
sudo mkfs.ntfs /dev/sda1格式化选项
bash
# 创建带有卷标的 ext4 文件系统
sudo mkfs.ext4 -L "DataVolume" /dev/sda1
# 创建 XFS 文件系统,优化大文件
sudo mkfs.xfs -d agcount=16 /dev/sda1磁盘挂载
挂载基础
挂载是将文件系统连接到 Linux 目录树的过程。
临时挂载
bash
# 创建挂载点
sudo mkdir /mnt/data
# 挂载分区
sudo mount /dev/sda1 /mnt/data
# 使用特定选项挂载
sudo mount -t ext4 -o rw,noatime /dev/sda1 /mnt/data常用挂载选项:
ro/rw:只读/读写挂载noatime/nodiratime:不更新访问时间defaults:使用默认选项(rw, suid, dev, exec, auto, nouser, async)noexec:禁止在挂载分区上执行程序user:允许普通用户挂载
永久挂载
通过编辑 /etc/fstab 文件实现系统启动时自动挂载:
bash
# 备份 fstab 文件
sudo cp /etc/fstab /etc/fstab.bak
# 编辑 fstab 文件
sudo nano /etc/fstab添加类似以下的行:
/dev/sda1 /mnt/data ext4 defaults,noatime 0 2fstab 文件格式:
- 设备标识符(UUID 或设备路径)
- 挂载点
- 文件系统类型
- 挂载选项
- dump 选项(通常为 0)
- fsck 顺序(根分区为 1,其他为 2,不检查为 0)
使用 UUID 挂载
推荐使用 UUID 而非设备路径,因为 UUID 是唯一的:
bash
# 查看分区的 UUID
sudo blkid /dev/sda1
# 在 fstab 中使用 UUID
UUID=12345678-1234-1234-1234-123456789012 /mnt/data ext4 defaults 0 2卸载文件系统
bash
# 卸载分区
sudo umount /mnt/data
# 或
sudo umount /dev/sda1
# 强制卸载(谨慎使用)
sudo umount -f /mnt/data磁盘空间管理
查看磁盘空间
bash
# 查看所有文件系统的磁盘空间使用情况
df -h
# 查看 inode 使用情况
df -i
# 查看目录大小
du -h /path/to/directory
# 查看大文件
find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null磁盘空间优化
清理临时文件
bash
# 清理临时目录
sudo rm -rf /tmp/*
sudo rm -rf /var/tmp/*
# 清理旧日志文件
sudo find /var/log -name "*.gz" -delete
sudo journalctl --vacuum-time=7d # 保留7天的系统日志查找大目录
bash
# 查找占用空间最大的前10个目录
du -h --max-depth=1 / | sort -hr | head -10逻辑卷管理 (LVM)
LVM 简介
LVM(Logical Volume Manager)提供了更灵活的磁盘空间管理方式,允许动态调整分区大小。
LVM 基本概念
- 物理卷 (PV):物理磁盘或分区
- 卷组 (VG):由多个 PV 组成的逻辑单元
- 逻辑卷 (LV):从 VG 中分配的空间,可以格式化并挂载
LVM 操作
创建 LVM 分区
bash
# 创建物理卷
sudo pvcreate /dev/sda1 /dev/sdb1
# 查看物理卷信息
sudo pvdisplay
# 创建卷组
sudo vgcreate myvg /dev/sda1 /dev/sdb1
# 查看卷组信息
sudo vgdisplay
# 创建逻辑卷
sudo lvcreate -L 20G -n mylv myvg
# 查看逻辑卷信息
sudo lvdisplay
# 格式化逻辑卷
sudo mkfs.ext4 /dev/myvg/mylv
# 挂载逻辑卷
sudo mount /dev/myvg/mylv /mnt/data管理 LVM 空间
bash
# 扩展卷组(添加新的物理卷)
sudo vgextend myvg /dev/sdc1
# 扩展逻辑卷
sudo lvextend -L +10G /dev/myvg/mylv
# 或使用全部可用空间
sudo lvextend -l +100%FREE /dev/myvg/mylv
# 调整文件系统大小以匹配逻辑卷
sudo resize2fs /dev/myvg/mylv # 对于 ext4
sudo xfs_growfs /dev/myvg/mylv # 对于 XFS
# 减少逻辑卷(先备份数据!)
sudo umount /mnt/data
sudo e2fsck -f /dev/myvg/mylv
sudo resize2fs /dev/myvg/mylv 15G
sudo lvreduce -L 15G /dev/myvg/mylv
sudo mount /dev/myvg/mylv /mnt/data软件 RAID
RAID 级别
- RAID 0:条带化,提高性能,无冗余
- RAID 1:镜像,提供冗余,读写性能提升
- RAID 5:分布式奇偶校验,至少需要 3 个磁盘
- RAID 6:双重奇偶校验,至少需要 4 个磁盘
- RAID 10:RAID 1+0,结合镜像和条带化
使用 mdadm 创建 RAID
bash
# 安装 mdadm
sudo apt install mdadm # Debian/Ubuntu
sudo dnf install mdadm # Fedora/CentOS
# 创建 RAID 1
sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1
# 创建 RAID 5
sudo mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sda1 /dev/sdb1 /dev/sdc1
# 查看 RAID 状态
sudo mdadm --detail /dev/md0
cat /proc/mdstat
# 格式化并挂载 RAID
sudo mkfs.ext4 /dev/md0
sudo mount /dev/md0 /mnt/raid
# 保存 RAID 配置
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
sudo update-initramfs -uRAID 维护
bash
# 标记磁盘为故障
sudo mdadm /dev/md0 --fail /dev/sda1
# 移除故障磁盘
sudo mdadm /dev/md0 --remove /dev/sda1
# 添加新磁盘
sudo mdadm /dev/md0 --add /dev/sda1磁盘监控与维护
磁盘健康监控
使用 smartmontools
bash
# 安装 smartmontools
sudo apt install smartmontools # Debian/Ubuntu
sudo dnf install smartmontools # Fedora/CentOS
# 查看磁盘 SMART 信息
sudo smartctl -a /dev/sda
# 运行磁盘自检
sudo smartctl -t long /dev/sda
# 查看自检结果
sudo smartctl -l selftest /dev/sda磁盘性能测试
bash
# 使用 hdparm 测试读取速度
sudo hdparm -t /dev/sda
# 使用 dd 测试读写速度
sudo dd if=/dev/zero of=/tmp/testfile bs=1G count=1 oflag=direct # 写入测试
sudo dd if=/tmp/testfile of=/dev/null bs=1G count=1 iflag=direct # 读取测试
rm /tmp/testfile文件系统检查
bash
# 卸载文件系统后检查
sudo umount /dev/sda1
sudo fsck.ext4 /dev/sda1
# 检查 XFS 文件系统
sudo xfs_repair /dev/sda1 # 通常不需要卸载常见问题与解决方案
磁盘满了
bash
# 查找大文件
du -h --max-depth=2 / | sort -hr | head -20
# 清理包缓存
sudo apt clean # Debian/Ubuntu
sudo dnf clean all # Fedora/CentOS
# 删除旧的内核文件(谨慎操作)
sudo apt autoremove --purge # Debian/Ubuntu挂载失败
bash
# 检查 /etc/fstab 语法
sudo mount -a
# 检查文件系统
sudo fsck /dev/sda1
# 尝试以只读模式挂载
sudo mount -o ro /dev/sda1 /mnt/dataLVM 空间不足
bash
# 检查卷组可用空间
sudo vgdisplay myvg
# 添加新磁盘到卷组
sudo pvcreate /dev/sdd1
sudo vgextend myvg /dev/sdd1
sudo lvextend -l +100%FREE /dev/myvg/mylv
sudo resize2fs /dev/myvg/mylv通过本教程,您应该已经了解了 Linux 磁盘管理的核心概念和常用工具。有效的磁盘管理对于维护系统性能和数据安全至关重要。无论是分区、格式化、挂载,还是使用 LVM 和 RAID 等高级功能,都需要谨慎操作,特别是在处理重要数据时。