Frage von rosek, 50

Linux - Script um Homedir auf USB zu kopieren?

Hallo Zusammen,

ich hab leider wenig Ahnung von Linux. Ich brauche ein Script, welches mir unter Linux das Homedir auf USB kopiert. Kein Programm oder so. Es soll wirklich ein Script sein.

Wenn mir der jenige auch noch erklärt wie das geht und was die einzelnen Befehle machen, lerne ich auch noch was dazu :)

Kann mir einer helfen ?

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von GWBln, 15

Wenn der Stick eingestöpselt ist:

mit gparted kannst du dem Stick einen Namen geben.

gparted ist u.U. schon installiert, wenn nein ist es einfach nachzuholen!

Dann kannst du in einem script schreiben:

DEV=$(blkid -L Name)
if [ .$DEV = . ]; then
echo -e "nicht vorhanden"
exit
fi
MP=$(mount |grep $DEV |awk '{print $3}')
if [ .$MP = . ];
then
sudo mount $MP
fi

MP: MountPoint, also z.B. /media/Name

für diesen abgekürzten Befehl ist aber ein Eintrag in der /etc/fstab notwendig!

Der o.g. Befehl mit DEV ermittelt, ob ein Gerät mit dem Label "Name" aktuell bekannt ist. Wenn ja, steht in DEV z.B. /dev/sdc1

Ohne Eintrag (im Script):

sudo mount $DEV /media/Name

den Rest wie andere geschrieben haben ...

aktuelle Distris binden meist automatisch ein ... mit Labe=Name

Antwort
von Christianwarweg, 50

Wird der USB-Speicher automatisch gemounted (also öffnet er sich, wenn du ihn an den USB-Anschluss steckst) oder müsste das Script ihn erst noch mounten.

Wenn er schon gemountet ist, dann ist eine einfache Methode, sich anzugucken, wo er gemountet ist (Rechtsklick auf das Symbol des Mediums, Eigenschaften). Bei mir steht dann:

Location: /run/media/Nutzername

Das Symbol selbst heißt INTENSO; also liegen die Daten auf /run/media/Nutzername/INTENSO

Damit wäre das Script:

#!/bin/bash
cp -r /home/Nutzername /run/media/Nutzername/USB-Gerätename/

Die oberste Zeile ist der Header, der das Ganze als Bash-Script auszeichnet.

cp ist der Befehl zum Kopieren; -r heißt, dass Verzeichnisse und Unterverzeichnisse kopiert werden sollen

/run… ist der Pfad, der zu dem USB-Gerät führt.

Das ganze speicherst du als Homecopy.sh oder nach belieben. Dann musst du es noch ausführbar machen. Das geht entweder, indem du einen Rechtsklick auf die gerade erstellte Datei machst und dann unter "Priviligien" oder "Rechte" (mein System ist auf Englisch, daher weiß ich nicht, wie "Permissions" in deutschsprachigen Distributionen übersetzt ist) und dann ein Häkchen setzt bei "Ausführbar" oder "Erlaubnis als Programm zu starten" oder so ähnlich.

Alternativ kannst du auch im Terminal eingeben:

chmod +x Dateiname.sh

chmod steht für Change file mode bits, +x heißt ausführbar.

Wenn du das Script starten willst, kannst du entweder einen Doppelklick auf die Datei machen oder im Terminal ins Verzeichnis wechseln, in dem die Datei liegt und

./Script.sh

eingeben. ./ist wichtig, sonst sucht die Shell in /bin oder /sbin nach einem Programm namens Script.sh und nicht in dem Ordner, in dem du dich gerade befindets.

Kommentar von rosek ,

Hallo, erstmal vielen Dank für deine Mühe.Der USB Stick müsste noch gemountet werden, damit das Script universell bleibt.

Kommentar von Christianwarweg ,

Ah, gut, dann ist mein Script so nicht brauchbar. Tut mir leid.

Kommentar von Christianwarweg ,

Das heißt, dass es auch nicht immer der selbe USB-Stick wäre, oder?

Kommentar von rosek ,

Gehen wir mal davon aus, es ist immer der gleiche. Hättest du dann eine Lösung ? Wie verhält sich denn Linux ? Wenn ich ein USB Stick einstecke... wird automatisch gemountet ?

Kommentar von Christianwarweg ,

Nein, habe ich nicht, könnte ich aber dann finden. Das geht über udev, da wird jedem Gerät eine eigene umständliche, dafür aber eindeutige ID zugeordnet.

Die findet man in /dev/disk/by-uuid bzw. /by-id (hier etwas aussagekräftiger)

Da ich das noch nie gebraucht habe, müsste ich da aber auch erst selbst nachschauen.

Kommentar von rosek ,

das wäre echt klasse :)

Antwort
von varlog, 49

Ich denke mal du willst das zu Backup Zwecken benutzen? Ich hab' mir dafür einfach einen alias für rsync angelegt. Dazu musst du einfach folgendes in deine .bash_aliases anfügen (und ggf. rsync installieren):

alias homeSync='rsync -ua --delete --progress /home/deinBenutzername /Dein/Backup/Verzeichnis'

Danach kannst du, wenn dein Stick in /Dein/Backup/Verzeichnis gemountet ist einfach homeSync im Terminal eingeben und dann wird das ganze synchronisiert. Soll heißen: Es werden nur die Dateien übertragen, die sich geändert haben oder neu sind. Dateien, die im Quellverzeichnis nicht mehr vorhanden sind werden auch aus dem Zielverzeichnis gelöscht. Sollte das nicht gewünscht sein musst du einfach --delete entfernen.

Falls du einfach nur ohne viel Schnick schnack kopieren möchtest dann wirf mal ein Blick in die manpage von cp (also "man cp" ins Terminal eingeben) oder siehe hier: http://wiki.ubuntuusers.de/cp. Für weitere Infos zu rsync siehe "man rsync" oder hier: http://wiki.ubuntuusers.de/rsync.

Wenn das Backup automatisch gestartet werden soll, wenn der Stick angeschlossen wird, siehe hier: http://wiki.ubuntuusers.de/udev

Kommentar von rosek ,

ja ich möchte die Homedir backupen .

Kommentar von Christianwarweg ,

Ist meiner Meinung nach meinem Script unten vorzuziehen.

Kommentar von PWolff ,

sehr gute Antwort! Besonders der Verweis auf http://wiki.ubuntuusers.de/udev dürfte genau das Gesuchte sein - bis darauf, dass es von einen Kommandozeilen-Anfänger noch viel Lernen von Grundlagen erfordert.

Antwort
von Royce, 43

Könnte mMn schwierig werden, da du den Namen des Drives (zB /dev/sdb1) nicht immer 100%ig genau gleich halten kannst, sodass das Script bei jeder Ausführung gleich läuft

Kommentar von varlog ,

Es hindert dich ja aber keiner daran besagten Stick immer ins gleiche Verzeichnis zu mounten.

Antwort
von arisboch, 2

Ich empfehle außerdem noch, dass Ganze durch tar (vereinigt Dateien und Ordner in ein unkomprimiertes Archiv) und xz (sehr effiziente Kompression, sogar besser als gz oder bz2) laufen zu lassen, damit das Backup nicht so viel Platz frisst.

Antwort
von rosek, 15

Hab gerade das noch im Netz gefunden :

[code]# Als root einloggen

su

# Mountpoint für USB-Stick anlegen. Entfällt, wenn noch schon vorhanden.

mkdir /mnt/usb

# USB-Stick mounten. Genaues Device steht im Log (journalctl, /var/log/message/, dmesg)

mount /dev/sdXx /mnt/usb

# nach /home gehen

cd /home

# gewünschtes Verzeichnis kopieren

cp -a dein_user /mnt/usb

# USB-Stick wieder auswerfen

umount /mnt/usb

[/code]

hilft das ?

Keine passende Antwort gefunden?

Fragen Sie die Community