[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: nfs mount beim booten über fstab [debian,lenny,xen]



Hallo,

Robert Bude <rupat@rupat.de>:

>Ich kämpfe seit mehreren Tagen daran in einer Xen DomU ein NFS Mount auf 
>ein Verzeichnis in der Dom0 hinzubekommen. Gleich vorweg: NFS technisch 
>ist alles im Lot. Manueller mount sowie ein "mount -a" nach booten der 
>DomU funktionieren ! Doch trotz des korrekten Eintrags in der /etc/fstab 
>der DomU will nach booten selbiger meine NFS Verbindung einfach nicht 
>"hochkommen".

Wenn Bridging, Bonding, STP oder ähnliches involviert ist, dann kann es nach
dem Aktivieren eines Netzwerkinterfaces einige Zeit dauern, bis tatsächlich
Kommunikation möglich ist. Das Problem lässt sich durch Bridge-Parameter
mildern, aber nicht völlig abstellen. Debians ifupdown Mechanismus fängt das
von alleine nicht ab, so dass während des weiteren Bootvorgangs
Netzwerkkommunikation nicht deterministisch funktioniert.

Daher verwende ich auf meinen mit Bonding angeschlossenen Servern folgenden
Workaround:

In der /etc/network/interfaces wird am Ende des Startvorgangs ein
Skript aufgerufen, das erst terminiert, wenn das Interface funktioniert.
Beispiel:

auto eth0
iface eth0 inet static
        address 10.1.1.15
        network 10.1.1.0
        netmask 255.255.255.0
        broadcast 10.1.1.255
        gateway 10.1.1.1
        up /etc/network/scripts/alive.sh 10.1.1.1

Als Parameter des Skripts wird ein Host angegeben, der im Netz immer
erreichbar sein muss, etwa der Xen-Host, ein Router oder eine Firewall.
Das Skript kennt noch zwei weitere Parameter <count> und <probes>, und
schickt danach im Zweisekundenabstand bis zu <probes> Pings ab. Die
Verbindung wird als erfolgreich angesehen, wenn <count> Pakete beantwortet
wurden.

Das Skript selbst sieht so aus:

----- schnipp -----
#!/bin/bash

if test "$#" -lt 1; then
  echo "Usage: alive.sh <target> [ <count> [ <probes> ]]"
  echo "(defaults: count=2 probes=20)"
  exit 1
fi

target=$1
count=${2:-2}
probes=${3:-20}

while sleep 1; do
  probes=$((probes - 1))
  ping -q -c 1 -W 1 $target >/dev/null && count=$((count - 1))
  if test $count -le 0 -o $probes -le 0; then break; fi
done

test $count -gt 0 && exit 1
exit 0;
----- schnapp -----

Wichtig ist hierbei, dass das Paket iutils-ping installiert ist, da
das ping Kommando aus inetutils-ping die verwendeten Optionen nicht
versteht.

>Ich habe mich auch schon über die ersten 6 Seiten von 
>http://www.google.de/search?q=nfs+mount+boot+-diskless&hl=de&start=10&sa=N 
>gequält. Dort beschreiben viele genau dieses Problem. Anständige 
>Lösungen tauchen jedoch nicht auf. (ausser die rc.local geschichte)

Vielleicht verhält sich ja diese Lösung hier anständig. ;-)

Gruß, Harald


Reply to: