磁盘管理 #

一、磁盘基础概念 #

1.1 磁盘设备命名 #

设备 说明
/dev/sda 第一块 SCSI/SATA 硬盘
/dev/sdb 第二块 SCSI/SATA 硬盘
/dev/nvme0n1 第一块 NVMe 硬盘
/dev/vda 第一块虚拟硬盘
/dev/sda1 第一块硬盘的第一个分区

1.2 分区类型 #

MBR 分区表:

  • 最多 4 个主分区
  • 最大支持 2TB 磁盘
  • 使用 fdisk 工具

GPT 分区表:

  • 支持最多 128 个分区
  • 支持超过 2TB 磁盘
  • 使用 gdisk 或 parted 工具

1.3 文件系统类型 #

文件系统 说明
ext4 Linux 默认文件系统
xfs 大文件高性能文件系统
btrfs 新一代文件系统
ntfs Windows 文件系统
fat32 通用文件系统
swap 交换分区

二、磁盘查看 #

2.1 lsblk - 查看块设备 #

bash
# 查看所有块设备
lsblk

# 查看详细信息
lsblk -f

# 显示所有信息
lsblk -a

# 显示设备大小
lsblk -b

# 树形显示
lsblk -t

# 查看 SCSI 设备
lsblk -S

2.2 fdisk - 查看分区 #

bash
# 查看所有磁盘
sudo fdisk -l

# 查看指定磁盘
sudo fdisk -l /dev/sda

2.3 df - 查看磁盘使用 #

bash
# 查看所有文件系统
df

# 人类可读格式
df -h

# 显示 inode 信息
df -i

# 显示文件系统类型
df -T

# 只显示指定类型
df -t ext4

# 排除指定类型
df -x tmpfs

2.4 du - 查看目录大小 #

bash
# 查看目录大小
du directory

# 人类可读格式
du -h directory

# 只显示总大小
du -sh directory

# 显示所有子目录
du -h --max-depth=1 directory

# 按大小排序
du -h directory | sort -h

# 显示最大的 10 个目录
du -h --max-depth=1 / | sort -hr | head -10

# 排除文件
du -h --exclude="*.log" directory

2.5 blkid - 查看设备属性 #

bash
# 查看所有设备
sudo blkid

# 查看指定设备
sudo blkid /dev/sda1

# 显示详细信息
sudo blkid -p /dev/sda1

三、磁盘分区 #

3.1 fdisk - MBR 分区 #

bash
# 进入分区工具
sudo fdisk /dev/sdb

# 交互命令
m    # 帮助
p    # 打印分区表
n    # 新建分区
d    # 删除分区
t    # 修改分区类型
w    # 保存退出
q    # 不保存退出

创建分区示例:

bash
sudo fdisk /dev/sdb
# n (新建)
# p (主分区)
# 1 (分区号)
# 回车 (默认起始扇区)
# +10G (分区大小)
# w (保存)

3.2 gdisk - GPT 分区 #

bash
# 进入分区工具
sudo gdisk /dev/sdb

# 交互命令
?    # 帮助
p    # 打印分区表
n    # 新建分区
d    # 删除分区
t    # 修改分区类型
w    # 保存退出
q    # 不保存退出

3.3 parted - 高级分区工具 #

bash
# 查看分区
sudo parted /dev/sdb print

# 创建 GPT 分区表
sudo parted /dev/sdb mklabel gpt

# 创建 MBR 分区表
sudo parted /dev/sdb mklabel msdos

# 创建分区
sudo parted /dev/sdb mkpart primary ext4 1MiB 10GiB

# 删除分区
sudo parted /dev/sdb rm 1

# 调整分区大小
sudo parted /dev/sdb resizepart 1 20GiB

3.4 partprobe - 更新分区表 #

bash
# 更新分区表
sudo partprobe

# 更新指定磁盘
sudo partprobe /dev/sdb

四、文件系统管理 #

4.1 mkfs - 创建文件系统 #

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

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

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

# 创建 FAT32 文件系统
sudo mkfs.vfat /dev/sdb1

# 指定卷标
sudo mkfs.ext4 -L data /dev/sdb1

# 指定块大小
sudo mkfs.ext4 -b 4096 /dev/sdb1

4.2 mke2fs - ext 系列专用 #

bash
# 创建 ext4
sudo mke2fs -t ext4 /dev/sdb1

# 指定 inode 数量
sudo mke2fs -i 8192 /dev/sdb1

# 保留块百分比
sudo mke2fs -m 5 /dev/sdb1

# 启用日志
sudo mke2fs -j /dev/sdb1

4.3 tune2fs - 调整文件系统 #

bash
# 查看文件系统信息
sudo tune2fs -l /dev/sdb1

# 修改卷标
sudo tune2fs -L newlabel /dev/sdb1

# 修改保留块百分比
sudo tune2fs -m 3 /dev/sdb1

# 启用日志
sudo tune2fs -j /dev/sdb1

# 设置最大挂载次数
sudo tune2fs -c 30 /dev/sdb1

# 设置检查间隔
sudo tune2fs -i 30d /dev/sdb1

4.4 xfs_admin - XFS 管理 #

bash
# 查看信息
sudo xfs_admin -l /dev/sdb1

# 修改卷标
sudo xfs_admin -L newlabel /dev/sdb1

# 设置 UUID
sudo xfs_admin -U generate /dev/sdb1

4.5 e2label - 修改卷标 #

bash
# 查看卷标
sudo e2label /dev/sdb1

# 设置卷标
sudo e2label /dev/sdb1 data

五、挂载管理 #

5.1 mount - 挂载文件系统 #

bash
# 挂载分区
sudo mount /dev/sdb1 /mnt/data

# 指定文件系统类型
sudo mount -t ext4 /dev/sdb1 /mnt/data

# 只读挂载
sudo mount -o ro /dev/sdb1 /mnt/data

# 读写挂载
sudo mount -o rw /dev/sdb1 /mnt/data

# 挂载 ISO 文件
sudo mount -o loop image.iso /mnt/iso

# 挂载网络共享
sudo mount -t cifs //server/share /mnt/share -o user=username

# 挂载 NFS
sudo mount -t nfs server:/share /mnt/nfs

# 查看已挂载
mount
mount | grep sdb1

5.2 umount - 卸载文件系统 #

bash
# 卸载
sudo umount /mnt/data

# 通过设备卸载
sudo umount /dev/sdb1

# 强制卸载
sudo umount -f /mnt/data

# 懒卸载(设备忙时)
sudo umount -l /mnt/data

5.3 /etc/fstab - 开机自动挂载 #

bash
# 编辑配置文件
sudo vim /etc/fstab

# 格式
# <device>    <mount>    <type>    <options>    <dump>    <fsck>

# 示例
/dev/sdb1    /mnt/data    ext4    defaults    0    2
UUID=xxx     /mnt/backup  ext4    defaults    0    2

# 常用选项
defaults    # 默认选项(rw,suid,dev,exec,auto,nouser,async)
noexec      # 不允许执行程序
nosuid      # 不允许 SUID
noatime     # 不更新访问时间
user        # 允许普通用户挂载
nofail      # 设备不存在时不报错

# 挂载所有
sudo mount -a

# 检查配置
sudo findmnt --verify

5.4 查找 UUID #

bash
# 查看设备 UUID
sudo blkid /dev/sdb1

# 或使用 lsblk
lsblk -f /dev/sdb1

六、交换分区管理 #

6.1 创建交换分区 #

bash
# 创建交换分区
sudo mkswap /dev/sdb2

# 启用交换分区
sudo swapon /dev/sdb2

# 禁用交换分区
sudo swapoff /dev/sdb2

# 查看交换分区
swapon -s
free -h

6.2 创建交换文件 #

bash
# 创建交换文件
sudo fallocate -l 2G /swapfile

# 设置权限
sudo chmod 600 /swapfile

# 格式化为交换分区
sudo mkswap /swapfile

# 启用
sudo swapon /swapfile

# 开机自动挂载
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

6.3 调整 swappiness #

bash
# 查看当前值
cat /proc/sys/vm/swappiness

# 临时修改
sudo sysctl vm.swappiness=10

# 永久修改
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf

七、磁盘配额 #

7.1 启用配额 #

bash
# 挂载时启用配额
sudo mount -o usrquota,grpquota /dev/sdb1 /mnt/data

# 或修改 /etc/fstab
/dev/sdb1    /mnt/data    ext4    defaults,usrquota,grpquota    0    2

# 重新挂载
sudo mount -o remount /mnt/data

7.2 创建配额文件 #

bash
# 创建配额文件
sudo quotacheck -cug /mnt/data

# 启用配额
sudo quotaon /mnt/data

# 禁用配额
sudo quotaoff /mnt/data

7.3 设置配额 #

bash
# 设置用户配额
sudo edquota -u username

# 设置组配额
sudo edquota -g groupname

# 设置宽限期
sudo edquota -t

# 复制配额设置
sudo edquota -p template_user new_user

7.4 查看配额 #

bash
# 查看用户配额
quota -u username

# 查看组配额
quota -g groupname

# 查看所有配额
sudo repquota /mnt/data

八、RAID 管理 #

8.1 mdadm - 创建 RAID #

bash
# 安装
sudo apt install mdadm

# 创建 RAID 0
sudo mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdb1 /dev/sdc1

# 创建 RAID 1
sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1

# 创建 RAID 5
sudo mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1

# 查看 RAID 状态
sudo mdadm --detail /dev/md0
cat /proc/mdstat

8.2 RAID 管理 #

bash
# 停止 RAID
sudo mdadm --stop /dev/md0

# 添加磁盘
sudo mdadm --add /dev/md0 /dev/sde1

# 移除磁盘
sudo mdadm --remove /dev/md0 /dev/sdb1

# 标记故障
sudo mdadm --fail /dev/md0 /dev/sdb1

九、LVM 逻辑卷管理 #

9.1 LVM 基本概念 #

  • PV(物理卷):物理磁盘或分区
  • VG(卷组):物理卷的集合
  • LV(逻辑卷):从卷组创建的逻辑分区

9.2 创建 LVM #

bash
# 创建物理卷
sudo pvcreate /dev/sdb1

# 创建卷组
sudo vgcreate vg_data /dev/sdb1

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

# 格式化
sudo mkfs.ext4 /dev/vg_data/lv_data

# 挂载
sudo mount /dev/vg_data/lv_data /mnt/data

9.3 LVM 管理 #

bash
# 查看物理卷
sudo pvdisplay
sudo pvs

# 查看卷组
sudo vgdisplay
sudo vgs

# 查看逻辑卷
sudo lvdisplay
sudo lvs

# 扩展逻辑卷
sudo lvextend -L +5G /dev/vg_data/lv_data
sudo resize2fs /dev/vg_data/lv_data

# 扩展卷组
sudo vgextend vg_data /dev/sdc1

# 缩小逻辑卷
sudo lvreduce -L -5G /dev/vg_data/lv_data

十、实践练习 #

10.1 练习一:磁盘查看 #

bash
# 1. 查看块设备
lsblk

# 2. 查看磁盘使用
df -h

# 3. 查看目录大小
du -sh /var

# 4. 查看分区信息
sudo fdisk -l

10.2 练习二:分区创建 #

bash
# 1. 创建分区(使用虚拟磁盘)
sudo fdisk /dev/sdb

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

# 3. 创建挂载点
sudo mkdir /mnt/test

# 4. 挂载分区
sudo mount /dev/sdb1 /mnt/test

# 5. 验证
df -h | grep sdb1

10.3 练习三:自动挂载 #

bash
# 1. 查看 UUID
sudo blkid /dev/sdb1

# 2. 编辑 fstab
sudo vim /etc/fstab

# 3. 添加行
# UUID=xxx /mnt/test ext4 defaults 0 2

# 4. 测试挂载
sudo umount /mnt/test
sudo mount -a

# 5. 验证
df -h | grep sdb1

10.4 练习四:交换分区 #

bash
# 1. 创建交换文件
sudo fallocate -l 1G /swapfile

# 2. 设置权限
sudo chmod 600 /swapfile

# 3. 格式化
sudo mkswap /swapfile

# 4. 启用
sudo swapon /swapfile

# 5. 验证
free -h

十一、小结 #

本章学习了 Linux 磁盘管理的核心命令,包括磁盘查看、分区、文件系统、挂载和高级存储管理。

关键要点:

  1. lsblkdf 用于查看磁盘信息
  2. fdisk/gdisk 用于磁盘分区
  3. mkfs 用于创建文件系统
  4. mount/umount 用于挂载管理
  5. /etc/fstab 配置开机自动挂载

下一章预告: 网络基础 - 学习网络配置和基础网络命令。

最后更新:2026-03-27