我最近购买了一台带有 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 行不需要双引号 " ,这导致它失败......
无论如何,如果有人尝试回答,谢谢!