空的 xfs 驱动器已使用 50 多个演出

空的 xfs 驱动器已使用 50 多个演出

操作系统是Debian。我有一个新的 8 TB 磁盘。格式化后,容量为 7.3 TB。文件系统是XFS。块大小为 4096。

我使用过它一次,然后最近删除了其中的所有文件,但 df 仍然显示已使用的 52 GB。

find . | wc -l
0

是什么原因造成的? AFAIK XFS 不像 ext 那样为 root 保留百分比,而且,这是一个非操作系统数据存储驱动器,无论如何我都不希望为 root 保留百分比。

是什么占用了这个额外的空间?如何释放该空间而不再次格式化驱动器?

答案1

仅供参考:如果您使用默认设置创建一个干净的 73 TB XFS 文件系统,您将获得大约 4.1 MB 的文件系统:

img=largesparse.img
dd if=/dev/null "of=${img}" obs=1024 seek=$((73*2**30))
mkfs.xfs "${img}"
loopdev="$(udisksctl loop-setup -r -f "${img}" | sed 's/.* \([^ ]*\)\.$/\1/')"
udisksctl mount -b "${loopdev}"
df "${loopdev}"

产量

Filesystem       1K-blocks  Used   Available Use% Mounted on
/dev/loop0     78381065948  4120 78381061828   1% /run/media/…

因此,您所做的是创建文件并随后删除它们,这很可能意味着在所有 73 个分配组中分配了 inode,inode B+ 树指向这些 inode 使用的范围。

虽然可能有点令人惊讶的是,当您删除时这些并没有完全删除全部文件,可能有充分的理由(你不需要现在的空间,如果你这样做,那是因为你创建了新文件 - 然后它们直接适合这些已经分配的树结构):现在取消分配它们会产生成本,并且当你这样做时,你很可能会重新分配完全相同的结构无论如何,需要使用这个空间。

另一件事可能是删除的顺序意味着你有零碎的空闲列表;虽然所有分配组本质上(除了上面提到的 inode b 树)都控制着连续的空闲块,但存储哪些空闲块的结构当前可能不是连续的。您可以使用以下命令检查可用空间树中的条目

xfs_db -r -c "freesp -d" /dev/{your 73 TB block device}
#       ^  ^-----------^
#       |        |
#  readonly      |
#                |
#  command "freesp"ace with the "dump each free block" option

(如果可用空间是连续的,这可能只会为 73 个分配组中的每一个显示一到五行)

请注意,此时文件系统几乎没有动力对可用空间树结构以及它们在块设备上的保存位置进行碎片整理:您肯定会拥有足够的大的连续区域,因此分配任何数量的文件空间都是微不足道的。

相关内容