ubuntuusers.de

Skript- gemounteten Ordner automatisch auswählen

Status: Gelöst | Ubuntu-Version: Ubuntu 10.10 (Maverick Meerkat)
Antworten |

th3rdster

Avatar von th3rdster

Anmeldungsdatum:
20. November 2009

Beiträge: Zähle...

Hallo Ubuntuusers,

Ich möchte mein Backupscript modifizieren;

Ich sichere abwechselnd auf 2 Festplatten, FAILSAFE_A und FAILSAFE_B. Da die Pfade dann jeweils anders sind (media/STOREAGE_A bzw. media/STOREAGE_B) habe ich 2 Skripte erstellen müssen, die vom Inhalt ident sind, nur jeweils 2 andere Pfade haben. es sind nie beide Platten im System gleichzeitig eingebunden (Wechselrahmen). Hat jemand eine Idee, wie ich das ganze automatisieren kann? Das heißt, das das Skript selbst nachschaut welche Platte gemountet ist und diesen Pfad nimmt?

Skript sieht so aus:

#!/bin/bash

#Sichert STOREAGE auf grosses Failsafe 1TB!!
echo ':::Sichert STOREAGE (alles) auf grosses Failsafe 1TB!!:::'
read foo
echo ':::Storeage auf Failsafe A 1TB kopiert, bitte warten... :::'
sudo rsync -abpv --delete --backup-dir=CHANGES/ --stats /media/STOREAGE/ /media/FAILSAFE_A/
echo ':::Archivierung auf Failsafe A 1TB erfolgreich :::'
read foo 

Kann mir vorstellen das mit einer Variablen abzufragen, aber wie finde ich aber heraus welcher Ordner gemountet ist? Für Hilfe wäre ich dankbar, würde die Sicherungsprozedur angenehm verkürzen.

LG th3rdster

JuergenF

Anmeldungsdatum:
22. Oktober 2004

Beiträge: 2009

Wohnort: FFM

Ich würde versuchen, das über eine udev-Regel so hinzubekommen, das alle potenziellen Backup-Medien auf immer den gleichen Pfad gemounted werden.

Ansonsten findest Du im Advanced Bash-Scripting Guide (empfehlenswert) unter Test Constructs auch Möglichkeiten, auf die Existenz von Verzeichnissen zu testen.

Ersteres finde ich irgendwie eleganter, aber udev-Regeln sind wohl manchmal 'tricky'. Außerdem greift man damit auf System-Ebene ein, wohingegen Dein Script (wenn es nur ums $HOME geht) ja auf User-Level laufen könnte (ich 'backuppe' noch /etc und Teile von /var an die ich normal nicht drankomme - von daher geht das eh nur als System-Prozess).

Und am Ende ist das sicherlich auch Geschmackssache.

RapaNui

Avatar von RapaNui

Anmeldungsdatum:
16. Juli 2007

Beiträge: 1925

Wohnort: Penco / Chile

Hola th3rdster,

wie wäre so etwas:

saveplatte=$(awk '/\/media\/FAILSAFE_/ {print $2}' /proc/mounts)

Das Teil ließt im Verzeichnis /proc die gemounteten Partitionen. awk durchsucht dabei die /proc/mounts nach /media/FAILSAFE_ (der Slash ist im Bsp. maskiert) und gibt auch nur diese Info aus ({print $2}). Die Variable saveplatte beinhaltet dann dem Mountpoint, sofern die Platte gemountet ist.

Je nach gemounteter Platte also /media/FAILSAFE_A oder /media/FAILSAFE_B, allerdings ohne abschließendem Slash.

Saludos

P.S. Weitere Verzeichnisse und Dateien des /proc auf meiner Benutzerseite

th3rdster

(Themenstarter)
Avatar von th3rdster

Anmeldungsdatum:
20. November 2009

Beiträge: 71

So, jetzt hab ich aus lauter Rumtüffelei meine Festplatte zerschossen, und hab das System neu aufsetzen müssen.

Gott sei dank hab ich gesichert 😉

Ich werd lieber einfach 2 Skripte benutzen, eines mi...._A, eines mit...._B.

Schluchz... ;(

riffraff

Avatar von riffraff

Anmeldungsdatum:
1. Oktober 2006

Beiträge: 486

Wohnort: Im kühlen Norden

Ist es so, dass wenn die eine HDD gemounted ist, das andere Verzeichnis tatsächlich leer ist?

Dann könntest Du das ja auch einfach prüfen und entsprechend verzweigen...

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/bash
if [ $(ls -A /media/FAILSAFE_A 2>/dev/null) ]
   then
       # Wir haben einen Verzeichnisinhalt an _A, also hier rein
       echo "HDD an FAILSAFE_A gemounted"
       #
       # Hier die Befehle um alles in FAILSAFE_A zu packen....
       #
elif [ $(ls -A /media/FAILSAFE_B 2>/dev/null) ]
    then
        # Nun alles in FAILSAFE_B sichern
       echo "HDD an FAILSAFE_B gemounted"
       #
       # Hier die Befehle um alles nach FAILSAFE_B zu sichern
       #
    else
       # Hier ist kein Verzeichnis-Inhalt zu finden
       echo "ACHTUNG: Bitte mindestens eine HDD mounten"
       echo "exit ohne etwas zu tun"
fi)


th3rdster

(Themenstarter)
Avatar von th3rdster

Anmeldungsdatum:
20. November 2009

Beiträge: 71

Hallo riffraff, habe das Skript erstellt, und einmal mit "normalen" Ordnern durchgespielt.

Ein wenig an den jetztigen Stand modifiziert, und es funktioniert.

(Ich wähle via Menu im Terminal STOREAGE_A oder STOREAGE_B aus).

Das einzige von dem ich Respekt habe ist die Tatsache, das ich das ganze mit sudo ausführen muss (Systemordner).

Beim vorherigen versuch ist mir das Os abgeschmiert.

An alle die dieses Skript verwenden, bitte mit Vorsicht an die Sache rangehen.

Vielen Dank nochmals, riffraff

762378

Anmeldungsdatum:
7. September 2010

Beiträge: 127

1
2
3
4
5
6
7
8
9
if mount | grep FILESAFE_A
then
    # sicherung auf FILESAFE_A durchführen
elif mount | grep FILESAFE_B
then
   # sicherung auf FILESAFE_B durchführen
else
    echo "kein Backupmedium gefunden. exit"
fi

th3rdster

(Themenstarter)
Avatar von th3rdster

Anmeldungsdatum:
20. November 2009

Beiträge: 71

Hallo 762378

Dein geposteter Code ist ziemlich kompakt, und habs deshalb mal mit einem Testordner in /home/XXX/ versucht:

Habe es einmal mit rsync und cp (A rsync und B cp )versucht um zu sehen ob daran der Fehler hängt:

Bei FAILSAFE A kommt die Meldung:

/dev/mapper/udisks-luks-uuid-022952a0-cff7-47a6-8663-f31a7a3cae91-uid1000 on /media/FAILSAFE_B type ext4 (rw,nosuid,nodev,uhelper=udisks)
skipping directory .

Bei FAILSAFE B kommt die Fehlermeldung:

/dev/mapper/udisks-luks-uuid-022952a0-cff7-47a6-8663-f31a7a3cae91-uid1000 on /media/FAILSAFE_B type ext4 (rw,nosuid,nodev,uhelper=udisks)
cp: Verzeichnis „/home/th3rd-dt/trial/“ ausgelassen.

Beide Male wird nicht kopiert/gesynct......

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18

if mount | grep FAILSAFE_A
then
    # Sicherung auf FAILSAFE A durchführen
	rsync /home/XXX/trial/ /home/XXX/FAILSAFE_A/ 
        read foo
elif mount | grep FAILSAFE_B
then
   # Sicherung auf FAILSAFE B durchführen
	cp /home/XXX/trial/ /home/XXX/FAILSAFE_B/ 
else
    echo "kein Backupmedium gefunden."
	read foo
	exit
fi

read foo

.....??? Was kann jetzt falsch laufen??

762378

Anmeldungsdatum:
7. September 2010

Beiträge: 127

Hi,

th3rdster schrieb:

Hallo 762378 Dein geposteter Code ist ziemlich kompakt

Das ist quasi nur Pseudocode, ich wollte nur auf die Möglichkeit hinweisen, dass man mit einem mount | grep lalala auch feststellen kann, ob ein Laufwerk gemountet ist.

Antworten |