ZFS 文件系统上的可用空间意外丢失

ZFS 文件系统上的可用空间意外丢失

我将彻底重新措辞这个问题,因为几个月后它仍然是一个悬而未决的生产问题。

我有一个基于 FreeBSD 7.3-RELEASE-p1 的 FreeNAS 0.7.2 盒子,在 RAIDz1 中运行 ZFS 和 4x1TB SATA 驱动器。

在创建和删除 1TB 稀疏文件后,我似乎丢失了 1TB 的可用空间。这是几个月前发生的事。

下表列出了当前的情况。

command         actual             expected           ok/not ok

du -c           1.47TB used        1.47TB used        ok

zfs list        used 2.48TB        used 1.47TB        not ok
                avail 206GB        avail 1.2TB        not ok

zpool list      size 3.64TB        size 3.64TB        ok
                used 3.31TB        used 1.95TB        not ok
                avail 334GB        avail 1.69TB       not ok

Windows right   Disk size 2.67TB   Disk size 2.67TB   ok
  click disk,   Used 2.47TB        Used 1.47          not ok
  properties    free 206GB         free 1.2TB         not ok

Windows select  total file size    total file size
  all files,      1.48TB             1.48TB           ok
  right click, 
  properties
  • 池中任何地方均无快照
  • 压缩已关闭
  • 重复数据删除已关闭
  • ZFS 池版本为 13
  • ZFS FS 版本为 3
  • 使用 FreeNAS 的“嵌入式”版本
  • 文件是使用 dd 使用 /dev/zero 作为输入创建的,使用 rm 删除的,全部以 root 身份执行
  • 文件确实已被删除
  • Windows 可以通过 SMB 查看文件夹
  • Windows 版本是 7
  • 不确定如何确定下面回答者所建议的错误是否已在我使用的 FreeBSD 中的 ZFS 池和 FS 版本中得到解决

问任何你想问的问题,我可以从任何地方得到有关盒子的外壳。

非常感谢任何建议或想法。汤姆

答案1

解决方案最终通过 zfs-discuss 邮件列表找到 -这个帖子

看起来输出zfs list -t snapshot在某个时候发生了变化,并且有一个隐藏的快照消耗了额外的空间:

There was a change where snapshots are no longer shown by default.
This can be configured back to the old behaviour setting the zpool 
"listsnapshots" property to "on"

Otherwise, you need to use the "-t snapshot" list.

But, a much better method of tracking this down is to use: 
    zfs list -o space

That will show the accounting for all dataset objects.
 -- richard

认为即使过了这么久,也值得在这里发布它并将其标记为答案。

答案2

listsnapshots是一个属性,它仅控制默认输出是否zfs list显示快照。它不“启用或禁用快照”。

要列出包括快照在内的所有内容,请使用以下命令:

zfs list -t all

要仅列出快照,请使用以下命令:

zfs list -t snapshot

编辑:你可能遇到过这个 ZFS 错误。要确认此错误是否是原因,请使用非稀疏文件重试。此错误应该只发生在大型稀疏文件中,例如由mkfile或通过从 复制而创建的文件/dev/zero

这个错误已经在 Solaris 中修复,但它可能仍然存在于您正在使用的 FreeBSD 版本中。

答案3

BE 之间有一个增量文件。用于beadm list检查您是否有 BE。当您删除前一个 BE 时,它应该将增量数据合并/提交到磁盘并释放隐藏空间。只有在销毁标记为相同日期的整套子 BE 后,您才可能看到空间。

答案4

在我的计算机上,磁盘使用情况统计信息通常需要大约 15 秒才能更新。也许你只是没有足够的耐心。

相关内容