插件窝 干货文章 Linux系统中的磁盘管理技巧

Linux系统中的磁盘管理技巧

磁盘 dev 文件 系统 430    来源:    2025-04-18

Linux系统中的磁盘管理技巧

基本磁盘管理命令

1. 查看磁盘信息

# 查看所有磁盘和分区信息
fdisk -l

# 以易读方式显示磁盘空间使用情况
df -h

# 显示目录或文件大小
du -sh /path/to/directory

# 查看磁盘分区表
lsblk

# 查看块设备详细信息
blkid

2. 分区管理

# 进入交互式分区工具 (如对/dev/sdb操作)
fdisk /dev/sdb

# 常用fdisk命令(在交互模式中):
# n - 新建分区
# d - 删除分区
# p - 打印分区表
# w - 写入并退出
# q - 不保存退出

# 使用parted进行GPT分区(适合大容量磁盘)
parted /dev/sdb

3. 文件系统创建与挂载

# 创建ext4文件系统
mkfs.ext4 /dev/sdb1

# 创建XFS文件系统
mkfs.xfs /dev/sdb1

# 临时挂载
mount /dev/sdb1 /mnt/data

# 永久挂载(编辑/etc/fstab)
echo "/dev/sdb1 /mnt/data ext4 defaults 0 0" >> /etc/fstab

# 重新挂载所有在fstab中定义的文件系统
mount -a

高级磁盘管理技巧

1. LVM (逻辑卷管理)

# 创建物理卷
pvcreate /dev/sdb1

# 创建卷组
vgcreate vg_data /dev/sdb1

# 创建逻辑卷
lvcreate -L 100G -n lv_data vg_data

# 扩展逻辑卷
lvextend -L +50G /dev/vg_data/lv_data

# 扩展文件系统(对于ext4)
resize2fs /dev/vg_data/lv_data

# 扩展文件系统(对于XFS)
xfs_growfs /dev/vg_data/lv_data

# 查看LVM信息
pvdisplay
vgdisplay
lvdisplay

2. 磁盘性能测试

# 测试磁盘读写速度
hdparm -Tt /dev/sda

# 使用dd命令测试写入速度
dd if=/dev/zero of=/tmp/test bs=1M count=1024 conv=fdatasync

# 使用fio进行更专业的测试
fio --name=randwrite --ioengine=libaio --iodepth=32 --rw=randwrite --bs=4k --direct=1 --size=1G --numjobs=4 --runtime=60 --group_reporting

3. 磁盘健康监测

# 查看S.M.A.R.T.信息(需要安装smartmontools)
smartctl -a /dev/sda

# 短期自检
smartctl -t short /dev/sda

# 长期自检
smartctl -t long /dev/sda

# 查看磁盘IO状态
iostat -x 1

故障处理与维护

1. 文件系统修复

# 检查ext3/ext4文件系统
fsck /dev/sdb1

# 检查XFS文件系统
xfs_repair /dev/sdb1

# 强制检查(当文件系统标记为dirty时)
fsck -y /dev/sdb1

2. 磁盘空间清理

# 查找大文件
find / -type f -size +100M -exec ls -lh {} \;

# 清理旧的内核包(适用于基于Debian的系统)
apt autoremove --purge

# 清理yum缓存(适用于基于RHEL的系统)
yum clean all

# 查看目录大小并排序
du -h / | sort -h

3. 磁盘加密

# 使用LUKS加密磁盘
cryptsetup luksFormat /dev/sdb1
cryptsetup luksOpen /dev/sdb1 encrypted_disk
mkfs.ext4 /dev/mapper/encrypted_disk
mount /dev/mapper/encrypted_disk /mnt/secure

实用脚本示例

1. 监控磁盘空间

#!/bin/bash
THRESHOLD=90
CURRENT=$(df / | grep / | awk '{ print $5}' | sed 's/%//g')

if [ "$CURRENT" -gt "$THRESHOLD" ]; then
    echo "警告: 根分区使用率超过 ${THRESHOLD}%,当前为 ${CURRENT}%" | mail -s "磁盘空间警报" admin@example.com
fi

2. 自动扩展LVM分区

#!/bin/bash
VG_NAME="vg_data"
LV_NAME="lv_data"
MOUNT_POINT="/mnt/data"
THRESHOLD=80

USAGE=$(df -h $MOUNT_POINT | awk '{print $5}' | tail -1 | cut -d'%' -f1)

if [ $USAGE -gt $THRESHOLD ]; then
    # 扩展逻辑卷10G
    lvextend -L +10G /dev/$VG_NAME/$LV_NAME

    # 根据文件系统类型扩展
    FS_TYPE=$(df -T $MOUNT_POINT | awk '{print $2}' | tail -1)

    if [ "$FS_TYPE" == "ext4" ]; then
        resize2fs /dev/$VG_NAME/$LV_NAME
    elif [ "$FS_TYPE" == "xfs" ]; then
        xfs_growfs $MOUNT_POINT
    fi

    echo "已自动扩展 $MOUNT_POINT 10G空间" | mail -s "LVM自动扩展" admin@example.com
fi

掌握这些Linux磁盘管理技巧可以帮助您更高效地管理系统存储资源,预防潜在问题,并在出现问题时快速诊断和解决。