Registrieren  •  Login 
  
 
im Forum




Blog-Übersicht -> USB-Festplatte in Linux-VServer Gastsystem bereit stellen TP-Link TD-8840: DSL Reconnect mittels Script erzwingen :: Telefonwahlmenü für Dummies...
USB-Festplatte in Linux-VServer Gastsystem bereit stellen
Verfasst am: 13.03.2013, 17:58   Autor: killerbees19
Klingt eigentlich sehr einfach, da genau dieses Szenario in der Linux-VServer FAQ beschrieben ist. Verkompliziert wurde mein Setup aber dadurch, dass die einzuhängende USB-Festplatte beim Booten (von Host und Gast) noch nicht existiert und irgendwann später angesteckt und genauso willkürlich vielleicht wieder getrennt wird. Sie muss also beim Anstecken automatisch in das laufende Gastsystem eingehängt und beim Abtrennen wieder entfernt werden. Es muss also Hotplug-fähig sein - ohne dabei jetzt auf das Dateisystem zu achten. Das wäre normalerweise nur in Verbindung mit einem Neustart des vServers möglich.

Warum ich keine bekannten Möglichkeiten mit --bind/rbind genommen habe, liegt einfach daran, dass es in diesem Szenario nicht funktioniert. Der vServer Kontext macht einem da einen Strich durch die Rechnung, da er mit einer Kopie der eingehängten Geräte arbeitet und somit durch die Nichtexistenz vorher oder nachher nichts mehr anfangen kann. Der Ordner oder das Gerät wäre also richtig verknüpft, wird aber nur als leer angezeigt. Oder alternativ nicht zugreifbar, weil das Gerät nicht mehr existiert.

Mit einer kleinen udev-Regel auf dem Hostsystem klappt das dann relativ komfortabel:
Code:
ACTION=="add", ENV{ID_FS_UUID}=="<UUID>", SYMLINK+="storage-1", RUN="/usr/local/sbin/vmount <VSERVER> -t ext4 -o relatime /dev/storage-1 /mnt/storage-1"
ACTION=="remove", ENV{ID_FS_UUID}=="<UUID>", RUN="/usr/local/sbin/vnamespace -i 0 -e <VSERVER> /bin/umount -l /vservers/<VSERVER>/mnt/storage-1"


Die Vergleiche kann man problemlos auf andere Kriterien ändern, wie z.B. auf Hersteller und/oder Seriennummer. Die Platzhalter in eckigen Klammern müssen natürlich angepasst werden. Genauso der Pfad zu vnamespace, dem Dateisystemtyp (ext4) und eventuell die Mount-Optionen hinter -o. Bei vielen Geräten würde sich natürlich auch ein externes Script anbieten, das von udev aufgerufen wird, die UUID überprüft und die entsprechenden Befehle absetzt.

Wichtig: Die udev-Regel beinhaltet eine Überprüfung auf die UUID der Partition. Diese kann man mit blkid herausfinden. Damit diese dann aber auch funktioniert, darf die udev-Regel erst nach den 60-persistent-storage.rules ausgeführt werden, da erst dann die UUID der Partition bekannt ist. Das ist zu mindestens bei Debian Wheezy so. Bei anderen Systemen kann das variieren. Der empfohlene Dateiname wäre also z.B. 65-vserver-storage.rules Wink

Übrigens: Falls die Ausgabe von mount im Gast nach einiger Zeit so aussieht:

Zitat:
[...]

/dev/storage-1 on /mnt/storage-1 type ufs (relatime)
/dev/storage-1 on /mnt/storage-1 type ufs (relatime)
/dev/storage-1 on /mnt/storage-1 type ufs (relatime)
/dev/storage-1 on /mnt/storage-1 type ufs (relatime)
/dev/storage-1 on /mnt/storage-1 type ufs (relatime)
/dev/storage-1 on /mnt/storage-1 type ufs (relatime)
/dev/storage-1 on /mnt/storage-1 type ufs (relatime)
/dev/storage-1 on /mnt/storage-1 type ufs (relatime)
/dev/storage-1 on /mnt/storage-1 type ufs (relatime)
/dev/storage-1 on /mnt/storage-1 type ufs (relatime)
/dev/storage-1 on /mnt/storage-1 type ufs (relatime)
/dev/storage-1 on /mnt/storage-1 type ufs (relatime)

[...]


...dann ist /etc/mtab noch kein symbolischer Link auf /proc/mounts Rolling Eyes

Code:
# IM GASTSYSTEM AUSFÜHREN!
rm /etc/mtab
ln -s /proc/mounts /etc/mtab


Getestet auf einem Raspberry Pi unter Raspbian Wheezy mit eigenem Linux-VServer Kernel. Abschließend noch ein weiteres Beispiel mit einem modifiziertem Regelsatz, wenn man z.B. keine UUID verwenden möchte:

Code:
SUBSYSTEMS=="usb", ACTION=="add", KERNEL=="sd?1", ATTRS{serial}=="<SERIAL>", SYMLINK+="storage-1", RUN="/usr/local/sbin/vmount <VSERVER> -t ext4 -o relatime /dev/storage-1 /mnt/storage-1"
ENV{ID_SERIAL_SHORT}=="<SERIAL>", ACTION=="remove", RUN="/usr/local/sbin/vnamespace -i 0 -e <VSERVER> /bin/umount -l /vservers/<VSERVER>/mnt/storage-1"


Achja: Das Hostsystem sieht die Einbindung übrigens nicht und kann auch nicht auf den eingebundenen Ordner zugreifen. Das funktioniert nur über den Umweg mittels vserver ... exec oder vnamespace - Dank dem Linux-VServer Kontext Prinzip Smile


Update 14.03.2013: "-l" bei umount vergessen.

Dieser Beitrag wurde insgesamt 8 mal geändert. Zuletzt am 14.03.2013, 10:21.


Autor Nachricht
Für diesen Beitrag können zur Zeit keine neuen Kommentare verfasst werden.

Kontaktiere den Autor des Beitrages, falls du Fragen dazu hast.


 

Verwendete Zeitzone: CET (Europe/Berlin)
Aktuelles Datum & Uhrzeit: 11.12.2024, 01:04
Nach oben
Valid HTML 4.01 Transitional
Valid CSS!

Hosted by netcup
 
 
[ happytec.at | blog.happytec.at | forum.happytec.at | esports.happytec.at ]