[freebsd] ZFS - занимаемое пространство

9 views
Skip to first unread message

Mikhail Golub

unread,
Jan 21, 2021, 3:47:59 AMJan 21
to fre...@uafug.org.ua
Доброго времени суток.

Поясните, пожалуста, не могу понять.

Имеется FreeBSD 12.1 на виртуалке.
Пул ZFS с одним диском.
На пуле файловая система.
Задан параметр refquota 2 Гб.
На этой файловой системе лежит каталог сайта (данные 7z):
1220 folders, 7395 files, 460629747 bytes (440 MiB)

И 7z и mc сообщают одинаковый размер.

А du и df - другой размер занимаемого пространства.
# df -h /www/sites/netapp-event
Filesystem Size Used Avail Capacity Mounted on
www/sites/netapp-event 2,0G 949M 1,1G 46%
/www/sites/netapp-event

# du -d 0 -h /www/sites/netapp-event
953M /www/sites/netapp-event

NAME PROPERTY VALUE SOURCE
www/sites/netapp-event quota none local
www/sites/netapp-event refquota 2G local
www/sites/netapp-event compression off default
www/sites/netapp-event usedbydataset 949M -
www/sites/netapp-event usedbysnapshots 317M -
www/sites/netapp-event dedup off default

recordsize был 2 Кб. Сегодня поменял на дефолтный 128 Кб.

Из-за чего разница в результатах используемого дискового пространства?

_______________________________________________
freebsd mailing list
fre...@uafug.org.ua
http://mailman.uafug.org.ua/mailman/listinfo/freebsd

Eugene Grosbein

unread,
Jan 21, 2021, 4:19:16 AMJan 21
to Mikhail Golub, fre...@uafug.org.ua
21.01.2021 15:47, Mikhail Golub пишет:

> Доброго времени суток.
>
> Поясните, пожалуста, не могу понять.
>
> Имеется FreeBSD 12.1 на виртуалке.
> Пул ZFS с одним диском.
> На пуле файловая система.
> Задан параметр refquota 2 Гб.
> На этой файловой системе лежит каталог сайта (данные 7z):
> 1220 folders, 7395 files, 460629747 bytes (440 MiB)
>
> И 7z и mc сообщают одинаковый размер.
>
> А du и df - другой размер занимаемого пространства.
> # df -h /www/sites/netapp-event
> Filesystem Size Used Avail Capacity Mounted on
> www/sites/netapp-event 2,0G 949M 1,1G 46% /www/sites/netapp-event
>
> # du -d 0 -h /www/sites/netapp-event
> 953M /www/sites/netapp-event
>
> NAME PROPERTY VALUE SOURCE
> www/sites/netapp-event quota none local
> www/sites/netapp-event refquota 2G local
> www/sites/netapp-event compression off default
> www/sites/netapp-event usedbydataset 949M -
> www/sites/netapp-event usedbysnapshots 317M -
> www/sites/netapp-event dedup off default

Это данные от ядра, от самой ZFS.

> recordsize был 2 Кб. Сегодня поменял на дефолтный 128 Кб.

Смена recordsize влияет на вновь записываемые блоки данных, но не влияет на ранее записанные.

> Из-за чего разница в результатах используемого дискового пространства?

df также показывает данные от ядра. du считает сам, причём du может показывать сильно разные данные
при использовании ключа -A и без него.

mc и 7z считают сами и, очевидно, считают неправильно. А почему - вопрос к ним.

Valentin Nechayev

unread,
Jan 21, 2021, 4:27:28 AMJan 21
to Mikhail Golub, fre...@uafug.org.ua
Thu, Jan 21, 2021 at 10:47:47, gmn wrote about "[freebsd] ZFS - занимаемое пространство":

> На этой файловой системе лежит каталог сайта (данные 7z):
> 1220 folders, 7395 files, 460629747 bytes (440 MiB)
> И 7z и mc сообщают одинаковый размер.
> А du и df - другой размер занимаемого пространства.

Я так понимаю, 7z и mc сообщают сумму видимых байт. du по
умолчанию округляет до блоков, как он их понимает (размер блока
берёт из данных FS). Про df на ZFS ничего не скажу...

> recordsize был 2 Кб. Сегодня поменял на дефолтный 128 Кб.

Возможно, от этого разница только увеличится.


-netch-

Mikhail Golub

unread,
Jan 21, 2021, 4:37:15 AMJan 21
to fre...@uafug.org.ua
>> recordsize был 2 Кб. Сегодня поменял на дефолтный 128 Кб.
>
> Смена recordsize влияет на вновь записываемые блоки данных, но не влияет на ранее записанные.

Это я понимаю.
Просто указал какие действия выполнял.

> df также показывает данные от ядра. du считает сам, причём du может показывать сильно разные данные
> при использовании ключа -A и без него.
>
> mc и 7z считают сами и, очевидно, считают неправильно. А почему - вопрос к ним.
>

Заархивировал каталог, забрал на винду, разархивировал.
450 Мб (грубо).
Но не 950, как говорит df или сама ZFS.
Т.е. mc и 7z говорят правду.

Владимир Друзенко via freebsd

unread,
Jan 21, 2021, 4:48:51 AMJan 21
to fre...@uafug.org.ua
21.01.2021 12:37, Mikhail Golub пишет:

>> df также показывает данные от ядра. du считает сам, причём du может
>> показывать сильно разные данные
>> при использовании ключа -A и без него.
>>
>> mc и 7z считают сами и, очевидно, считают неправильно. А почему -
>> вопрос к ним.
>>
> Заархивировал каталог, забрал на винду, разархивировал.
> 450 Мб (грубо).
> Но не 950, как говорит df или сама ZFS.
> Т.е. mc и 7z говорят правду.
Случаем на той фс нет удалённых, но всё ещё открытых каким-нибудь
процессом файлов?

Mikhail Golub

unread,
Jan 21, 2021, 4:51:37 AMJan 21
to fre...@uafug.org.ua
>>> mc и 7z считают сами и, очевидно, считают неправильно. А почему -
>>> вопрос к ним.
>>>
>> Заархивировал каталог, забрал на винду, разархивировал.
>> 450 Мб (грубо).
>> Но не 950, как говорит df или сама ZFS.
>> Т.е. mc и 7z говорят правду.
> Случаем на той фс нет удалённых, но всё ещё открытых каким-нибудь
> процессом файлов?

Нет. Есть snapshots.
Но они вряд ли влияют на это.

Vladimir Sharun

unread,
Jan 21, 2021, 5:00:37 AMJan 21
to Mikhail Golub, fre...@uafug.org.ua
Привет,

`du -d 1 -h` и сравнивай каталог за каталогом, где у тебя расхождения c mc.

Если это что-то системное, то все каталоги будут больше в два раза, если не системная - то где-то будет что-то, чего не видно для mc/7z

Я думаю что проблема где-то на нестыковке ashift в zpool (4k) и блока в 2k: ты насильно удваиваешь потребляемый спейс.
Зачем его вообще трогать, 128к - очень ок почти для всего. Есть крайне очень редкие кейсы, когда надо файн-тюнить руками.

21 січня 2021, 10:48:05, від "Mikhail Golub" <g...@gmn.org.ua>:

Vladislav V. Prodan

unread,
Jan 21, 2021, 5:42:34 AMJan 21
to Рассылка FreeBSD UA


чт, 21 янв. 2021 г. в 11:51, Mikhail Golub <g...@gmn.org.ua>:
>>> mc и 7z считают сами и, очевидно, считают неправильно. А почему -
>>> вопрос к ним.
>>>
>> Заархивировал каталог, забрал на винду, разархивировал.
>> 450 Мб (грубо).
>> Но не 950, как говорит df или сама ZFS.
>> Т.е. mc и 7z говорят правду.
> Случаем на той фс нет удалённых, но всё ещё открытых каким-нибудь
> процессом файлов?

Нет. Есть snapshots.

Значит, смотрите место, занимаемое снапшотами.

--
 Vladislav V. Prodan
 System & Network Administrator
 support.od.ua

Eugene Grosbein

unread,
Jan 21, 2021, 5:55:49 AMJan 21
to Mikhail Golub, fre...@uafug.org.ua
21.01.2021 15:47, Mikhail Golub пишет:
> Доброго времени суток.
>
> Поясните, пожалуста, не могу понять.
>
> Имеется FreeBSD 12.1 на виртуалке.
> Пул ZFS с одним диском.
> На пуле файловая система.
> Задан параметр refquota 2 Гб.
> На этой файловой системе лежит каталог сайта (данные 7z):
> 1220 folders, 7395 files, 460629747 bytes (440 MiB)

1220+7395=8615 пользовательских объектов на файловой системе,
460629747/8615 = 53468 байт на объект в среднем.

949M/439M = 2.16, то есть каждый объект в действительности
занимает на fs вдвое больше места, чем его длина в среднем...

Вопрос: что показывает diskinfo -v для "диска" в этой виртуалке?
И ещё zdb -C | egrep 'ashift| name'

Mikhail Golub

unread,
Jan 21, 2021, 6:13:13 AMJan 21
to Vladimir Sharun, fre...@uafug.org.ua
В recordsize дело.
Убрал файлы с ФС (утром менял recordsize с 2 Кб на 128 Кб), вернул обратно.
Все объемы совпадают.

А на счет "Зачем его вообще трогать, 128к - очень ок почти для всего" -
да ... Но поб базы данных, например, надо менять. Под бэкапы (большие
файлы) желательно тоже менять.
Я почему-то решил (или где-то вычитал), что под сайт (много мелких
файлов) лучше сделать размер 2 Кб.

On 21.01.2021 12:00, Vladimir Sharun wrote:
> du -d 1 -h

Mikhail Golub

unread,
Jan 21, 2021, 6:15:43 AMJan 21
to Eugene Grosbein, fre...@uafug.org.ua
все дело в recordsize.

On 21.01.2021 12:55, Eugene Grosbein wrote:
> iskinfo -v

# diskinfo -v da1
da1
512 # sectorsize
161061273600 # mediasize in bytes (150G)
314572800 # mediasize in sectors
0 # stripesize
0 # stripeoffset
19581 # Cylinders according to firmware.
255 # Heads according to firmware.
63 # Sectors according to firmware.
VMware Virtual disk # Disk descr.
# Disk ident.
No # TRIM/UNMAP support
Unknown # Rotation rate in RPM
Not_Zoned # Zone Mode


# zdb -C | egrep 'ashift| name'
name: 'tank'
ashift: 9
name: 'www'
ashift: 12

Eugene Grosbein

unread,
Jan 21, 2021, 6:22:23 AMJan 21
to Mikhail Golub, fre...@uafug.org.ua
21.01.2021 18:15, Mikhail Golub пишет:
> все дело в recordsize.

> # diskinfo -v da1
> da1
> 512 # sectorsize

>

> # zdb -C | egrep 'ashift| name'
> name: 'tank'
> ashift: 9
> name: 'www'
> ashift: 12

Да, recordsize 2KB при ashift 12 (4KB) очевидно, плохая идея.
Можно попробовать сделать recordsize 4KB, проблема должна уйти.

Vladimir Sharun

unread,
Jan 21, 2021, 6:54:21 AMJan 21
to Mikhail Golub, fre...@uafug.org.ua
Привет,

> Но поб базы данных, например, надо менять.

Из каких соображений например ? В т.ч. и про бэкапы.


21 січня 2021, 13:13:01, від "Mikhail Golub" <g...@gmn.org.ua>:

Mikhail Golub

unread,
Jan 21, 2021, 7:42:27 AMJan 21
to Vladimir Sharun, fre...@uafug.org.ua
Читал когда-то не эти ссылки. Но нашел пока это.
Да, это не оф. документация ...

https://www.percona.com/blog/2017/12/07/hands-look-zfs-with-mysql/
https://skeletor.org.ua/?p=4212

On 21.01.2021 13:54, Vladimir Sharun wrote:
> Привет,
>
>> Но поб базы данных, например, надо менять.
>
> Из каких соображений например ? В т.ч. и про бэкапы.
>

_______________________________________________

Vladimir Sharun

unread,
Jan 21, 2021, 8:40:31 AMJan 21
to Рассылка FreeBSD UA
Привет,

recordsize - это ограничение сверху, снизу - ashift.

Файловая система будет использовать такой размер блока, который больше подходит под паттерн, а не всегда 128к, вот пример zfs, где 128к был включен при создании (256к - это эксперимент "потом"), ashift - 12

Block Size Histogram

 block   psize                lsize                asize
  size   Count   Size   Cum.  Count   Size   Cum.  Count   Size   Cum.
   512:   116K  57.9M  57.9M   116K  57.9M  57.9M      0      0      0
    1K:   129K   156M   214M   129K   156M   214M      0      0      0
    2K:   136K   359M   573M   136K   359M   573M      0      0      0
    4K:   214K   890M  1.43G   116K   614M  1.16G   484K  1.89G  1.89G
    8K:  93.0K   889M  2.30G  68.7K   759M  1.90G   198K  1.69G  3.58G
   16K:  72.4K  1.50G  3.80G   100K  1.90G  3.80G  77.2K  1.58G  5.16G
   32K:   135K  6.07G  9.87G  31.8K  1.39G  5.19G   135K  6.07G  11.2G
   64K:  74.6K  5.49G  15.4G  19.7K  1.72G  6.91G  74.4K  5.47G  16.7G
  128K:  5.21K   667M  16.0G   258K  32.2G  39.1G  5.45K   720M  17.4G
  256K:      0      0  16.0G      0      0  39.1G    174  45.7M  17.5G

Нас интересуют фактически аллокации - asize. 484к блоков 4к против 5.45к блоков 128к. Вот такой паттерн у этой конкретной ФС.

А вот например свалка с блоком 1М и оч тяжелым контентом:
Block Size Histogram

 block   psize                lsize                asize
  size   Count   Size   Cum.  Count   Size   Cum.  Count   Size   Cum.
   512:  4.75K  2.38M  2.38M  2.73K  1.36M  1.36M      0      0      0
    1K:  68.9K  72.7M  75.0M  1.26K  1.48M  2.84M      0      0      0
    2K:  37.7K  94.6M   170M  2.04K  6.41M  9.25M      0      0      0
    4K:  16.8K  69.8M   239M  23.1K   128M   138M      0      0      0
    8K:  5.14K  60.5M   300M  3.62K  43.6M   181M  23.3K   187M   187M
   16K:  5.88K   133M   433M  19.4K   335M   516M   111K  1.81G  1.99G
   32K:  21.0K   984M  1.38G  11.5K   566M  1.06G  9.45K   415M  2.40G
   64K:  13.7K  1.17G  2.56G  7.66K   623M  1.66G  25.8K  2.29G  4.68G
  128K:   580K  73.3G  75.9G   658K  82.4G  84.1G   579K  90.7G  95.4G
  256K:  24.0K  8.96G  84.9G  2.60K  1.01G  85.1G  20.8K  7.66G   103G
  512K:   183K   146G   231G  11.2K  9.13G  94.2G  93.5K  79.7G   183G
    1M:  6.69M  6.69T  6.91T  6.90M  6.90T  6.99T  6.78M  8.14T  8.32T

Другой паттерн и другой тип аллокации блоков.

Эти два zfs-а в одном физическом сервере.

Paul Tatarenko

unread,
Jan 21, 2021, 6:13:34 PMJan 21
to fre...@uafug.org.ua
On 21.01.2021 11:37, Mikhail Golub wrote:
> Заархивировал каталог, забрал на винду, разархивировал.
> 450 Мб (грубо).
> Но не 950, как говорит df или сама ZFS.
> Т.е. mc и 7z говорят правду.
>
Так надо было уже на той самой венде пойти дальше и проверить всё. Там
же всё написано! :)

Размер файлов и занимаемое ими пространство - две большие разницы. mc и
7z оперируют тем, с чем они и работают - размер файлов. Занимаемое этими
файлами пространство их коснётся только когда оно закончится и не будет
свободного места для записи очередного файла. du (disk usage) и df (disk
free), наоборот, оперируют пространством, занятым файлами на диске и
размер собственно файла их не интересует. Отсюда и разница - файл
размером 1 байт занимает на диске 1 условный блок, которым оперирует
конкретная ФС для хранения файлов.

Для примера приатачил скриншот с оффтопика со свойствами каталога с
похожим объёмом и количеством файлов (случайно угадал :)). Разница в
размере файлов и в пространстве, занятом ими на диске, на томе NTFS с
параметрами по умолчанию (кластер 4 Кб) - около 50 мегабайт. Не в два
раза, конечно, но она есть.

Думаю, если перенести этот каталог на искомую ФС, то разница стала бы
больше 50 Мбайт.

И об открытых файлах, линках и других прелестях не стоит забывать.

--
Best regards,
Paul Tatarenko http://tatarenko.kiev.ua
[listening to coolest sound - silence]
[Silence is sexy - Einsturzende Neubauten]

Clipboard01.png
Reply all
Reply to author
Forward
0 new messages