新创建的 XFS 文件系统显示使用了 78 GB

yak*_*atz 22 partition xfs storage rhel8

我们有一个 12 TB RAID 6 阵列,它应该设置为具有XFS文件系统的单个分区。在创建新文件系统时,它说它有 78 GB 正在使用中,但驱动器上没有文件。

[root@i00a ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs         32G     0   32G   0% /dev
tmpfs            32G     0   32G   0% /dev/shm
tmpfs            32G   11M   32G   1% /run
tmpfs            32G     0   32G   0% /sys/fs/cgroup
/dev/sdb3       154G  3.9G  150G   3% /
/dev/sdb2      1014M  153M  862M  16% /boot
/dev/sdb1       599M  6.7M  593M   2% /boot/efi
/dev/sdc1       187G  1.6G  185G   1% /var
tmpfs           6.3G     0  6.3G   0% /run/user/0
/dev/sda1        11T   78G   11T   1% /export/libvirt
Run Code Online (Sandbox Code Playgroud)

我做错什么了吗?这是故意的吗?

看起来文件系统日志只占用大约 2 GB,我不知道还有什么可以使用这个空间。

[root@i00a ~]# xfs_info /export/libvirt/
meta-data=/dev/sda1              isize=512    agcount=11, agsize=268435455 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=2929458688, imaxpct=5
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=521728, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
Run Code Online (Sandbox Code Playgroud)

分区信息:

[root@irb00a ~]# parted /dev/sda1
GNU Parted 3.2
Using /dev/sda1
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Model: Unknown (unknown)
Disk /dev/sda1: 12.0TB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags:

Number  Start  End     Size    File system  Flags
 1      0.00B  12.0TB  12.0TB  xfs
Run Code Online (Sandbox Code Playgroud)

这是一款 Dell FX2,具有四个 FC430 计算节点和两个 FD332 存储节点,运行 Red Hat Enterprise Linux 8 ( Ootpa )。

Mos*_*atz 25

所有文件系统都有自己内部数据结构的开销。此内部信息用于文件系统将来创建文件和目录,并跟踪所有内容的分配位置。这些数据统称为“元数据”。它是“关于”文件系统上数据的数据。元数据被视为开销,因为它占用空间但不是用户数据。这种开销是使用任何文件系统都不可避免的副作用。

根据这篇博客文章,XFS 的开销约为总磁盘空间的 0.5%。(请注意,这篇文章来自 2009 年,但没有理由对此进行彻底改变)。他通过使用guestfish.

12TB 空间的 0.5% 是 60GB,所以这听起来非常接近预期的使用量。我怀疑他的数字应该略高于 0.5%,但它被四舍五入了。

  • 值得注意的是,一些文件系统报告完整的分配大小,然后根据已用空间收取簿记开销,而其他文件系统从完整大小中减去簿记并仅将文件空间报告为“已使用”。 (9认同)
  • 测量千兆字节(基数 10)与千兆字节(基数 2)的差异在 `df` 中没有显示为已用空间。 (4认同)
  • 文件系统开销......让人们问为什么自 1983 年以来他们的硬盘驱动器不报告标签上的内容。 (3认同)
  • @J...实际上,硬盘驱动器通常使用 1GB=1000MB 而不是 1024MB 来销售那里的大小。因此,以 512GB 销售的 HD 实际上比列出的大小小 12GB。TB 的情况更糟,因为他们使用 1TB = 1000 GB = 1000 * 1000 MB。1TB HD 实际上是 976GB 而不是 1024GB。TB 丢失了惊人的 48GB。 (3认同)

fro*_*utz 6

对于 XFS,如 所示的空文件系统“使用的大小”df -h似乎在很大程度上取决于您mkfs.xfs当时启用的元数据功能。

使用空的 12TB 文件进行测试:

# truncate -s 12TB xfstest.img
Run Code Online (Sandbox Code Playgroud)

默认设置(在我当前的 ArchLinux 系统上):

# mkfs.xfs xfstest.img 
meta-data=xfstest.img            isize=512    agcount=11, agsize=268435455 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=0
data     =                       bsize=4096   blocks=2929687500, imaxpct=5
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=521728, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
# mount -o loop xfstest.img loop/
# df -h loop/
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0       11T   12G   11T   1% /dev/shm/loop
# umount loop/
Run Code Online (Sandbox Code Playgroud)

使用reflink=1

# mkfs.xfs -m reflink=1 -f xfstest.img
meta-data=xfstest.img            isize=512    agcount=11, agsize=268435455 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=2929687500, imaxpct=5
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=521728, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
# mount -o loop xfstest.img loop/
# df -h loop/
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0       11T   78G   11T   1% /dev/shm/loop
Run Code Online (Sandbox Code Playgroud)

使用crc=0, reflink=0: (出于某种原因,这也会变成finobt=0, sparse=0

# mkfs.xfs -m reflink=0 -m crc=0 -f xfstest.img 
meta-data=xfstest.img            isize=256    agcount=11, agsize=268435455 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0, sparse=0, rmapbt=0
         =                       reflink=0
data     =                       bsize=4096   blocks=2929687500, imaxpct=5
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=521728, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
# mount -o loop xfstest.img loop/
# df -h loop/
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0       11T   33M   11T   1% /dev/shm/loop
Run Code Online (Sandbox Code Playgroud)

简而言之:

# df -h loop/
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0       11T   78G   11T   1% /dev/shm/loop (reflink=1, crc=1)
/dev/loop0       11T   12G   11T   1% /dev/shm/loop (reflink=0, crc=1)
/dev/loop0       11T   33M   11T   1% /dev/shm/loop (reflink=0, crc=0)
Run Code Online (Sandbox Code Playgroud)

因此,新的 12TB 文件系统上的“已用”空间为 78G、12G 或低至 33M,具体取决于您在 mkfs 时间启用的元数据功能。