Appearance
磁盘管理
本章将介绍 Linux 磁盘管理,包括磁盘分区、文件系统创建、挂载管理、LVM 逻辑卷管理以及磁盘配额等内容。
磁盘概述
存储设备命名
bash
# Linux 存储设备命名规则
# SATA/SAS/USB 硬盘
/dev/sda # 第一块硬盘
/dev/sdb # 第二块硬盘
/dev/sda1 # 第一块硬盘的第一个分区
# NVMe 硬盘
/dev/nvme0n1 # 第一块 NVMe 硬盘
/dev/nvme0n1p1 # 第一块 NVMe 硬盘的第一个分区
# 虚拟硬盘
/dev/vda # Virtio 虚拟硬盘
/dev/xvda # Xen 虚拟硬盘
# 查看块设备
lsblk
# 输出示例:
# NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
# sda 8:0 0 100G 0 disk
# ├─sda1 8:1 0 50G 0 part /
# └─sda2 8:2 0 50G 0 part /home
# 查看所有块设备
lsblk -a
# 显示文件系统类型
lsblk -f分区表类型
| 类型 | 说明 | 最大分区 | 最大磁盘 |
|---|---|---|---|
| MBR (MSDOS) | 传统分区表 | 4 个主分区或 3 主+1 扩展 | 2TB |
| GPT | GUID 分区表 | 128 个主分区 | 18EB |
磁盘分区
fdisk - MBR 分区工具
bash
# fdisk - MBR 分区工具
# 查看磁盘分区
sudo fdisk -l
sudo fdisk -l /dev/sda
# 进入分区模式
sudo fdisk /dev/sda
# fdisk 交互命令:
# m - 显示帮助
# p - 显示分区表
# n - 创建新分区
# d - 删除分区
# t - 修改分区类型
# l - 显示分区类型列表
# w - 保存并退出
# q - 不保存退出
# a - 设置启动标志
# 创建分区示例:
# 1. 输入 n 创建新分区
# 2. 选择 p(主分区)或 e(扩展分区)
# 3. 输入分区号
# 4. 输入起始扇区(默认即可)
# 5. 输入结束扇区或大小(如 +50G)
# 6. 输入 w 保存
# 常用分区类型:
# 83 - Linux
# 82 - Linux swap
# 8e - Linux LVM
# fd - Linux RAID
# 非交互式创建分区
sudo fdisk /dev/sda << EOF
n
p
1
+50G
w
EOFgdisk - GPT 分区工具
bash
# gdisk - GPT 分区工具
# 查看磁盘分区
sudo gdisk -l /dev/sda
# 进入分区模式
sudo gdisk /dev/sda
# gdisk 交互命令:
# ? - 显示帮助
# p - 显示分区表
# n - 创建新分区
# d - 删除分区
# t - 修改分区类型
# l - 显示分区类型列表
# w - 保存并退出
# q - 不保存退出
# 常用 GPT 分区类型:
# 8300 - Linux filesystem
# 8200 - Linux swap
# 8e00 - Linux LVM
# fd00 - Linux RAID
# ef00 - EFI System Partition
# ef02 - BIOS boot partitionparted - 高级分区工具
bash
# parted - 支持多种分区表的分区工具
# 查看分区
sudo parted -l
sudo parted /dev/sda print
# 创建 GPT 分区表
sudo parted /dev/sda mklabel gpt
# 创建 MBR 分区表
sudo parted /dev/sda mklabel msdos
# 创建分区
sudo parted /dev/sda mkpart primary ext4 1MiB 50GiB
sudo parted /dev/sda mkpart primary linux-swap 50GiB 58GiB
sudo parted /dev/sda mkpart primary ext4 58GiB 100%
# 删除分区
sudo parted /dev/sda rm 1
# 设置启动标志
sudo parted /dev/sda set 1 boot on
# 查看剩余空间
sudo parted /dev/sda print free
# 调整分区大小
sudo parted /dev/sda resizepart 1 100GB
# 非交互式操作
sudo parted -s /dev/sda mklabel gpt
sudo parted -s /dev/sda mkpart primary ext4 0% 100%文件系统
常见文件系统
| 文件系统 | 说明 | 最大文件 | 最大文件系统 |
|---|---|---|---|
| ext4 | Linux 默认 | 16TB | 1EB |
| XFS | 高性能、大文件 | 8EB | 8EB |
| Btrfs | 现代、快照、压缩 | 16EB | 16EB |
| NTFS | Windows 兼容 | 16TB | 256TB |
| FAT32 | 跨平台兼容 | 4GB | 2TB |
mkfs - 创建文件系统
bash
# mkfs - 创建文件系统
# 创建 ext4 文件系统
sudo mkfs.ext4 /dev/sda1
sudo mkfs -t ext4 /dev/sda1
# 创建 XFS 文件系统
sudo mkfs.xfs /dev/sda1
# 创建 Btrfs 文件系统
sudo mkfs.btrfs /dev/sda1
# 创建 ext4 时指定参数
sudo mkfs.ext4 -L "data" -b 4096 /dev/sda1
# -L: 卷标
# -b: 块大小
# 创建交换分区
sudo mkswap /dev/sda2
# 启用交换分区
sudo swapon /dev/sda2
# 禁用交换分区
sudo swapoff /dev/sda2
# 查看交换分区
swapon -s文件系统检查
bash
# fsck - 文件系统检查
# 检查文件系统(需要先卸载)
sudo umount /dev/sda1
sudo fsck /dev/sda1
# 检查并自动修复
sudo fsck -y /dev/sda1
# 强制检查
sudo fsck -f /dev/sda1
# 检查特定文件系统
sudo fsck.ext4 /dev/sda1
sudo fsck.xfs /dev/sda1
# 查看文件系统信息
sudo dumpe2fs /dev/sda1 | head -20
sudo xfs_info /dev/sda1
# 调整 ext4 参数
sudo tune2fs -l /dev/sda1 # 查看参数
sudo tune2fs -L "newlabel" /dev/sda1 # 修改卷标
sudo tune2fs -c 50 /dev/sda1 # 设置最大挂载次数
sudo tune2fs -i 30d /dev/sda1 # 设置检查间隔挂载管理
mount - 挂载文件系统
bash
# mount - 挂载文件系统
# 基本挂载
sudo mount /dev/sda1 /mnt
# 指定文件系统类型
sudo mount -t ext4 /dev/sda1 /mnt
# 指定挂载选项
sudo mount -o rw,noatime /dev/sda1 /mnt
# 只读挂载
sudo mount -o ro /dev/sda1 /mnt
# 挂载 ISO 文件
sudo mount -o loop ubuntu.iso /mnt/iso
# 挂载 NFS 共享
sudo mount -t nfs 192.168.1.100:/share /mnt/nfs
# 挂载 CIFS/SMB 共享
sudo mount -t cifs //192.168.1.100/share /mnt/smb -o user=username
# 挂载 tmpfs(内存文件系统)
sudo mount -t tmpfs -o size=1G tmpfs /mnt/tmp
# 绑定挂载
sudo mount --bind /source /dest
# 查看已挂载的文件系统
mount
df -h
# 查看挂载点
findmntumount - 卸载文件系统
bash
# umount - 卸载文件系统
# 卸载
sudo umount /mnt
sudo umount /dev/sda1
# 强制卸载(危险)
sudo umount -f /mnt
# 延迟卸载
sudo umount -l /mnt
# 查看占用挂载点的进程
sudo lsof /mnt
sudo fuser -v /mnt
# 终止占用进程后卸载
sudo fuser -km /mnt
sudo umount /mnt/etc/fstab 配置
bash
# /etc/fstab - 开机自动挂载配置
# 查看配置
cat /etc/fstab
# 格式:
# <设备> <挂载点> <文件系统> <选项> <dump> <fsck>
# 示例:
# /dev/sda1 / ext4 defaults,noatime 0 1
# /dev/sda2 /home ext4 defaults 0 2
# /dev/sda3 swap swap defaults 0 0
# UUID=xxx /data ext4 defaults 0 2
# 常用挂载选项:
# defaults - 默认选项(rw, suid, dev, exec, auto, nouser, async)
# rw/ro - 读写/只读
# noatime - 不更新访问时间(提高性能)
# nodiratime - 不更新目录访问时间
# sync/async - 同步/异步 I/O
# noexec - 不允许执行程序
# nosuid - 禁用 SUID/SGID
# user - 允许普通用户挂载
# noauto - 不自动挂载
# dump 字段:是否被 dump 备份(0 或 1)
# fsck 字段:启动时 fsck 检查顺序(0 不检查,1 根分区,2 其他分区)
# 获取 UUID
sudo blkid /dev/sda1
lsblk -f
# 挂载所有 fstab 中的文件系统
sudo mount -a
# 卸载所有 fstab 中的文件系统
sudo umount -a
# 重新挂载
sudo mount -o remount,rw /mnt
# 验证 fstab 配置
sudo findmnt --verifyLVM 逻辑卷管理
LVM 概念
mermaid
graph TD
A[物理磁盘 /dev/sda] --> B[物理卷 PV]
C[物理磁盘 /dev/sdb] --> D[物理卷 PV]
B --> E[卷组 VG]
D --> E
E --> F[逻辑卷 LV1]
E --> G[逻辑卷 LV2]
F --> H[文件系统]
G --> I[文件系统]物理卷管理
bash
# 创建物理卷
sudo pvcreate /dev/sdb
sudo pvcreate /dev/sdb /dev/sdc
# 查看物理卷
sudo pvdisplay
sudo pvs
# 查看物理卷详细信息
sudo pvdisplay /dev/sdb
# 删除物理卷
sudo pvremove /dev/sdb
# 移动物理卷数据
sudo pvmove /dev/sdb /dev/sdc卷组管理
bash
# 创建卷组
sudo vgcreate vg01 /dev/sdb /dev/sdc
# 查看卷组
sudo vgdisplay
sudo vgs
# 扩展卷组
sudo vgextend vg01 /dev/sdd
# 缩小卷组
sudo vgreduce vg01 /dev/sdb
# 删除卷组
sudo vgremove vg01
# 重命名卷组
sudo vgrename vg01 vg02逻辑卷管理
bash
# 创建逻辑卷
sudo lvcreate -L 50G -n lv01 vg01 # 指定大小
sudo lvcreate -l 100%FREE -n lv02 vg01 # 使用全部剩余空间
# 查看逻辑卷
sudo lvdisplay
sudo lvs
# 扩展逻辑卷
sudo lvextend -L +10G /dev/vg01/lv01 # 增加 10G
sudo lvextend -L 60G /dev/vg01/lv01 # 扩展到 60G
sudo lvextend -l +100%FREE /dev/vg01/lv01 # 使用全部剩余空间
# 扩展文件系统
sudo resize2fs /dev/vg01/lv01 # ext4
sudo xfs_growfs /mount/point # XFS
# 缩小逻辑卷(需要先缩小文件系统)
sudo umount /dev/vg01/lv01
sudo e2fsck -f /dev/vg01/lv01
sudo resize2fs /dev/vg01/lv01 40G
sudo lvreduce -L 40G /dev/vg01/lv01
# 删除逻辑卷
sudo lvremove /dev/vg01/lv01
# 创建快照
sudo lvcreate -L 10G -s -n lv01_snap /dev/vg01/lv01
# 恢复快照
sudo lvconvert --merge /dev/vg01/lv01_snap
# LVM 完整示例
# 1. 创建物理卷
sudo pvcreate /dev/sdb
# 2. 创建卷组
sudo vgcreate vg_data /dev/sdb
# 3. 创建逻辑卷
sudo lvcreate -L 100G -n lv_data vg_data
# 4. 创建文件系统
sudo mkfs.ext4 /dev/vg_data/lv_data
# 5. 挂载
sudo mkdir /data
sudo mount /dev/vg_data/lv_data /data
# 6. 添加到 fstab
echo '/dev/vg_data/lv_data /data ext4 defaults 0 2' | sudo tee -a /etc/fstab磁盘配额
启用配额
bash
# 安装配额工具
sudo apt install quota # Debian/Ubuntu
sudo dnf install quota # RHEL/CentOS
# 启用配额(在 /etc/fstab 中添加选项)
# /dev/sda1 /home ext4 defaults,usrquota,grpquota 0 2
# 重新挂载
sudo mount -o remount /home
# 创建配额文件
sudo quotacheck -cug /home
sudo quotacheck -augv
# 启用配额
sudo quotaon /home
# 禁用配额
sudo quotaoff /home设置配额
bash
# edquota - 编辑用户配额
sudo edquota -u username
# 配额文件格式:
# Filesystem blocks soft hard inodes soft hard
# /dev/sda1 1000 50000 60000 100 5000 6000
# blocks/inodes - 当前使用量
# soft - 软限制(超过后警告)
# hard - 硬限制(绝对上限)
# 编辑组配额
sudo edquota -g groupname
# 设置宽限期
sudo edquota -t
# 复制配额设置
sudo edquota -p user1 user2
# 查看配额
sudo repquota /home
sudo repquota -a
# 查看用户配额
quota -u username磁盘监控
df - 磁盘使用情况
bash
# df - 查看文件系统磁盘使用情况
# 基本用法
df
# 人类可读格式
df -h
# 显示文件系统类型
df -T
# 显示 inode 使用情况
df -i
# 只显示指定类型
df -t ext4
# 排除指定类型
df -x tmpfs
# 显示完整信息
df -a
# 指定显示字段
df --output=source,target,size,used,availdu - 目录大小
bash
# du - 查看目录或文件大小
# 查看当前目录大小
du -sh .
# 查看子目录大小
du -h --max-depth=1
# 按大小排序
du -h --max-depth=1 | sort -h
# 查看指定目录
du -sh /home/*
# 显示所有文件
du -ah /path
# 排除某些目录
du -sh --exclude="*.log" /var
# 统计总大小
du -csh /home/*
# 查看最大的 10 个目录
du -h --max-depth=1 / | sort -hr | head -10iostat - I/O 统计
bash
# iostat - I/O 统计(需要安装 sysstat)
# 安装
sudo apt install sysstat
# 查看 I/O 统计
iostat
# 每 2 秒刷新
iostat 2
# 显示扩展统计
iostat -x
# 只显示磁盘
iostat -d
# 只显示 CPU
iostat -c
# 指定设备
iostat -x /dev/sda
# 输出解释:
# tps - 每秒传输次数
# kB_read/s - 每秒读取 KB
# kB_wrtn/s - 每秒写入 KB
# kB_read - 总读取 KB
# kB_wrtn - 总写入 KBiotop - I/O 监控
bash
# iotop - 交互式 I/O 监控
# 安装
sudo apt install iotop
# 启动
sudo iotop
# 只显示有 I/O 的进程
sudo iotop -o
# 只显示进程(不显示线程)
sudo iotop -P
# 非交互模式
sudo iotop -b -n 1
# 按用户过滤
sudo iotop -u username
# 快捷键:
# 左右箭头 - 排序
# r - 反向排序
# o - 只显示有 I/O 的进程
# p - 进程/线程切换
# a - 累计 I/O
# q - 退出小结
本章介绍了 Linux 磁盘管理:
| 内容 | 命令 | 功能 |
|---|---|---|
| 分区 | fdisk, gdisk, parted | 磁盘分区 |
| 文件系统 | mkfs, fsck | 创建和检查文件系统 |
| 挂载 | mount, umount | 挂载和卸载文件系统 |
| LVM | pvcreate, vgcreate, lvcreate | 逻辑卷管理 |
| 配额 | quota, edquota | 磁盘配额管理 |
| 监控 | df, du, iostat, iotop | 磁盘使用监控 |
常用命令速查
bash
# 分区
sudo fdisk -l # 查看分区
sudo fdisk /dev/sda # 分区操作
# 文件系统
sudo mkfs.ext4 /dev/sda1 # 创建文件系统
sudo fsck /dev/sda1 # 检查文件系统
# 挂载
sudo mount /dev/sda1 /mnt # 挂载
sudo umount /mnt # 卸载
# LVM
sudo pvcreate /dev/sdb # 创建物理卷
sudo vgcreate vg01 /dev/sdb # 创建卷组
sudo lvcreate -L 50G -n lv01 vg01 # 创建逻辑卷
# 监控
df -h # 磁盘使用
du -sh * # 目录大小下一步
下一章我们将学习 网络配置,了解 Linux 网络配置和管理。
