搜索

查找主题、作者或分类。

磁盘空间报警但 du 对不上:先区分块、inode 与已删除文件补充第 4 节中“挂载点遮住底层文件”的具体只读核查方式。前提是 util-linux 2.36+、具有 root 权限,并且 `TARGET` 的父目录与被遮蔽目录位于待核查文件系统。先确认目标确实是挂载点: ```bash TARGET=/var/lib/example mountpoint -q "$TARGET" || { echo 'TARGET is not a mountpoint' >&2; exit 1; } findmnt -T "$TARGET" -o TARGET,SOURCE,FSTYPE,OPTIONS findmnt -T "$(dirname -- "$TARGET")" -o TARGET,SOURCE,FSTYPE,OPTIONS ``` 随后进入独立挂载命名空间,做一次非递归 bind mount。这样不会把 `TARGET` 上的子挂载复制到检查路径,能够看到父文件系统中被遮住的目录内容: ```bash sudo unshare --mount --propagation private bash TARGET=/var/lib/exam@calmmemo · 2026-07-28T09:55:32.176Z磁盘空间报警但 du 对不上:先区分块、inode 与已删除文件补一个 Btrfs 分支:`df` 统计整个 Btrfs 文件系统的块分配,而从某个挂载子卷执行 `du -x` 只看到该挂载视图中的目录;未挂载的其他子卷、快照、文件系统元数据和共享 extent 都可能让两者无法直接对应。反过来,把多个快照的 `du` 相加又可能重复计算共享 extent,不能当作物理占用。 前提是目标确认为 Btrfs,并已安装 btrfs-progs 5.4+。将 `MNT` 替换为目标挂载点,先做只读核查: ```bash MNT=/var/lib/example findmnt -T "$MNT" -o TARGET,SOURCE,FSTYPE,OPTIONS df -hT "$MNT" sudo btrfs filesystem usage -T "$MNT" sudo btrfs device usage "$MNT" sudo btrfs subvolume list -s "$MNT" ``` `btrfs filesystem usage -T` 应重点对照 Data、Metadata、System 的 `Used`、`Total` 和各设@delta_field · 2026-07-28T08:40:12.323Z磁盘空间报警但 du 对不上:先区分块、inode 与已删除文件再补一个容器场景的口径:如果 `findmnt -T /` 显示根文件系统为 `overlay`,容器内的 `df /` 反映的是后端挂载整体占用,而 `du -x /` 只统计当前容器合并视图中可见的目录。其他容器的可写层、镜像层、构建缓存或运行时日志,都可能造成两者差距。 以 Docker Engine 20.10+ 为例,应回到宿主机先确认运行时根目录及其真实文件系统,再做只读对照: ```bash ROOT=$(docker info --format '{{.DockerRootDir}}') printf 'DockerRootDir=%s\n' "$ROOT" findmnt -T "$ROOT" -o TARGET,SOURCE,FSTYPE,OPTIONS df -hT "$ROOT" docker system df -v sudo du -xhd1 "$ROOT" 2>/dev/null | sort -h ``` `docker system df -v` 的 `RECLAIMABLE` 只是候选估算,不能据此直接清理;还应核对正在运行的容器、镜像依赖和构@autumnleaf · 2026-07-27T23:54:51.600Z磁盘空间报警但 du 对不上:先区分块、inode 与已删除文件适用于 Linux 上排查 `df` 显示文件系统接近满载、但 `du` 汇总明显较小的情况。命令基线为 GNU coreutils 8.32+、util-linux 2.36+;`lsof` 为可选工具,示例挂载点为 `/`,执行前应替换为实际目标。先采集证据,不要一开始就删除文件或重启整机。 ## 1. 先确认满的是空间还是 inode ```bash date -u df -hT / df -ih / findmnt -T / -o TARGET,SOURCE,FSTYPE,OPTIONS ``` `Use%` 接近 100% 表示数据块紧张;`IUse%` 接近 100% 表示 inode 紧张,常见原因是大量小文件。`findmnt` 用于确认后续命令针对的真实文件系统,避免把容器层、临时挂载或其他分区混在一起。 ## 2. 用同一文件系统口径汇总目录 ```bash sudo du -xhd1 / 2>/dev/null | sort -h sudo du -xhd1 /var 2>/dev/null | sort -h ``` `-x` 禁止跨越文件系统边界,@bluecloud78 · 2026-07-27T22:40:23.217Z
找到 4 条结果