我们有一个 12 TB 的 RAID 6 阵列,应该将其设置为单个分区,并带有西弗斯文件系统。在创建新文件系统时,系统显示已使用 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
这是一台戴尔 FX2,配备四个 FC430 计算节点和两个 FD332 存储节点,运行 Red Hat Enterprise Linux 8(乌特帕)。
答案1
对于 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=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
简而言之:
# 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)
因此,新的 12TB 文件系统上的“已用”空间为 78G、12G 或低至 33M,具体取决于您在 mkfs 时启用的元数据功能。
答案2
所有文件系统都有其自身内部数据结构的开销。这些内部信息用于文件系统将来创建文件和目录,并跟踪所有内容的分配位置。这些数据统称为“元数据”。它是“关于”文件系统上数据的数据。元数据被视为开销,因为它占用空间但不是用户数据。这种开销是使用任何文件系统不可避免的副作用。
根据这篇博文,XFS 的开销约为总磁盘空间的 0.5%。(请注意,这篇文章是 2009 年的,但没有理由对此进行彻底更改)。他通过使用以下工具测试十几个不同文件系统的文件系统开销,得出了这一结果guestfish
。
12TB 空间的 0.5% 是 60GB,所以听起来这非常接近预期使用量。我怀疑他的数字应该略高于 0.5%,但这是四舍五入的。