LINUX.ORG.RU
ФорумAdmin

zfs большая разница между ALLOC и реально занятым местом.

 ,


0

3

Подскажите, почему такое может происходить? Разница в два раза! Словно компрессии нет!

root@host-01:~# zfs get compressratio tank/subvol-1300-disk-1
NAME                     PROPERTY       VALUE  SOURCE
tank/subvol-1300-disk-1  compressratio  2.10x  -
root@host-01:~# zpool list -v
NAME                                                      SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
tank                                                     98.6T   429G  98.2T        -         -     0%     0%  1.00x    ONLINE  -
  raidz2-0                                               98.2T   429G  97.8T        -         -     0%  0.42%      -    ONLINE
    ata-WDC_WD181PURP-74B6HY0_4BKTX79Y                   16.4T      -      -        -         -      -      -      -    ONLINE
    ata-WDC_WUH721818ALE6L4_2JG2UVNB                     16.4T      -      -        -         -      -      -      -    ONLINE
    ata-WDC_WUH721818ALE6L4_2JJY4Z6K                     16.4T      -      -        -         -      -      -      -    ONLINE
    ata-WDC_WUH721818ALE6L4_4EG4K9JU                     16.4T      -      -        -         -      -      -      -    ONLINE
    ata-WDC_WUH721818ALE6L4_4ZGPE4BV                     16.4T      -      -        -         -      -      -      -    ONLINE
    ata-WDC_WUH721818ALE6L4_4ZGYJ7HV                     16.4T      -      -        -         -      -      -      -    ONLINE
special                                                      -      -      -        -         -      -      -      -         -
  mirror-2                                                404G  71.4M   404G        -         -     0%  0.01%      -    ONLINE
    ata-SAMSUNG_MZ7L3480HCHQ-00A07_S664NN0W828320-part5   404G      -      -        -         -      -      -      -    ONLINE
    ata-SAMSUNG_MZ7L3480HCHQ-00A07_S664NN0W828323-part5   404G      -      -        -         -      -      -      -    ONLINE
logs                                                         -      -      -        -         -      -      -      -         -
  mirror-1                                               1.88G    36K  1.87G        -         -     0%  0.00%      -    ONLINE
    ata-SAMSUNG_MZ7L3480HCHQ-00A07_S664NN0W828320-part4     2G      -      -        -         -      -      -      -    ONLINE
    ata-SAMSUNG_MZ7L3480HCHQ-00A07_S664NN0W828323-part4     2G      -      -        -         -      -      -      -    ONLINE
root@host-01:~# zfs list
NAME                      USED  AVAIL  REFER  MOUNTPOINT
tank                      289G  65.0T   120K  /tank
tank/subvol-1300-disk-0   367M  7.64G   367M  /tank/subvol-1300-disk-0
tank/subvol-1300-disk-1   289G   735G   289G  /tank/subvol-1300-disk-1

289 vs 429. Почему?

★★★★★

Ответ на: комментарий от hateyoufeel

На зеркале, всё как надо ALLOC показывает. А вот на raidz2, даже после удаления данных ALLOC не высвобождается. Видимо, какой-то до доп. чек, должен запускаться, или что, я не знаю, который блоки вернет обратно. В общем, не стал связыватся с raidz2, его нужно уметь использовать. Не вижу пока приемуществ на моих данных. Вернулся на striped mirror

# zfs list
NAME                      USED  AVAIL  REFER  MOUNTPOINT
tank                      373G  48.6T   104K  /tank
tank/subvol-1300-disk-0   272M  7.73G   272M  /tank/subvol-1300-disk-0
tank/subvol-1300-disk-1   373G  1.64T   373G  /tank/subvol-1300-disk-1
# zpool list -v
NAME                                                      SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
tank                                                     49.5T   374G  49.1T        -         -     0%     0%  1.00x    ONLINE  -
DALDON ★★★★★
() автор топика
Последнее исправление: DALDON (всего исправлений: 1)

BTW, с raidz-ами есть один не особо очевидный момент.
На уровне хранилища пространство на vdev-ах распределяется блоками размером 2^ashift. На уровне томов доступ выполняется блоками размером volblocksize. Для raidzN из K vdev-ов, данные размером volblocksize должны быть равномерно распределены по K-N vdev-ам блоками размером 2^ashift. Кроме того будет сформирована избыточная информация размером volblocksize/(K/N-1), которая должна быть записана на N vdev-ов также блоками по 2^ashift. С учётом этого, для оптимального использования пространства на vdev-ах, необходимо чтобы volblocksize был кратен (K-N)*2^ashift, а volblocksize/(K/N-1) кратен N*2^ashift. А то, что volblocksize должен быть целой степенью 2 в пределах от 512B до 128KB, накладывает ограничения ещё и на оптимальные значения числа vdev-ов и степень избыточности raidz.
Например raidz2 на 6 vdev с размером блока 4KB (ashift 12). Минимальный volblocksize для оптимального распределения на таком хранилище — 16KB: данные распределяются 4-мя блоками по 4KB на 4-х vdev-ах; избыточность размером 8KB (16KB/(6/2-1)) — 2-мя блоками по 4KB на 2-х других vdev-ах. Если уменьшить volblocksize до 8KB, то место, занятое таким томом в хранилище, при прочих равных увеличится вдвое. Для 2KB — вчетверо.
А если для тома ещё и компрессия включена...

KOHb-TPOJIJIbJIEP
()
Ответ на: комментарий от KOHb-TPOJIJIbJIEP

Вот тут то я и помер. Я отключил компрессию, попробовал снова записать данные, всё равно на 50% больше места занималось, при шести vdev и блоке в 128кб. Смотрел разные таблицы по ashift и накладным размерам, и т.п. - Удалил данные, а вот, похоже, эти выделенные блоки, полупустые, так и оставались ALLOCATE. Плюнул, сделал mirror и всё ок. :) Мне показалось, так будет оптимальней. Да и на счет надежности, не думаю, что будет сильно хуже.

DALDON ★★★★★
() автор топика
Последнее исправление: DALDON (всего исправлений: 1)