LINUX.ORG.RU
ФорумTalks

Решил попробовать btrfs

 ,


1

1

Зачесалось мне, тут, пощупать в деле btrfs, а именно - её фичу прозрачной компрессии. Что ж, дурное дело - нехитрое.

[$] sudo dd if=/dev/zero bs=1M count=1024 of=btrfs.img                                        
1024+0 записей получено
1024+0 записей отправлено
 скопировано 1073741824 байта (1,1 GB), 11,4495 c, 93,8 MB/c
[$] sudo mkfs.btrfs ./btrfs.img                                                               

WARNING! - Btrfs Btrfs v0.19 IS EXPERIMENTAL
WARNING! - see http://btrfs.wiki.kernel.org before using

fs created label (null) on ./btrfs.img
	nodesize 4096 leafsize 4096 sectorsize 4096 size 1.00GB
Btrfs Btrfs v0.19
[$] sudo mount -t btrfs -o compress=lzo ./btrfs.img /mnt
[$] df -h /mnt                                                                             
Файловая система Размер Использовано  Дост Использовано% Cмонтировано в
/dev/loop0         1,0G          56K  894M            1% /mnt
Хм, где мои 106 метров? А, ну да, метаданные-шметаданные, занято, значит нужно, наверное. Что ж, попробуем на неё что-нибудь записать. Например, папку с фоточками.
[$] du -h Барселона
24M	Барселона/Конфа
93M	Барселона/Монсеррат
540M	Барселона
Отлично, размер подходит. Пишем:
[$] sudo rsync -av Барселона /mnt
sending incremental file list
Барселона/
Барселона/P1020344.JPG
...
...
...
Барселона/P1020541.JPG
Барселона/P1020541.MOV
rsync: writefd_unbuffered failed to write 4 bytes to socket [sender]: Broken pipe (32)
rsync: write failed on "/mnt/Барселона/P1020541.MOV": No space left on device (28)
rsync error: error in file IO (code 11) at receiver.c(322) [receiver=3.0.9]
rsync: connection unexpectedly closed (2388 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(605) [sender=3.0.9]
WTF? O_o
[$] du -h /mnt
0	/mnt/Барселона/Конфа
0	/mnt/Барселона/Монсеррат
206M	/mnt/Барселона
206M	/mnt
[$] df -h /mnt
Файловая система Размер Использовано  Дост Использовано% Cмонтировано в
/dev/loop0         1,0G         206M   76M           74% /mnt
O_O
Отличненько мы место сэкономили... И это ещё предлагают использовать для корня в мейнстрим-дистрибутивах? Вы как хотите, а я пас. Проживу, как-нибудь, без сжатия.
Дискасс.

★★★★★

Последнее исправление: Axon (всего исправлений: 3)
Ответ на: комментарий от Kindly_Cat

Прикинь, да.

Ну это вообще бомба. Вот это для кого написано?

WARNING! - Btrfs Btrfs v0.19 IS EXPERIMENTAL
WARNING! - see http://btrfs.wiki.kernel.org before using

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

34 килобайта на гиг. Да, это чудовищная трата места.

Это в случае с ext4. В случае с btrfs, по факту, это больше 700 мегабайт на гиг.

Axon ★★★★★
() автор топика
Ответ на: комментарий от Axon

Почему, в таком случае, у той же ext4 с ними вообще нет никаких проблем?

А у тебя что, никогда иноды не кончались на ext2/3/4? :-) В общем, они там сразу выделяются, при форматировании. Уменьшить или увеличить нельзя. Иногда это неудобно: место есть, а файл создать не можешь. Или место кончилось, но в таблицах инодов есть ещё 30-40 гигов, а писать туда нельзя.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

А у тебя что, никогда иноды не кончались на ext2/3/4?

Нет, хотя я и слышал, что такое бывает. Да и они места почти не занимают, можно навыделять с запасом. Почему у btrfs такие тяжëлые метаданные?

Axon ★★★★★
() автор топика
Ответ на: комментарий от Axon

Да и они места почти не занимают

У меня / на ext4. Раздел размером в 13.5 GiB, метаданные занимают 691 MiB. Не занимают, говоришь?

i-rinat ★★★★★
()

Нормальные люди баб щупают, а ты извращенец. Тьфу. гадость какая...

Sociopsih ★☆
()
Ответ на: комментарий от i-rinat

метаданные занимают 691 MiB.

Упс, забыл про резерв для рута. 130 MiB. Хотя это только иноды. В них не хранится карта размещения файлов и прочие радости.

Сделал новую ФС. Занято 331 MiB.

i-rinat ★★★★★
()
Последнее исправление: i-rinat (всего исправлений: 2)

Короче, можно сказать, что btrfs требует не менее 2 Гб. Согласен, это бесчеловечные требования.

Kindly_Cat
()

Оно ещё даже не бета.

Quasar ★★★★★
()
Ответ на: комментарий от i-rinat

Я через mc не пробовал, но через rsync быстро кончилось место. На 1,5 Гб - то же самое. На 2 Гб нормально записались два каталога с общим размером в 760 Мб и осталось 640 Мб свободного места. Так что можно сказать, что btrfs требует от 2 Гб.

Kindly_Cat
()

А ты свой эксперимент хотя бы повторять пробовал?

unikum ★★★★★
()
Ответ на: комментарий от tazhate

Угадай где они появились раньше, в zfs или в lvm.

Сложная задачка. Что-то я не смог найти информацию по истории. По LVM посмотрел историю drivers/md/dm-snap.c, он был ещё в 2005-04-16, в момент импорта в git, дальше истории нет.

С ZFS ещё сложнее. Вроде релизнулась она в первый раз в OpenSolaris Nevada b36. Сообщение с анонсом в рассылке датируется 27 апреля 2006 (http://mail.opensolaris.org/pipermail/opensolaris-discuss/2006-April/015795.html)

Плюс, почитай как работают они там и там.

Я вообще без понятия, как они работают там и там. Всегда думал, что в LVM что-то типа COW по сегментам в 4 МБ.

i-rinat ★★★★★
()
Ответ на: комментарий от Kindly_Cat

Сверим опции? Монтирую с -o loop,compress=lzo, по факту оказываются опции «rw,relatime,compress=lzo,space_cache». Ядро из debian testing, оно тут имеет версию 3.2.0-3-amd64)

i-rinat ★★★★★
()
Ответ на: комментарий от Kindly_Cat

Я без loop.

Создал отдельный раздел под это дело, 1G. Опции те же, но без loop. Скопировал 822МБ фоток:

# btrfs fi df /mnt
Data: total=893.62MB, used=796.83MB
System, DUP: total=8.00MB, used=4.00KB
System: total=4.00MB, used=0.00
Metadata, DUP: total=51.19MB, used=2.27MB
Metadata: total=8.00MB, used=0.00

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

У меня / на ext4. Раздел размером в 13.5 GiB, метаданные занимают 691 MiB. Не занимают, говоришь?

Чушь какая-то. Как проверяли?

Axon ★★★★★
() автор топика
Ответ на: комментарий от Axon

Чушь какая-то. Как проверяли?

Я потом написал же, ошибся я, 331 MiB всего. Это столько он занятым показывает на новой ФС.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Упс, забыл про резерв для рута. 130 MiB. Хотя это только иноды.

Всё равно дофига. У меня 47216 байт для почти под завязку забитого корня размером 4,7 гигабайт.

Axon ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

Опять забыли про резервирование?

Axon ★★★★★
() автор топика
Ответ на: комментарий от Axon

У меня 47216 байт для почти под завязку забитого корня размером 4,7 гигабайт.

Ты как измеряешь-то? У тебя поди вывод find / -mount размером поболее будет, чем 47 кило будет, не то что все метаданные.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Ты как измеряешь-то?

Разницей между показаниями df и du. А вы как?

У тебя поди вывод find / -mount размером поболее будет, чем 47 кило будет, не то что все метаданные.

А что показывает такой find?

Axon ★★★★★
() автор топика
Ответ на: комментарий от Kindly_Cat

Ну так увеличь размер, я тебе это ещё в начале треда писал.

На двух гигабайтах получилось так:

Data: total=1.34GB, used=1.34GB
System, DUP: total=8.00MB, used=4.00KB
System: total=4.00MB, used=0.00
Metadata, DUP: total=300.00MB, used=7.41MB
Metadata: total=8.00MB, used=0.00
Уже получше, конечно, но всё равно 650 метров пропадают. Фактически, та же фигня.

Axon ★★★★★
() автор топика

Я нихрена не понял, что ты написал, что ты сделал и чего ты хотел этим добиться.

/мимокрокодил с / и /home на btrfs в opensuse 12.2

ekzotech ★★★★
()
Ответ на: комментарий от Axon

Разницей между показаниями df и du. А вы как?

Ну ладно-ладно. Наврал я тебе. Лень мне было точный подсчёт производить. А теперь деваться некуда. В общем так. 13.5 гигов - это 14155776 1к-блоков. Свободного места — 2859624 1к-блоков (вывод df -k). Занято файлами: 10880020 1к-блоков. Вычитаем из размера раздела свободное место и размер под файлами, получаем 416132 1к-блоков. Это 406.4 МиБ. Размер под файлами считал так:

$ sudo find / -mount -type f -printf %b\\n | awk '{a+=$1} END {print a}'
21760040
%b печатает размер в 512-байтных единицах с учётом разреженных файлов.

И давай уже на «ты».

А что показывает такой find?

Имена всех файлов раздела. Имена ведь тоже метаданные.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat
df -k /media/Arch
Файловая система 1K-блоков Использовано Доступно Использовано% Cмонтировано в
/dev/sdb2          4877248      4747460   119880           98% /media/Arch
find /media/Arch -mount -type f -printf %b\\n | awk '{a+=$1} END {print a}'
9694448

Почему место под файлами получается вдвое больше, чем есть на разделе? Как-то вы странно его считаете. И чем для этого плох du?

И давай уже на «ты».

Я со всеми в интернете на «вы». Иначе приходится помнить, с кем я на «ты» переходил, а с кем - нет, а это для меня анриал.

Axon ★★★★★
() автор топика
Последнее исправление: Axon (всего исправлений: 2)
Ответ на: комментарий от Axon

Почему место под файлами получается вдвое больше, чем есть на разделе?

оно выводит в 512-байтных единицах. А df -k — в 1024-байтных.

Как-то вы странно его считаете. И чем для этого плох du?

du считает и директории тоже. Каждая — как минимум 4к. А директория — это уже метаданные, так что их считать нельзя. Нужно только обычные файлы.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

оно выводит в 512-байтных единицах. А df -k — в 1024-байтных.

Ok, делим на 2. Всё равно больше получается.

Axon ★★★★★
() автор топика
Ответ на: комментарий от tis

Правда, с багом каким-то.

Вот именно. И, кстати, это был не тест. Просто, первым же шагом наступил на грабли, и дальше не пошёл.

Axon ★★★★★
() автор топика
Последнее исправление: Axon (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.