磁盘管理 #
一、磁盘基础概念 #
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 磁盘管理的核心命令,包括磁盘查看、分区、文件系统、挂载和高级存储管理。
关键要点:
lsblk和df用于查看磁盘信息fdisk/gdisk用于磁盘分区mkfs用于创建文件系统mount/umount用于挂载管理/etc/fstab配置开机自动挂载
下一章预告: 网络基础 - 学习网络配置和基础网络命令。
最后更新:2026-03-27