staging.inyokaproject.org

nbd-client: keine stabile Verbindung, wenn als service gestartet

Status: Gelöst | Ubuntu-Version: Ubuntu MATE 16.04 (Xenial Xerus)
Antworten |

gk017

Anmeldungsdatum:
19. Juni 2009

Beiträge: Zähle...

Hallo zusammen und schöne Ostern!

Ich versuche, meinen Rechner mit einer NBD-Freigabe zu verbinden. Das klappt problemlos, wenn ich die nötigen Befehle manuell eingebe. Wenn ich dagegen die Befehle beim Systemstart per service ausführe, scheint die Verbindung wieder unterbrochen zu werden.

Manuell führe ich diese Befehle aus:

gernot@jupiter:~$ sudo nbd-client -l 192.168.1.11
Negotiation: ..
raid
test
gernot@jupiter:~$

Es werden die beiden NBD-Freigaben gelistet.

gernot@jupiter:~$ sudo nbd-client 192.168.1.11 /dev/nbd0 -N test
Negotiation: ..size = 9765MB
bs=1024, sz=10240000000 bytes
gernot@jupiter:~$ 

Verbindung mit der Freigabe 'test'.

gernot@jupiter:~$ sudo nbd-client -c /dev/nbd0
3837

gernot@jupiter:~$ 

Check der Verbindung, alles in Ordnung. Das Block-Device /dev/nbd0 kann jetzt gemounted werden. Alles funktioniert. Die drei einzelnen Befehle habe ich in einem Skript zusammengefasst:

gernot@jupiter:~$ cat /usr/local/bin/nbd0nas 
#!/bin/sh
nbd-client -l 192.168.1.11
nbd-client 192.168.1.11 /dev/nbd0 -N test
nbd-client -c /dev/nbd0
gernot@jupiter:~$ 

Auch dieses lässt sich ausführen und funktioniert problemlos. Nun möchte ich aber, dass die Verbindung beim Start des Rechners automatisch erzeugt wird. Ich habe also unter /etc/systemd/system eine Datei nbd0.service abgelegt:

gernot@jupiter:~$ cat /etc/systemd/system/nbd0.service 
[Unit]
Description=NBD-Verbindung mit NAS erstellen
Wants=network-online.target
After=network-online.target

[Service]
ExecStart=/usr/local/bin/nbd0nas

[Install]
WantedBy=multi-user.target
gernot@jupiter:~$ 

Wie oben angekündigt, funktioniert dies nicht. In /var/log/syslog sieht es so aus, als würde die Verbindung ordnungsgemäß erstellt, aber einige Sekunden später bricht sie zusammen:

gernot@jupiter:~$ cat /var/log/syslog | grep nbd
...
Apr  1 20:14:55 jupiter systemd-modules-load[398]: Inserted module 'nbd'
Apr  1 20:15:05 jupiter nbd0nas[2108]: Negotiation: ..
Apr  1 20:15:05 jupiter nbd0nas[2108]: raid
Apr  1 20:15:05 jupiter nbd0nas[2108]: test
Apr  1 20:15:05 jupiter nbd0nas[2108]: Negotiation: ..size = 9765MB
Apr  1 20:15:05 jupiter nbd0nas[2108]: bs=1024, sz=10240000000 bytes
Apr  1 20:15:05 jupiter nbd0nas[2108]: 2196
Apr  1 20:15:05 jupiter kernel: [   19.073730] nbd0: detected capacity change from 0 to 10240000000
Apr  1 20:15:05 jupiter kernel: [   19.075505] block nbd0: shutting down sockets
Apr  1 20:15:35 jupiter kernel: [   49.815684] block nbd0: Connection timed out
Apr  1 20:15:35 jupiter kernel: [   49.815689] print_req_error: I/O error, dev nbd0, sector 0
Apr  1 20:15:35 jupiter kernel: [   49.815692] Buffer I/O error on dev nbd0, logical block 0, async page read
Apr  1 20:15:35 jupiter kernel: [   49.815734] print_req_error: I/O error, dev nbd0, sector 0
Apr  1 20:15:35 jupiter kernel: [   49.815738] Buffer I/O error on dev nbd0, logical block 0, async page read
Apr  1 20:15:35 jupiter kernel: [   49.815766] print_req_error: I/O error, dev nbd0, sector 0
Apr  1 20:15:35 jupiter kernel: [   49.815770] Buffer I/O error on dev nbd0, logical block 0, async page read
Apr  1 20:15:35 jupiter kernel: [   49.815834] print_req_error: I/O error, dev nbd0, sector 0
Apr  1 20:15:35 jupiter kernel: [   49.815837] Buffer I/O error on dev nbd0, logical block 0, async page read
Apr  1 20:15:35 jupiter kernel: [   49.815863] print_req_error: I/O error, dev nbd0, sector 0
Apr  1 20:15:35 jupiter kernel: [   49.815865] Buffer I/O error on dev nbd0, logical block 0, async page read
Apr  1 20:15:35 jupiter kernel: [   49.815897] print_req_error: I/O error, dev nbd0, sector 0
Apr  1 20:15:35 jupiter kernel: [   49.815900] Buffer I/O error on dev nbd0, logical block 0, async page read
Apr  1 20:15:35 jupiter kernel: [   49.815922] print_req_error: I/O error, dev nbd0, sector 0
Apr  1 20:15:35 jupiter kernel: [   49.815924] Buffer I/O error on dev nbd0, logical block 0, async page read
Apr  1 20:15:35 jupiter kernel: [   49.815945] Dev nbd0: unable to read RDB block 0
Apr  1 20:15:35 jupiter kernel: [   49.815959] print_req_error: I/O error, dev nbd0, sector 0
Apr  1 20:15:35 jupiter kernel: [   49.815961] Buffer I/O error on dev nbd0, logical block 0, async page read
Apr  1 20:15:35 jupiter kernel: [   49.815975] print_req_error: I/O error, dev nbd0, sector 0
Apr  1 20:15:35 jupiter kernel: [   49.815977] Buffer I/O error on dev nbd0, logical block 0, async page read
Apr  1 20:15:35 jupiter kernel: [   49.816007] print_req_error: I/O error, dev nbd0, sector 0
Apr  1 20:15:35 jupiter kernel: [   49.816011] Buffer I/O error on dev nbd0, logical block 0, async page read
Apr  1 20:15:35 jupiter kernel: [   49.816027]  nbd0: unable to read partition table
Apr  1 20:15:35 jupiter kernel: [   49.816496] nbd0: detected capacity change from 0 to 10240000000
Apr  1 20:15:35 jupiter kernel: [   49.816695] Dev nbd0: unable to read RDB block 0
Apr  1 20:15:35 jupiter kernel: [   49.816737]  nbd0: unable to read partition table
gernot@jupiter:~$ 

Die Ausgaben von systemctl bestätigen, dass die NBD-Verbindung erfolgreich ausgeführt wurde, dann aber wieder beendet wurde:

gernot@jupiter:~$ systemctl status nbd0.service 
● nbd0.service - NBD-Verbindung mit NAS erstellen
   Loaded: loaded (/etc/systemd/system/nbd0.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since Mo 2018-04-02 11:24:45 CEST; 49s ago
  Process: 1741 ExecStart=/usr/local/bin/nbd0nas (code=exited, status=0/SUCCESS)
 Main PID: 1741 (code=exited, status=0/SUCCESS)

Apr 02 11:24:45 jupiter systemd[1]: Started NBD-Verbindung mit NAS erstellen.
Apr 02 11:24:45 jupiter nbd0nas[1741]: Negotiation: ..
Apr 02 11:24:45 jupiter nbd0nas[1741]: raid
Apr 02 11:24:45 jupiter nbd0nas[1741]: test
Apr 02 11:24:45 jupiter nbd0nas[1741]: Negotiation: ..size = 9765MB
Apr 02 11:24:45 jupiter nbd0nas[1741]: bs=1024, sz=10240000000 bytes
Apr 02 11:24:45 jupiter nbd0nas[1741]: 1852
gernot@jupiter:~$ systemctl is-active nbd0
inactive
gernot@jupiter:~$

Wenn ich nach Systemstart mein Skript nochmal manuell ausführe, wird wieder eine stabile Verbindung hergestellt. Hat jemand eine Idee, woran das liegen könnte? Bin für jeden Tipp dankbar!

Grüße,
Gernot

gk017

(Themenstarter)

Anmeldungsdatum:
19. Juni 2009

Beiträge: 9

Ich löse meine Frage mal selbst: im [Service]-Abschnitt muss als Typ forking eingestellt sein, dann bleibt die Verbindung nach Ende des Skriptes bestehen.

[Unit]
Description=NBD-Verbindung mit NAS erstellen
Wants=network-online.target
After=network.target network-online.target

[Service]
Type=forking
ExecStart=/usr/local/bin/nbd0nas

[Install]
WantedBy=multi-user.target
Antworten |