ฉันเขียนไฟล์ zram.service ง่ายๆที่จะตั้งค่าพื้นที่สว็อปบีบอัดสำหรับฉันเพื่อหลีกเลี่ยงการเคี้ยวดิสก์ของฉัน Zram มีลำดับความสำคัญสูงกว่าอุปกรณ์แลกเปลี่ยนอื่น ๆ
ปัญหาคือเมื่อฉันพยายามจำศีลระบบของฉันมันจะเขียนสถานะของระบบเพื่อสลับซึ่งในกรณีนี้คือ zram และเนื่องจากเนื้อหาของหน่วยความจำหายไปเมื่อไฟฟ้าหายไปแน่นอนไม่ทำงาน
วิธีแก้ปัญหาคือหยุด zram.service ของฉันก่อนที่จะเรียกใช้ systemctl hibernate และเริ่มอีกครั้งเมื่อระบบสำรอง
เท่าที่ฉันได้พบว่า systemctl hibernate เริ่มต้น /lib/systemd/system/systemd-hibernate.service ฉันได้คัดลอกบริการนี้ไปยัง / etc / systemd / system / เพื่อแทนที่และฉันสามารถใช้งานได้โดยใช้ 'ExecStartPost =' stanza แต่ฉันคิดว่าต้องมีวิธีที่ดีกว่าในการหยุดบริการ 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