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


18

我们有一个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

我做错什么了吗?这是设计使然吗?

看来文件系统日志仅占用约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

分区信息:

[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

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


真的是空的吗?尝试重现(使用12TB映像,默认的mkfs设置bsize=4096 blocks=2929687500),df -h结果为Size 11T, Used 12G,而不是78G根据您的示例。xfsdump产生一个21KB的文件... ;-)
弗罗斯特斯

2
啊,我注意到您有,reflink=1但是我的默认值是reflink=0。使用时reflink=1,它对78G我来说也用过,所以现在可以重现。
弗罗斯特斯

因此,这似乎是设计使然,但是如果您确定reflinks对您的用例不起作用,则可以考虑将其关闭。
弗罗斯特斯

我不知道。这里唯一的是虚拟机的qcow2文件。
yakatz

看起来有些libvirt工具支持reflink,但可能不值得麻烦:stackoverflow.com/a/41968000/597234我可以在节省的空间中容纳整个额外的VM。
yakatz

Answers:


2

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

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

# truncate -s 12TB xfstest.img

默认设置(在我当前的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/

使用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

使用crc=0reflink=0(出于某种原因,这也开启finobt=0sparse=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

简而言之:

# 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)

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


RedHat 8 reflinks=1默认情况下具有
yakatz

24

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

根据此博客文章,XFS的开销约为总磁盘空间的0.5%。(请注意,该帖子来自2009年,但没有理由对此进行大幅度更改)。他通过使用来测试十几个不同文件系统的文件系统开销来获得该结果guestfish

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


9
值得一提的是,有些文件系统会报告已分配的完整大小,然后对已用空间收取簿记开销,而另一些文件系统会从完整大小中减去簿记并仅将文件空间报告为“已用”。
chrylis-罢工-

3
文件系统的开销……让人们问为什么自1983
J ...

3
@J ...实际上,硬盘驱动器通常在市场上使用1GB = 1000MB而不是1024MB的大小。因此,以512GB的价格销售的高清硬盘实际上比所列尺寸小12GB。由于TB使用1TB = 1000 GB = 1000 * 1000 MB,因此情况变得更糟。1TB HD实际上是976GB,而不是1024GB。TB损失了高达48GB。
贾斯汀·莱瑟德

4
千兆字节(以10为基数)与吉字节(以2为基数)之间的差异未显示为中的已用空间df
yakatz

1
@JustinLessard您忘记了MiB和KiB级别的开销。实际上,一个512 GB硬盘比真正的512 GiB驱动器小32 GiB。而且,考虑到TiB,GiB,MiB和KiB开销,1 TB驱动器实际上更像是0.909 TiB。(1 * 1000 ^ 4/1024 ^ 4)= 0.90949
penguin359
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.