Im Moment verwende ich zfsonlinux unter Fedora 19 und es funktioniert hervorragend. Das Mounten funktioniert beim Booten wie geplant mit dem von systemd aufgerufenen Initscript (im Lieferumfang von zfs enthalten), aber es gibt einen ziemlich schwerwiegenden Fehler: ZFS wird viel zu spät beim Booten gemountet, bis die Übertragung und andere Dienste ohne / zfs sehr verloren gehen montiert und kann nicht wiederhergestellt werden, daher scheitern sie.
Was ich suche, ist eine Möglichkeit, systemd dazu zu bringen, das Skript zu starten, bevor etwas anderes getan wird. Ich weiß, wie man es mit Initscripts macht (stellen Sie es einfach auf einen niedrigeren Runlevel ein, sagen wir 2), aber ich habe nicht den geringsten Nebel, wenn es darum geht, es mit dem Zielsystem von systemd zu machen.
Ich habe versucht, Dinge in den Diensten festzulegen, für die zfs aktiv sein muss, aber es funktioniert nicht, außer Type = idle (aber es muss trotzdem eine bessere Möglichkeit geben):
Requires=network.target
After=zfs
Type=idle
Und als Referenz hier das Initscript von Fedora . Aufgrund der Art und Weise, wie ZFS unter Linux (?) Bereitgestellt wird, kann ich nicht einfach einen Eintrag in fstab ploppen und damit fertig sein. Er muss mithilfe von Befehlen bereitgestellt werden.
quelle
Antworten:
systemd
hat eine spezielle Richtlinie für diesen Fall, genanntRequiredMountsFor
; sieheman systemd.directives
.Die Verwendung wäre
RequiresMountsFor=[mountpoint]
zRequiresMountsFor=/zfs
.Die Schlüsselfrage könnte sein, ob Sie wirklich eine "alles andere" Bedingung widerspiegeln müssen, wie Ihre Q-Zustände. Ich denke, die Idee ist, diese Abhängigkeiten so selektiv wie möglich zu verwenden, um das Finden der optimalen Sequenz und der maximalen Parallelisierung zu unterstützen.
quelle
Ich werde versuchen, so gut wie möglich zu antworten, nicht so vertraut mit systemd.
Das bereitgestellte Skript ist nur ein Standard-Skript, sodass Sie es jederzeit starten können
script_name start
.Nach dem, was ich in den Manpages von systemd gesehen habe, können Sie Abhängigkeiten definieren. Am besten verwenden Sie Vorher-Nachher-Ziele. Wenn man sich die Dateien ansieht, gibt es einen Alias von Runlevel 2 3 und 4, der immer multiuser.target sein soll.
Wenn Sie systemctl list-dependencies basic.target ausführen, können Sie leicht herausfinden, wo Ihr Dienst gestartet werden soll.
Speichern Sie das Dateibeispiel /usr/lib/systemd/myservice.service. systemctl aktiviere myservice.service.
quelle