*** artiom <artio...@yandex.ru> [2017-06-25 00:54]:
>Вы хотите сказать, что она жрёт 20% места под метаданные?!
>Или что она просто начинает сильно фрагментироваться, при заполнении?

Из-за её copy-on-write природы она начинает сильно фрагментироваться,
верно. Любое изменение данных это создание полной копии и блока данных и
сопутствующей метаинформации. Само собой перед записью они агрегируются,
но всё-равно при записи большого файла на диск он никогда не будет
размещён последовательно: каждые 1-5 секунд ZFS делает checkpoint-ы --
то есть на диске идут сколько-то блоков данных файла, потом всякая
метаинформация, снова блоки, потом метаинформация. Причём каждый набор
метаинформации создаваемый в последующих 1-5 секунд делает неактуальным
предыдущую. То есть она потенциально становится свободным местом.
Например *X*FS реально абсолютно последовательно может разместить файл
на диске, а ZFS нет -- поэтому и нужно много памяти под кэш чтобы
сгладить всё это, не создавая огромный IO на диск.

Но вот зато при неправильной конфигурации RAIDZ, в которой выбрать
определённое количество дисков и определённый размер блока (recordsize),
то можно, фактически, просто так потерять 50% места буквально в пустую.
Вот тут есть тема про это: 
https://www.delphix.com/blog/delphix-engineering/zfs-raidz-stripe-width-or-how-i-learned-stop-worrying-and-love-raidz
RAIDZ сделан так, что добавляет чётность, но кол-во получившихся блоков
для данных+parity должны быть кратны чему-то там и поэтому там будет
создан блок чисто для padding-а, для выравнивания некоего, не несущего
полезных данных. Статья эта подчёркивает что в RAIDZ на parity всё же
будет больше затрачено места чем в аналогичных уровнях RAID, как
правило.

>Во втором случае, ведь должна быть онлайн дефрагментация...

Вот это можно сказать и недостаток. Её нет. Есть хаки в виде
resilvering-а, то бишь rebuild-а на диски, при котором на них будет
дефрагментированный образ создан. Можно сделать полный zfs send и
восстановление ФС zfs recv-ом, но это потребует остановки ФС, что не
всегда допустимо и возможно. Есть хаки в виде просто копирования файла:
cp file file.tmp && mv file.tmp file, чтобы сделать его
дефрагментированным, если, например, он был медленно записан (то бишь,
из-за частых checkpoint-ов, сильно разряжён). Где-то на форумах они
говорят что создание online дефрагментации это жутко нетривиальная вещь,
требующая чуть ли не переписывания всего кода, ибо везде всё одна
крипта, деревья Меркле, checkoint, итд, итд -- сложно это сделать так,
чтобы гарантировать "железную" надёжность и поэтому не будут делать.

-- 
Sergey Matveev (http://www.stargrave.org/)
OpenPGP: CF60 E89A 5923 1E76 E263  6422 AE1A 8109 E498 57EF

Ответить