Недавно созданная файловая система XFS показывает использование 78 ГБ

18

У нас есть массив RAID 6 объемом 12 ТБ, который должен быть настроен как один раздел с файловой системой XFS . При создании новой файловой системы говорится, что используется 78 ГБ, но на диске нет файлов.

[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 ГБ, и я не могу понять, что еще может быть использование пространства.

[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

Это Dell FX2 с четырьмя вычислительными узлами FC430 и двумя узлами хранения FD332, работающими под управлением Red Hat Enterprise Linux 8 ( Ootpa ).

yakatz
источник
Это действительно пусто? Попытка воспроизвести (с изображением размером 12 ТБ, настройками mkfs по умолчанию bsize=4096 blocks=2929687500), df -hрезультат Size 11T, Used 12Gне 78Gсоответствует вашему примеру. xfsdumpсоздает файл размером 21 КБ ... ;-)
frostschutz
2
Ах, я заметил, что у вас было, reflink=1но по умолчанию для меня было reflink=0. С reflink=1, это также говорит, 78Gиспользуется для меня, так что я могу воспроизвести его сейчас.
frostschutz
Так что кажется, что это сделано специально, но если вы уверены, что reflinks ничего не сделает для вашего варианта использования, вы можете отключить его.
frostschutz
Я не знаю. Здесь будут только файлы qcow2 для виртуальных машин.
якатц
Похоже, что некоторые инструменты libvirt поддерживают reflink, но, вероятно, это не стоит проблем: stackoverflow.com/a/41968000/597234 Я, вероятно, смогу разместить целую дополнительную виртуальную машину в сэкономленном пространстве.
якатц

Ответы:

2

Для XFS пустая файловая система «Используемый размер», как показано, df -hкажется, во многом зависит от того, какие функции метаданных вы включаете в данный mkfs.xfsмомент.

Тестирование с пустым 12 ТБ файлом:

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

Таким образом, «используемое» пространство в новой файловой системе 12 ТБ составляет 78 ГБ, 12 ГБ или всего 33 МБ в зависимости от того, какие функции метаданных вы включаете во время mkfs.

frostschutz
источник
RedHat 8 имеет reflinks=1по умолчанию
yakatz
24

Все файловые системы имеют накладные расходы для своих собственных внутренних структур данных. Эта внутренняя информация используется для файловой системы для создания файлов и каталогов в будущем, а также для отслеживания того, где все размещено. Эти данные все вместе известны как «метаданные». Это данные "о" данных в файловой системе. Метаданные считаются служебными, поскольку они занимают место, но не являются данными пользователя. Эти накладные расходы являются неизбежным побочным эффектом использования любой файловой системы.

Согласно этому сообщению в блоге , накладные расходы XFS составляют около 0,5% от общего дискового пространства. (Обратите внимание, что это сообщение за 2009 год, но нет причин, по которым это должно было кардинально измениться). Он получил этот результат, протестировав нагрузку на файловую систему, используя более десятка различных файловых систем guestfish.

0,5% вашего 12 ТБ места составляет 60 ГБ, так что, похоже, это довольно близко к ожидаемому использованию. Я подозреваю, что его число должно было быть немного выше, чем 0,5%, но оно было округлено.

Моше Кац
источник
9
Стоит отметить, что некоторые файловые системы сообщают о полном выделенном размере, а затем взимают накладные расходы на ведение бухгалтерского учета с использованным пространством, в то время как другие вычитают бухгалтерию из полного размера и сообщают только о файловом пространстве как «использованный».
Хрилис - на забастовке -
3
Затраты на файловую систему ... заставляют людей спрашивать, почему их жесткие диски не сообщают о том, что на наклейке с 1983 года.
J ...
3
@J ... На самом деле, жесткие диски часто продаются там размером 1 ГБ = 1000 МБ вместо 1024 МБ. Таким образом, HD, продаваемый на 512 ГБ, на самом деле на 12 ГБ меньше указанного размера. С ТБ дела обстоят еще хуже, поскольку они используют 1 ТБ = 1000 ГБ = 1000 * 1000 МБ. 1 ТБ HD - это действительно 976 ГБ вместо 1024 ГБ. Колоссальные 48 Гб теряются туберкулезом.
Джастин Лессард
4
Разница в измерении в гигабайтах (база 10) и в гибибайтах (база 2) не отображается в виде используемого пространства df.
якатц
1
@JustinLessard Вы забыли о накладных расходах на уровнях MiB и KiB. Жесткий диск объемом 512 ГБ на самом деле более чем на 32 ГБ меньше, чем реальный диск объемом 512 ГБ. И на этом 1-ТБ накопитель действительно больше, чем 0,909 ТиБ, если учитывать накладные расходы на ТиБ, ГиБ, МиБ и КиБ. (1 * 1000 ^ 4/1024 ^ 4) = 0,90949
penguin359