Systemd
systemd : 編寫一個 .service 守護程序,用於在 zram 中設置 swap 和 fs
我最近買了一台帶 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/system/zram-swap@.service
[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"
zram-fs@.service 幾乎相同,只是它使用 /usr/bin/mkfs.xfs (因為我讀到 xfs 的創建速度很快)
最後,我的 fstab 結束:
/dev/zram0 swap swap defaults 0 0 /dev/zram1 /media/asd xfs defaults 0 0
問題是我的系統無法通過此設置正常啟動…當我嘗試交換並安裝這兩個設備時,它告訴我交換和 fs 不存在,並且查看 journalctl -xb ,有一個出於同樣的原因,嘗試掛載和交換這兩個設備時出錯。但是當我查看 /sys 時,設備大小是我在 udev 規則中設置的,所以我猜我的規則已被讀取並且可以工作,問題似乎是我的服務文件沒有執行和/或沒有執行工作…
我發現了我的問題…主要問題是 zram 預設情況下不是由 systemd 處理的。結果,沒有 dev-zram0.device 單元,所以我的服務由於不滿足的依賴關係而失敗。解決方案是添加
TAG+="systemd"
我的 udev 規則
還有另一個小錯誤,即守護程序中的 ExecStart 行需要沒有雙引號 " 並且導致它失敗……
無論如何,如果有人試圖回答,謝謝!