本页目录

磁盘操作手册

查看

# 块设备树 (含大小、类型、挂载点、UUID)
lsblk -f
# NAME   FSTYPE FSVER LABEL UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
# sda
# ├─sda1 ext4   1.0         abc123-def456                        50G     30%    /
# └─sda2 swap   1           fed987                                                       [SWAP]

df -h                                   # 文件系统使用率
df -i                                   # inode 使用率 (inode 耗尽 = 不能创建文件)
du -sh /path                            # 目录/文件占多少
du -sh * | sort -rh | head -10          # 当前目录下谁最大

# 现代替代
duf                                    # 彩色 df, 自动过滤 loop/tmpfs
dust                                   # 树状 du, 自动排序
dust -d 2                              # 深度限制 2 层
ncdu /                                 # 交互式 du (方向键导航, d 删除)

# 文件搜索与导航
fd pattern                             # 替代 find: 按文件名搜索 (默认 regex, 忽略 .gitignore)
fd -e rs                               # 按扩展名
rg pattern                             # 替代 grep -r: 搜索文件内容
rg -t py pattern                       # 按文件类型 (py, js, md...)
rg -l pattern                          # 只列文件名
bat file                               # 替代 cat: 语法高亮 + 行号 + Git diff 标记
z dirname                              # zoxide: 跳转到最近访问过的匹配目录 (替代 cd)
fzf                                    # 模糊查找: Ctrl+T 搜文件, Ctrl+R 搜历史

fdisk -l                                # MBR 分区表
gdisk -l                                # GPT 分区表
blkid                                   # 所有设备的 UUID + FS 类型

# SMART 健康 (硬盘自检)
smartctl -a /dev/nvme0n1                # NVMe: Percentage Used, Data Units Written
smartctl -a /dev/sda                    # SATA: Reallocated_Sector_Ct, Pending_Sector
smartctl -t short /dev/sda              # 触发短测试 (2-5 分钟)
smartctl -l selftest /dev/sda           # 查看测试结果

分区与格式化

# GPT 分区 (推荐, 支持 >2TB)
gdisk /dev/sda
  n  → 新建分区
  t  → 改分区类型 (8300 = Linux filesystem, 8200 = swap)
  w  → 写入

mkfs.ext4 /dev/sda1                     # 格式化 ext4
mkfs.ext4 -L mylabel /dev/sda1          # 带 label (label 替代 UUID 挂载)
mkswap /dev/sda2
swapon /dev/sda2

挂载

mount /dev/sda1 /mnt/data
umount /mnt/data
umount -l /mnt/data                     # lazy umount (等所有进程释放引用后自动卸载)

# fstab 持久化 (用 UUID 而非 /dev/sdX, 后者设备名可能漂移)
lsblk -f                                # 获取 UUID
# /etc/fstab:
UUID=abc123-def456 /mnt/data ext4 defaults,noatime 0 2
# noatime: 读文件时不更新访问时间 (SSD 减少写入)
# 0: dump 备份 (默认关闭)
# 2: fsck 优先级 (0=不检查, 1=root, 2=其他)

# 测试 fstab (不重启)
mount -a                                # 挂载 fstab 中所有
systemctl daemon-reload

LVM

pvcreate /dev/sda4                      # 物理卷
vgcreate vg0 /dev/sda4                  # 卷组
lvcreate -L 10G -n lv0 vg0              # 逻辑卷 (10G)
lvcreate -l +100%FREE -n lv0 vg0        # 用剩余全部空间

lvextend -L +5G /dev/vg0/lv0            # 扩大 LV
resize2fs /dev/vg0/lv0                  # 扩大文件系统 (ext4)

pvs / vgs / lvs                         # 状态查看
lvremove /dev/vg0/lv0                   # 删除 LV (数据丢失!)

fstrim (SSD 定期 discard)

fstrim -v /                             # 手动 trim (回收已删除块)
systemctl enable fstrim.timer           # 自动每周 trim
systemctl status fstrim.timer

故障排查

# IO 错误
dmesg | grep -i "I/O error"
# → 磁盘可能坏道 → smartctl -a 检查

# 实时 IO 监控
iostat -x 1                             # await (延迟), %util (利用率)
cat /proc/diskstats                      # 累计 IO 计数

# 文件系统只读 (remounted read-only)
# → 通常是 FS 检测到不一致 → 需要 fsck
dmesg | grep -i "remounted.*read-only"
fsck -n /dev/sda1                       # 只检查不修复 (需要 umount)
fsck /dev/sda1                          # 检查并修复 (必须 umount!)