Я написал простой файл zram.service, который настроит для меня сжатое пространство подкачки, чтобы не перегрызать слишком много моих дисков. Zram имеют более высокий приоритет, чем другие устройства подкачки.
Проблема в том, что когда я пытаюсь перевести компьютер в спящий режим, он записывает системное состояние в swap, в данном случае это zram, и, поскольку содержимое памяти теряется при исчезновении питания, это, конечно, не работает.
Решение состоит в том, чтобы остановить мой zram.service перед запуском systemctl hibernate и запустить его снова, когда система снова будет работать.
Насколько я выяснил, systemctl hibernate запускает /lib/systemd/system/systemd-hibernate.service. Я скопировал этот сервис в /etc /systemd /system /, чтобы переопределить его, и я, вероятно, смогу заставить это работать, используя раздел 'ExecStartPost =', но я думаю, что должен быть лучший способ остановить сервис systemd, когда другой началось и наоборот.
Редактировать: рабочий сервис zram в системе Debian для тех, кто заинтересован
[Unit]
Description=ZRAM swap
Conflicts=hibernate.service
[Service]
Environment=ZRAM_MEM=1G
Environment=ZRAM_CMPALGO=lz4
Environment=ZRAM_CMPSTREAMS=2
Type=oneshot
User=root
ExecStartPre=/bin/sh -c "/sbin/modprobe zram num_devices=1"
ExecStartPre=/bin/sh -c "echo $ZRAM_CMPALGO >/sys/block/zram0/comp_algorithm"
ExecStartPre=/bin/sh -c "echo $ZRAM_CMPSTREAMS >/sys/block/zram0/max_comp_streams"
ExecStartPre=/bin/sh -c "echo $ZRAM_MEM > /sys/block/zram0/disksize"
ExecStartPre=/bin/sh -c "/sbin/mkswap /dev/zram0"
ExecStart=/sbin/swapon /dev/zram0 -p 10
ExecStop=/sbin/swapoff /dev/zram0
ExecStop=/bin/echo 1 > /sys/block/zram0/reset
ExecStop=/sbin/rmmod zram
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target