教程 linux tutorial

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

创建分区的步骤

  1. 选择分区工具
  2. 创建分区表
  3. 创建分区
  4. 设置分区类型
  5. 保存更改

磁盘格式化

文件系统类型

格式化是在分区上创建文件系统的过程,常用的 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   2

fstab 文件格式:

  1. 设备标识符(UUID 或设备路径)
  2. 挂载点
  3. 文件系统类型
  4. 挂载选项
  5. dump 选项(通常为 0)
  6. 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 -u

RAID 维护

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/data

LVM 空间不足

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 等高级功能,都需要谨慎操作,特别是在处理重要数据时。