btrfs - 数据使用情况设备的 ioctl 不合适

btrfs - 数据使用情况设备的 ioctl 不合适

我正在尝试追踪哪些程序占用了我的 btrfs 文件系统上的部分空间。btrfs fi du -s /和之间存在很大差异btrfs fi usage /,差异似乎出现在<ERROR>运行 时的部分中btdu

我怎样才能追踪导致这种用法的因素<ERROR>

# btrfs fi du -s /
     Total   Exclusive  Set shared  Filename
     5.50GiB     5.50GiB       0.00B  /
# btrfs fi usage /
Overall:
    Device size:                  20.00GiB
    Device allocated:             12.28GiB
    Device unallocated:            7.72GiB
    Device missing:                  0.00B
    Used:                         11.59GiB
    Free (estimated):              8.22GiB      (min: 8.22GiB)
    Data ratio:                       1.00
    Metadata ratio:                   1.00
    Global reserve:               16.00MiB      (used: 0.00B)

Data,single: Size:12.00GiB, Used:11.50GiB
   /dev/sda2      12.00GiB

Metadata,single: Size:256.00MiB, Used:89.03MiB
   /dev/sda2     256.00MiB

System,single: Size:32.00MiB, Used:16.00KiB
   /dev/sda2      32.00MiB

Unallocated:
   /dev/sda2       7.72GiB

相关btdu输出:

--- / --------------------------------------------------------------------------------
   ~12.0 GiB  [##########] /<DATA>  
   ~253.1 MiB [          ]  <METADATA>
   ~32.0 MiB  [          ]  <SYSTEM>
   
   
--- /DATA ----------------------------------------------------------------------------
    ~6.5 GiB [##########] /<ERROR>
    ~2.1 MiB [          ] /<ROOT_TREE>
    ~5.5 GiB [########  ] /@ 
    
    
--- /DATA/ERROR ----------------------------------------------------------------------
    ~6.0 GiB [##########]  logical ino (Inappropriate ioctl for device)
  ~509.9 MiB [          ]  logical ino (No such file or directory)

所以我的结论是,我的系统上的实际文件占用了大约 5.5GB,其余的使用来自 btdu 报告为错误的内容。

注释/我尝试过的事情:

  • 我试过所有能在任何网站上找到的balancerescuecheck --repairscrub 但都失败了。
  • 我已卸载所有其他磁盘/nfs 驱动器/等。(挂载下没有隐藏文件。)

答案1

好的,再次查看内核代码并查看 btdu,我想我明白了。

您的内核太旧(4.14 或更旧)并且不支持BTRFS_IOC_LOGICAL_INO_V2

1) btdu 大部分情况下有效且 2) 这些错误被映射到 6 GB 空间的原因是,仅当第一个查询(使用-noBTRFS_IOC_LOGICAL_INO_V2完成)没有产生结果时,btdu 才用于执行查询。BTRFS_IOC_LOGICAL_INO_V2

我将更新 btdu 来显示适合这种情况的提示。

至于是什么占用了这 6 GB 的空间:很可能是部分使用范围中无法访问的部分。碎片整理将清除它们。如果您更新内核,btdu 将能够告诉您哪些文件正在固定这些范围。

相关内容