Cifs unter Linux permanent mounten
Guten Morgen zusammen!
Ich habe ein Problem bezüglich Linux und ich hoffe ihr könnt mir weiterhelfen.
Für unsere E-Mail Archivierung haben wir einen SLES10 SP1 Server aufgestellt. Die Archivierungssoftware wird per init-Skript in den Runleveln 3 und 5 gestartet (Das Skript hat der Anbieter der Archivierungslösung mitgebracht, bzw. war Bestandteil der Software).
Soweit so gut. Die E-Mails werden in einer Datenbank abgelegt, welche auf einem 1,5 TB CIFS Volume auf unserem NetApp Filer liegt. Wir haben uns für CIFS entschieden, da wir für den Filer keine NFS Lizenzen haben und eine LUN über iSCSI zu statisch ist. Zudem kann man CIFS Volumes Snapshotten und gezielter rücksichern als eine LUN.
Soviel zum Hintergrund. Nun mein Problem.
Damit die Archivierungssoftware starten kann, benötigt sie eine Verbindung zur Datenbank. Das CIFS Share muss also gemountet sein, bevor das Skript in einem der beiden Runlevel gestartet wird. Ich muss das Skript also irgendwie permanent mounten. Ich habe versucht einen Mountbefehl mit in das init-Skript der Archivierungssoftware zu schreiben, aber das funktioniert nicht. Weiter habe ich es mit einem Eintrag in die fstab versucht, aber die fstab wird ja noch vor der Initialisierung des Netzwerks ausgeführt. Ein eigenes init-Skript für den Mountbefehl funktionierte auch nicht. Nach dem Verlinken des Scriptes auf S99skript zum Beispiel, hat Linux die Verlinkung nach einem reboot auf S01skript geändert.
Im Internet habe ich dann noch weiter gegooglet und bin auf Lösungen wie smbmount und automount gestoßen, aber das ist mir alles zu aufwändig. Am liebsten wäre mir ein Aufruf des Mountbefehls aus dem init-Skript der Application heraus. Der Zugriff ist nur mit root notwendig. Andere User müssen nicht mounten können oder auf das Share zugreifen können. (Ich weiß es ist prinzipiell unsicher nur mit root zu arbeiten, aber hier kennt sich sonst keiner mit Linux aus und Angriffe von außen sind nicht zu befürchten)
Der Mountbefehl ist korrekt, auch der Eintrag in die fstab. Wenn ich nach dem Systemstart mount -a ausführe, kann ich ganz normal auf das Share zugreifen und damit arbeiten.
Hier ist mein Mountbefehl:
mount -t cifs -o username=SCHMITZ/xxxx,password=xxxx,perm,auto,rw,directio,_netdev,exec,suid,sync //192.168.1.70/share /mountpoint
Der Eintrag in der fstab sieht dementsprechend aus. Berechtigungen für den Mountpoint sind passend gesetzt.
Nun gehen mir die Ideen aus, ich hoffe hier hat vielleicht noch jemand den ein oder anderen alternativen Lösungsweg parat.
Danke für eure Hilfe und Grüße,
Cello
Ich habe ein Problem bezüglich Linux und ich hoffe ihr könnt mir weiterhelfen.
Für unsere E-Mail Archivierung haben wir einen SLES10 SP1 Server aufgestellt. Die Archivierungssoftware wird per init-Skript in den Runleveln 3 und 5 gestartet (Das Skript hat der Anbieter der Archivierungslösung mitgebracht, bzw. war Bestandteil der Software).
Soweit so gut. Die E-Mails werden in einer Datenbank abgelegt, welche auf einem 1,5 TB CIFS Volume auf unserem NetApp Filer liegt. Wir haben uns für CIFS entschieden, da wir für den Filer keine NFS Lizenzen haben und eine LUN über iSCSI zu statisch ist. Zudem kann man CIFS Volumes Snapshotten und gezielter rücksichern als eine LUN.
Soviel zum Hintergrund. Nun mein Problem.
Damit die Archivierungssoftware starten kann, benötigt sie eine Verbindung zur Datenbank. Das CIFS Share muss also gemountet sein, bevor das Skript in einem der beiden Runlevel gestartet wird. Ich muss das Skript also irgendwie permanent mounten. Ich habe versucht einen Mountbefehl mit in das init-Skript der Archivierungssoftware zu schreiben, aber das funktioniert nicht. Weiter habe ich es mit einem Eintrag in die fstab versucht, aber die fstab wird ja noch vor der Initialisierung des Netzwerks ausgeführt. Ein eigenes init-Skript für den Mountbefehl funktionierte auch nicht. Nach dem Verlinken des Scriptes auf S99skript zum Beispiel, hat Linux die Verlinkung nach einem reboot auf S01skript geändert.
Im Internet habe ich dann noch weiter gegooglet und bin auf Lösungen wie smbmount und automount gestoßen, aber das ist mir alles zu aufwändig. Am liebsten wäre mir ein Aufruf des Mountbefehls aus dem init-Skript der Application heraus. Der Zugriff ist nur mit root notwendig. Andere User müssen nicht mounten können oder auf das Share zugreifen können. (Ich weiß es ist prinzipiell unsicher nur mit root zu arbeiten, aber hier kennt sich sonst keiner mit Linux aus und Angriffe von außen sind nicht zu befürchten)
Der Mountbefehl ist korrekt, auch der Eintrag in die fstab. Wenn ich nach dem Systemstart mount -a ausführe, kann ich ganz normal auf das Share zugreifen und damit arbeiten.
Hier ist mein Mountbefehl:
mount -t cifs -o username=SCHMITZ/xxxx,password=xxxx,perm,auto,rw,directio,_netdev,exec,suid,sync //192.168.1.70/share /mountpoint
Der Eintrag in der fstab sieht dementsprechend aus. Berechtigungen für den Mountpoint sind passend gesetzt.
Nun gehen mir die Ideen aus, ich hoffe hier hat vielleicht noch jemand den ein oder anderen alternativen Lösungsweg parat.
Danke für eure Hilfe und Grüße,
Cello
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 104257
Url: https://administrator.de/contentid/104257
Ausgedruckt am: 22.11.2024 um 16:11 Uhr
8 Kommentare
Neuester Kommentar
Hallo Cellolein,
mount geht nicht für cifs (habe die manpage aber nur überflogen). Sieh Dir mal mount.cifs an.
http://linux.die.net/man/8/mount.cifs
Markus
mount geht nicht für cifs (habe die manpage aber nur überflogen). Sieh Dir mal mount.cifs an.
http://linux.die.net/man/8/mount.cifs
Markus
lol
naja, hauptsache etwas geschrieben
Also, bei SuSE ist das sysv init etwas sehr automatisiert und man sollte eigentlich nicht manuel herumbasteln. Aber, schau mal in deinem Script zum starten der Archivierungssoftware ob er überhaupt nach dem Netzwerk startet. Bei Gentoo würde ich zb. "depend on: network netfs" bei SuSE sieht das etwas komplizierter aus:
Du müsstest sicherstellen das das Script nach dem Netzwerk getsartet wird. Nun kannst du an passender Stelle einen Check einbauen, der prüft ob der Pfad tatsächlich gemountet wurde und falls er es nicht ist, mounten. zb. if [ ! -e $mountpath/.checkfile]; do mount -t cifs -o bla blu bb; fi
Irgend etwas in der Art eben.
naja, hauptsache etwas geschrieben
Also, bei SuSE ist das sysv init etwas sehr automatisiert und man sollte eigentlich nicht manuel herumbasteln. Aber, schau mal in deinem Script zum starten der Archivierungssoftware ob er überhaupt nach dem Netzwerk startet. Bei Gentoo würde ich zb. "depend on: network netfs" bei SuSE sieht das etwas komplizierter aus:
### BEGIN INIT INFO
# Provides: myscript
# Required-Start: $local_fs $remote_fs $network
# Should-Start: apache $named
# Required-Stop: $local_fs $remote_fs $network
# Should-Stop:
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Short-Description: my backup script
# Description: Start the net backup script :-)
### END INIT INFO
Irgend etwas in der Art eben.
Nabend,
warum schreibst du nicht einfach in die fstab als option _netdev mit hinein?? Diese Option besagt "...to prevent the system from attempting to mount these filesystems until the network has been enabled on the system..."
MfG
warum schreibst du nicht einfach in die fstab als option _netdev mit hinein?? Diese Option besagt "...to prevent the system from attempting to mount these filesystems until the network has been enabled on the system..."
MfG
Tach,
Was haben gewisse Init-Scripte mit einem Filessystem-Eintrag in der fstab zu tun?! Ich sagte nicht er solle sein Init-Script und den fstab nutzen. Sondern nur den fstab, sodass es beim bouten gemountet wird.
MfG
Was haben gewisse Init-Scripte mit einem Filessystem-Eintrag in der fstab zu tun?! Ich sagte nicht er solle sein Init-Script und den fstab nutzen. Sondern nur den fstab, sodass es beim bouten gemountet wird.
MfG
Wenn das Init-System nicht weiß, das es den Dienst erst starten kann wenn das Netzwerk und die Netzwerkdateisysteme gestartet hat, kann das nicht wirklich funktionieren. Wenn du Glück hast, und die Netzwerkinit durch ist bevor das Script startet, klappt es. Anersherum leider nicht. Wie gesagt, SuSE steuert die Abhängigkeiten über diesen header. Wenn dieser fehlt, startet es irgendwo. (siehe Doku readme.SuSE)