LINUX.ORG.RU

Debian Stretch, который стоит в ZRAM

 ,


3

4

Как я это сделал:
1. Взял initrd из текущей системы и распаковал его так:

mkdir /root/initrd
cd /root/initrd
zcat /initrd.img|cpio -i
2. Отредактировал файл ./scripts/local и добавил туда в графе:
	# FIXME This has no error checking
	# Mount root
	if [ "${FSTYPE}" != "unknown" ]; then
		#mount ${roflag} -t ${FSTYPE} ${ROOTFLAGS} ${ROOT} ${rootmnt}
		mkdir /ramboottmp
		mount ${roflag} -t ${FSTYPE} ${ROOTFLAGS} ${ROOT} /ramboottmp
		modprobe zram
		modprobe loop
		echo 2G >/sys/block/zram0/mem_limit
                echo 2G >/sys/block/zram0/disksize
		losetup -P /dev/loop0 /dev/zram0
		mkfs.ext4 /dev/loop0
		mount -t ext4 /dev/loop0 ${rootmnt}
		cd ${rootmnt}
		unsquashfs -f -d ./ /ramboottmp/root/factory.sfs
		cp -R -P /ramboottmp/lib/modules ./lib
		echo "/dev/loop0 / ext4	defaults 0 0" >./etc/fstab
		umount /ramboottmp
	else

3. Скопировал туда все необходимые бинарики и обратно запаковал:
find ./|cpio -H newc -o ../initrd.img

4. Приготовил образ а потом перезугрузился и при загрузке указал этот initrd.
Итого, что имеем:

  • 1. Очень хорошую производительность системы и никаких лагов.
  • 2. Хорошую отзывчивость приложений.


Если бы у меня было бы побольше оперативки, то я бы в zram гонял виртуальные машины.

>>> Просмотр (1920x1080, 242 Kb)

★★★★★

Проверено: JB ()

Старая проблема, которую хотелось бы решить - невозможно из zram вытянуть сжатый образ, а потом залить его обратно.

Если бы это запилили, цены бы ему не было. А так ramdisk + squashfs + overlayfs + tmpfs хорошо работал... только переупаковка образа после обновления еще тем геммороем была...

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

Можно так:

dd if=/dev/loop0 of=/mnt/ext/system.img
а при загрузке:
dd if=./system.img of=/dev/loop0
Предварительно подключив zram.

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

Ээээм. А де сжатие? loop0 же не сжатый. Смысл тогда?

Я про то говорю, что при загрузке образа на zram он сжимается, а при копировании на хард он обратно разжимается. А у меня соплерон на атомных ядрах, это дооооолго.

timdorohin ★★★ ()
Ответ на: комментарий от timdorohin
rrr@raspberrypi:~$ su
Пароль: 
root@raspberrypi:/home/rrr# swapoff /dev/zram
zram0  zram1  zram2  zram3  
root@raspberrypi:/home/rrr# swapoff /dev/zram3
root@raspberrypi:/home/rrr# dd if=/dev/mmcblk0p1 /dev/zram3
dd: операнд «/dev/zram3» не распознан
По команде «dd --help» можно получить дополнительную информацию.
root@raspberrypi:/home/rrr# dd if=/dev/mmcblk0p1 of=/dev/zram3
131072+0 записей получено
131072+0 записей отправлено
 скопировано 67108864 байта (67 MB), 3,17626 c, 21,1 MB/c
root@raspberrypi:/home/rrr# dd if=/dev/zram3 of=/media/data/img.tmp
204800+0 записей получено
204800+0 записей отправлено
 скопировано 104857600 байт (105 MB), 7,52007 c, 13,9 MB/c
root@raspberrypi:/home/rrr# mount /media/data/img.tmp /media/mnt/ -o loop
root@raspberrypi:/home/rrr# cd /media/mnt
root@raspberrypi:/media/mnt# ls
bcm2709-rpi-2-b.dtb  bootcode.bin  fixup_cd.dat  fixup_x.dat         kernel7.img   start_db.elf
bcm2710-rpi-3-b.dtb  cmdline.txt   fixup.dat     kernel-4.4.50-gen2  overlays      start.elf
bcm2710-rpi-cm3.dtb  config.txt    fixup_db.dat  kernel-4.4.50-gen3  start_cd.elf  start_x.elf
root@raspberrypi:/media/mnt#

У меня всё работает!

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

Сегодня же еще не день дурака, чего тупишь? Ты только что сначала сжал данные, записывая из в zram

root@raspberrypi:/home/rrr# dd if=/dev/mmcblk0p1 of=/dev/zram3

А потом разжал их читая из zram

root@raspberrypi:/home/rrr# dd if=/dev/zram3 of=/media/data/img.tmp

Или ты не догоняешь?

Мне же хочется чтоб можно было читать и писать сжатое представление, иначе выходит говно:

gunzip -c root.img.gz > /dev/zram0
^сначала разжимаю с носителя, потом сжимаю при записи в zram
И при выключении та же хрень выходит:
gzip $options /dev/zram0 > root.img.gz
И снова лишние телодвижения...

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

Ну, я как то не предположил, что вы хотите использовать блочное устройство с прозрачным сжатием как архиватор. Тем более на алгоритмах lzo и lz4, которые никто не использует для хранения и которые сжимают быстрее, чем диск читает или пишет.

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

Умеет. Но:
gzip жмёт хуже lzma или bzip2 (который теперь ещё и многопоточный)
gzip жмёт намного медленнее чем lzo/lz4
gzip в zram дмёт данные ровно так же, как и обычный gzip, так что пережать образ через dd и конвеер можно с той же скоростью.

Также надо вспомнить, что всё перечисленное - потоковые компрессоры и не предполагают модификации сжатых блоков данных. Вероятно каждый блок устройства zram должен быть сжат и храниться отдельно, иначе я хз как они могли реализовать фрагментированную модификацию блочного устройства. Это всё к тому, что тяжёлые компрессоры с большим блоком должны быть менее эффективны. А gzip где то посередине между тяжёлыми и лёгкими.

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

Корень арча с 5-ю занятыми гигами zram жопил в гиг занятой рамы. ФС - ext4 без журнала. lzo смог зашакалить в ~1,9ГБ, так что тут лютый вин gzip'а.

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

Я не спорю, что по занятому месту будет выигрыш, но если вы хотите хранить образ сжатым и на диске и в оперативе и хотите при этом съэкономить на пережатии при старте и выключении... Возможно много хотите, он всё таки не для этого создавался, а чтобы сжатое блочное устройство работало быстро и прозрачно, как будто нет там никакого сжатия.

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

Я не использовал сжатое блочное устройство как архиватор, я на нем хранил корневую ФС во время работы компа. Но когда я собираюсь его выключать, мне необходимо куда-то сохранять данные. А в несжатом виде хранить бессмысленно.

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

Я просто хочу чтоб был доступ к внутреннему представлению zram в оперативной памяти, мне не надо чтоб я мог оттуда gzip-файл получать, лишь бы был способ быстро это представление сбросить на диск, а потом вернуть обратно...

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

А какой ЦПУ и скорость диска? вдруг достаточно мощно, чтобы конвеером сделать. А так я уверен, что записать сразу сжатые данные из оперативки не получится.

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

Да оно у меня и так конвеером разжималось-сжималось.

Однако я таки забил и перешел на сборную солянку костылей с Squashfs

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

Я про то говорю, что при загрузке образа на zram он сжимается, а при копировании на хард он обратно разжимается. А у меня соплерон на атомных ядрах, это дооооолго.

Там же lzo. Атом без проблем сможет обслужить HDD.
Узким местом будет именно вертушка.

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

Когда я последний раз извращался таким образом zstd еще не был в ядре, увы.

timdorohin ★★★ ()

losetup -P /dev/loop0 /dev/zram0
mkfs.ext4 /dev/loop0
mount -t ext4 /dev/loop0 ${rootmnt}


Чудик ты, зачем пропускать zram через loop если его можно примонтировать напрямую?

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

Дефолт выставлен людьми, которые соображают гораздо лучше твикеров с ЛОРа.
Последние уже 10 лет непрерывно крутят swappiness в разные стороны, не имея ни малейшего представления о том, что это.

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

Потому что работает некорректно. Зависает systemd и в логах много ошибок.

ne-vlezay ★★★★★ ()

а во время засыпания компа Zram распаковывается?

dr04 ★★ ()

По умолчанию алгоритм сжатия в zram - lzo - это параша, ставь lz4.

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

Есть тесты при использовании lz4 vs lzo в zram?

Как я писал LZ4 плагин компрессии для Reiser4

В ходе дальнейших исследований (fullbench из состава LZ4 и lz4c vs lzop), было выяснено, что LZ4 теряет все свои свойства при блоках маленького размера, а проявляет заявленные свойства [5] только на больших блоках,

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

Как выразился Эдуард Шишкин: «Так что, не совсем понятно, что и с чем мы сравниваем..» [6]

system-root ★★★★ ()
Ответ на: комментарий от Skullnet

По умолчанию алгоритм сжатия в zram - lzo - это параша, ставь lz4.

Если уровень компресии можно менять то тогда лучше поставить gzip 6, жмёт он хорошо и факапов не будет.
По крайней мере на zfs так было.

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