Appearance
磁盘管理
磁盘分区
fdisk - MBR 分区工具
bash
fdisk -l # 列出所有分区
fdisk -l /dev/sda # 列出指定磁盘分区
fdisk /dev/sda # 分区操作fdisk 交互命令:
| 命令 | 功能 |
|---|---|
| m | 帮助 |
| p | 打印分区表 |
| n | 新建分区 |
| d | 删除分区 |
| t | 修改分区类型 |
| l | 列出分区类型 |
| w | 保存并退出 |
| q | 不保存退出 |
gdisk - GPT 分区工具
bash
gdisk -l /dev/sda # 列出分区
gdisk /dev/sda # 分区操作gdisk 交互命令:
| 命令 | 功能 |
|---|---|
| ? | 帮助 |
| p | 打印分区表 |
| n | 新建分区 |
| d | 删除分区 |
| t | 修改分区类型 |
| l | 列出分区类型 |
| w | 保存并退出 |
| q | 不保存退出 |
parted - 分区工具
bash
parted -l # 列出所有分区
parted /dev/sda print # 打印分区表
parted /dev/sda # 交互模式非交互模式:
bash
parted /dev/sda mklabel gpt # 创建 GPT 分区表
parted /dev/sda mklabel msdos # 创建 MBR 分区表
parted /dev/sda mkpart primary ext4 1MiB 100GiB # 创建分区
parted /dev/sda mkpart primary 100GiB 200GiB # 创建分区
parted /dev/sda rm 1 # 删除分区
parted /dev/sda set 1 boot on # 设置启动标志
parted /dev/sda resizepart 1 150GiB # 调整分区大小分区类型代码
MBR 分区类型:
| 代码 | 类型 |
|---|---|
| 83 | Linux |
| 82 | Linux Swap |
| 8e | Linux LVM |
| fd | Linux RAID |
| 07 | NTFS |
GPT 分区类型:
| 代码 | 类型 |
|---|---|
| 8300 | Linux filesystem |
| 8200 | Linux swap |
| 8e00 | Linux LVM |
| fd00 | Linux RAID |
| ef00 | EFI System Partition |
文件系统
mkfs - 创建文件系统
bash
mkfs.ext4 /dev/sda1 # 创建 ext4 文件系统
mkfs -t ext4 /dev/sda1 # 同上
mkfs.xfs /dev/sda1 # 创建 XFS 文件系统
mkfs.btrfs /dev/sda1 # 创建 Btrfs 文件系统
mkfs.vfat /dev/sda1 # 创建 FAT32
mkfs.ntfs /dev/sda1 # 创建 NTFS
mke2fs -t ext4 /dev/sda1 # 创建 ext4
mke2fs -t ext4 -L data /dev/sda1 # 设置卷标
mke2fs -t ext4 -b 4096 /dev/sda1 # 设置块大小mkswap - 创建交换分区
bash
mkswap /dev/sda2 # 创建交换分区
swapon /dev/sda2 # 启用交换分区
swapoff /dev/sda2 # 禁用交换分区
swapon -a # 启用所有交换分区
swapoff -a # 禁用所有交换分区
swapon -s # 查看交换分区状态
cat /proc/swaps # 查看交换分区文件系统特性对比
| 特性 | ext4 | XFS | Btrfs |
|---|---|---|---|
| 最大文件 | 16TB | 8EB | 16EB |
| 最大卷 | 1EB | 8EB | 16EB |
| 日志 | 是 | 是 | 是 |
| 快照 | 否 | 否 | 是 |
| 压缩 | 否 | 否 | 是 |
| 在线扩展 | 是 | 是 | 是 |
| 在线缩小 | 是 | 否 | 是 |
挂载管理
mount - 挂载文件系统
bash
mount # 查看已挂载
mount /dev/sda1 /mnt # 挂载分区
mount -t ext4 /dev/sda1 /mnt # 指定文件系统类型
mount -o ro /dev/sda1 /mnt # 只读挂载
mount -o rw /dev/sda1 /mnt # 读写挂载
mount -o noexec /dev/sda1 /mnt # 禁止执行
mount -o nosuid /dev/sda1 /mnt # 禁用 SUID
mount -o nodev /dev/sda1 /mnt # 禁用设备文件
mount -o remount,rw /mnt # 重新挂载
mount -a # 挂载所有
mount --bind /old /new # 绑定挂载
mount -o loop disk.iso /mnt # 挂载 ISOumount - 卸载文件系统
bash
umount /mnt # 卸载
umount /dev/sda1 # 卸载
umount -l /mnt # 懒卸载
umount -f /mnt # 强制卸载
umount -a # 卸载所有查看挂载信息
bash
mount # 查看挂载
df -h # 磁盘使用
findmnt # 挂载树
findmnt /dev/sda1 # 指定设备
lsblk # 块设备
lsblk -f # 显示文件系统
cat /etc/mtab # 挂载表
cat /proc/mounts # 挂载信息/etc/fstab 配置
# <device> <mount> <type> <options> <dump> <fsck>
/dev/sda1 / ext4 defaults 0 1
/dev/sda2 swap swap defaults 0 0
/dev/sda3 /data ext4 defaults 0 2
UUID=xxx /home ext4 defaults 0 2字段说明:
- device: 设备名、UUID 或 LABEL
- mount: 挂载点
- type: 文件系统类型
- options: 挂载选项
- dump: dump 备份标志
- fsck: fsck 检查顺序
常用挂载选项:
| 选项 | 说明 |
|---|---|
| defaults | rw,suid,dev,exec,auto,nouser,async |
| rw/ro | 读写/只读 |
| exec/noexec | 允许/禁止执行 |
| suid/nosuid | 允许/禁止 SUID |
| auto/noauto | 自动/手动挂载 |
| user/nouser | 允许/禁止用户挂载 |
| sync/async | 同步/异步 I/O |
| noatime | 不更新访问时间 |
| nodiratime | 不更新目录访问时间 |
| data=ordered | 数据写入顺序 |
使用 UUID 挂载:
bash
blkid /dev/sda1 # 查看 UUID
UUID=xxx-xxx /data ext4 defaults 0 2磁盘空间管理
df - 磁盘空间
bash
df # 显示磁盘使用
df -h # 人类可读格式
df -T # 显示文件系统类型
df -i # 显示 inode 使用
df -x tmpfs # 排除文件系统
df --total # 显示总计
df /path # 指定路径du - 目录大小
bash
du # 显示目录大小
du -h # 人类可读格式
du -sh /path # 显示总大小
du -h --max-depth=1 # 显示一层深度
du -ah # 显示所有文件
du -sh * # 当前目录各文件大小
du -h --exclude="*.log" # 排除文件
du -h --time # 显示修改时间
du -sh --apparent-size # 实际大小ncdu - 磁盘使用分析
bash
ncdu # 分析当前目录
ncdu /path # 分析指定目录
ncdu -x / # 不跨文件系统
ncdu --exclude "*.log" # 排除文件LVM 逻辑卷管理
LVM 架构
┌─────────────────────────────────────────┐
│ Logical Volume (LV) │
│ /dev/vg0/lv0 │
├─────────────────────────────────────────┤
│ Volume Group (VG) │
│ vg0 │
├───────────────┬───────────────┬─────────┤
│ Physical │ Physical │ Physical│
│ Volume (PV) │ Volume (PV) │ Volume │
│ /dev/sda1 │ /dev/sdb1 │ /dev/sdc1│
└───────────────┴───────────────┴─────────┘PV 物理卷管理
bash
pvcreate /dev/sda1 # 创建物理卷
pvcreate /dev/sda1 /dev/sdb1 # 创建多个
pvdisplay # 显示物理卷
pvdisplay /dev/sda1 # 显示指定
pvs # 简要显示
pvscan # 扫描物理卷
pvremove /dev/sda1 # 删除物理卷
pvmove /dev/sda1 # 移动数据VG 卷组管理
bash
vgcreate vg0 /dev/sda1 # 创建卷组
vgcreate vg0 /dev/sda1 /dev/sdb1 # 使用多个 PV
vgcreate -s 16M vg0 /dev/sda1 # 指定 PE 大小
vgdisplay # 显示卷组
vgdisplay vg0 # 显示指定
vgs # 简要显示
vgscan # 扫描卷组
vgextend vg0 /dev/sdc1 # 扩展卷组
vgreduce vg0 /dev/sda1 # 缩减卷组
vgremove vg0 # 删除卷组
vgrename vg0 newvg # 重命名LV 逻辑卷管理
bash
lvcreate -L 10G -n lv0 vg0 # 创建 10G 逻辑卷
lvcreate -l 100%FREE -n lv0 vg0 # 使用所有空间
lvcreate -L 10G -n lv0 -T vg0 # 创建精简池
lvcreate -V 5G -T vg0/lv0 -n thin1 # 创建精简卷
lvdisplay # 显示逻辑卷
lvdisplay /dev/vg0/lv0 # 显示指定
lvs # 简要显示
lvscan # 扫描逻辑卷
lvextend -L +5G /dev/vg0/lv0 # 扩展 5G
lvextend -l +100%FREE /dev/vg0/lv0 # 扩展所有空间
lvextend -L 20G /dev/vg0/lv0 # 扩展到 20G
lvreduce -L -5G /dev/vg0/lv0 # 缩减 5G
lvremove /dev/vg0/lv0 # 删除逻辑卷
lvrename vg0 lv0 newlv # 重命名扩展文件系统:
bash
lvextend -L +5G /dev/vg0/lv0 && resize2fs /dev/vg0/lv0 # ext4
lvextend -L +5G /dev/vg0/lv0 && xfs_growfs /data # XFS
lvextend -r -L +5G /dev/vg0/lv0 # 自动扩展文件系统磁盘阵列 RAID
mdadm - 软件 RAID
bash
mdadm --detail /dev/md0 # 查看 RAID 信息
cat /proc/mdstat # 查看 RAID 状态创建 RAID:
bash
mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sda1 /dev/sdb1 # RAID 0
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1 # RAID 1
mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sda1 /dev/sdb1 /dev/sdc1 # RAID 5
mdadm --create /dev/md0 --level=6 --raid-devices=4 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1 # RAID 6
mdadm --create /dev/md0 --level=10 --raid-devices=4 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1 # RAID 10RAID 管理:
bash
mdadm --add /dev/md0 /dev/sde1 # 添加磁盘
mdadm --remove /dev/md0 /dev/sda1 # 移除磁盘
mdadm --fail /dev/md0 /dev/sda1 # 标记故障
mdadm --grow /dev/md0 --raid-devices=4 # 扩展设备数
mdadm --stop /dev/md0 # 停止 RAID
mdadm --assemble /dev/md0 # 组装 RAID
mdadm --assemble --scan # 扫描组装保存配置:
bash
mdadm --detail --scan >> /etc/mdadm.confRAID 级别对比
| 级别 | 最少磁盘 | 冗余 | 容量利用率 | 性能 |
|---|---|---|---|---|
| RAID 0 | 2 | 无 | 100% | 最高 |
| RAID 1 | 2 | 有 | 50% | 读高 |
| RAID 5 | 3 | 有 | (n-1)/n | 中等 |
| RAID 6 | 4 | 有 | (n-2)/n | 中等 |
| RAID 10 | 4 | 有 | 50% | 高 |
磁盘健康检查
smartctl - SMART 监控
bash
smartctl -a /dev/sda # 显示所有信息
smartctl -H /dev/sda # 健康状态
smartctl -i /dev/sda # 设备信息
smartctl -c /dev/sda # 能力信息
smartctl -A /dev/sda # 属性信息
smartctl -l error /dev/sda # 错误日志
smartctl -l selftest /dev/sda # 自检日志
smartctl -t short /dev/sda # 短自检
smartctl -t long /dev/sda # 长自检
smartctl -X /dev/sda # 中止自检
smartctl -s on /dev/sda # 启用 SMARTbadblocks - 坏块检测
bash
badblocks -v /dev/sda # 只读检测
badblocks -n /dev/sda # 非破坏性读写检测
badblocks -w /dev/sda # 破坏性写检测
badblocks -v /dev/sda > bad.txt # 保存结果
badblocks -v -s /dev/sda # 显示进度文件系统检查与修复
fsck - 文件系统检查
bash
fsck /dev/sda1 # 检查文件系统
fsck -y /dev/sda1 # 自动修复
fsck -n /dev/sda1 # 只检查不修复
fsck -f /dev/sda1 # 强制检查
fsck -t ext4 /dev/sda1 # 指定类型
fsck -A # 检查所有
fsck -R -A # 排除根分区
e2fsck /dev/sda1 # ext2/3/4 检查
xfs_repair /dev/sda1 # XFS 修复
btrfs check /dev/sda1 # Btrfs 检查磁盘性能测试
hdparm - 磁盘参数
bash
hdparm -I /dev/sda # 显示信息
hdparm -t /dev/sda # 读取测试
hdparm -T /dev/sda # 缓存读取测试
hdparm -tT /dev/sda # 组合测试
hdparm -i /dev/sda # 内部信息fio - I/O 性能测试
bash
fio --name=randread --ioengine=libaio --iodepth=16 --rw=randread --bs=4k --direct=1 --size=1G --numjobs=4 --runtime=60 --filename=/dev/sda
fio --name=randwrite --ioengine=libaio --iodepth=16 --rw=randwrite --bs=4k --direct=1 --size=1G --numjobs=4 --runtime=60 --filename=/dev/sdadd - 简单测试
bash
dd if=/dev/zero of=test bs=1M count=1000 conv=fdatasync # 写测试
dd if=test of=/dev/null bs=1M # 读测试
dd if=/dev/zero of=test bs=1M count=1000 oflag=direct # 直接 I/O