systemd :编写一个 .service 守护进程,用于在 zram 中设置交换和文件系统

systemd :编写一个 .service 守护进程,用于在 zram 中设置交换和文件系统

我最近购买了一台带有 SSD 的笔记本电脑,为了不给 SSD 带来太大的负担(我被告知它的写入周期数量有限),我决定编写一个 systemd 单元文件来设置交换和文件系统(稍后与 asd 一起使用)分别在设备 zram0 和 zram1 上。我不太熟悉 systemd 和 udev,所以我可能犯了一个愚蠢的错误,但我找不到它......这是我的文件:etc/udev/rules.d/10-zram.rules:

 KERNEL=="zram0",SYMLINK+="zramswap" ,ATTR{disksize}="1G" ,ENV{SYSEMD_WANTS}+="zram-swap@%k.service"

 KERNEL=="zram1",SYMLINK+="zramfs",ATTR{disksize}="250m", ENV{SYSTEMD_WANTS}+="zram-fs@%k.service"

/etc/systemd/系统/[电子邮件受保护]

[Unit]
Description="Daemon that sets xfs on %i device"

BindsTo=dev-%i.swap

After=dev-%i.device
Requires=dev-%i.device

Before=dev-%i.swap
Wants=dev-%i.swap

[Service]
Type=oneshot
ExecStart="/usr/bin/mkswap /dev/%i"

[电子邮件受保护]几乎相同,除了它使用 /usr/bin/mkfs.xfs (因为我读到 xfs 的创建速度很快)

最后,我的 fstab 结束:

/dev/zram0      swap        swap    defaults    0 0
/dev/zram1      /media/asd  xfs     defaults    0 0

问题是我的系统无法通过此设置正常启动...当我尝试交换并安装这两个设备时,它告诉我交换和文件系统不存在,并且在 Journalctl -xb 中查找,有一个出于同样的原因尝试安装和交换这两个设备时出错。但是当我查看 /sys 时,设备大小是我在 udev 规则中设置的大小,所以我猜我的规则已读取并工作,问题似乎是我的服务文件未运行和/或未运行工作...

答案1

我发现我的问题是什么...主要问题是 zram 默认情况下不是由 systemd 处理的。结果,没有 dev-zram0.device 单元,因此我的服务由于不满足的依赖关系而失败。解决方案是添加

TAG+="systemd"

按照我的 udev 规则

还有另一个小错误,即守护进程中的 ExecStart 行不需要双引号 " ,这导致它失败......

无论如何,如果有人尝试回答,谢谢!

相关内容