Nächste Überarbeitung | Vorhergehende ÜberarbeitungLetzte ÜberarbeitungBeide Seiten der Revision |
it:linux:backup [2011/02/19 11:57] – angelegt berni | it:linux:backup [2021/01/26 10:53] – [Backup unter Linux mit shell] admin |
---|
SUBSYSTEM=="block", SUBSYSTEMS=="scsi", RUN+="/usr/script/backup/backup-hd-udev.sh" | SUBSYSTEM=="block", SUBSYSTEMS=="scsi", RUN+="/usr/script/backup/backup-hd-udev.sh" |
</file> | </file> |
| Die udev-Attribute kann man sich auf einem halbwegs aktuellem System nicht mehr mittels udevinfo anzeigen lassen sonden eher so: |
| <code bash>udevadm info --query=all --name=<DEVICENAME> --attribute-walk</code> |
| |
Diese Regel ruft das Script "/usr/script/backup/backup-hd-udev.sh" auf, wenn ein SCSI blockdevice angeschlossen wird. | Diese Regel ruft das Script "/usr/script/backup/backup-hd-udev.sh" auf, wenn ein SCSI blockdevice angeschlossen wird. |
Das Script selber sieht so aus: | Das Script selber sieht so aus: |
* **<SOURCE>:** Quellort der zu sichernden Daten. | * **<SOURCE>:** Quellort der zu sichernden Daten. |
* **<NOT_WANT>:** Auszuschließendes Verzeichnis im Quellort. Es können auch mehrere angegeben werden, dazu muss eben "--exclude..." mehrmals wiederholt werden. | * **<NOT_WANT>:** Auszuschließendes Verzeichnis im Quellort. Es können auch mehrere angegeben werden, dazu muss eben "--exclude..." mehrmals wiederholt werden. |
\\ | |
Was macht das Script: | ==== Funktionsweise des Scripts ==== |
<code bash> | |
| Was macht das Script? |
| - <code bash> |
if [ $ACTION == "add" ] && [ $DEVTYPE == "partition" ]; then | if [ $ACTION == "add" ] && [ $DEVTYPE == "partition" ]; then |
</code> | </code> Nur für den Fall weitermachen, dass ein Gerät des Typs "partition" hinzugefügt wird. |
| - <code bash>case $ID_SERIAL in </code> Switch case über die Seriennummer, falls es mal mehr als eine Platte gibt, auf die wir sichern wollen. |
| - <code bash>"ST2000VX_002-12345_0000000000000002-0:0" )</code> Führe für genau diese Seriennummer aus. |
| - <code bash>mount $DEVNAME <DESTINATION> && </code> Gerät einhängen UND nächste Zeile nur ausführen, wenn der Befehl erfolgreich war. Wir wollen nicht, dass irgendeine Partition vollgeschrieben wird, wenn das Einhängen fehlschlägt. |
| - <code bash>rsync -avz <SOURCE> --exclude *<NOT_WANT>* $BACKUPROOT </code> Kopiere die Daten mittels rsync. |
| - <code bash>touch $BACKUPROOT/backup_vom_`date -I`.log</code> Lege eine Datei an, die Auskunft über das Datum des Backups gibt. |
| - <code bash>umount $DEVNAME</code> Hänge das Gerät wieder aus. |
| - <code bash>hdparm -S1 `echo $DEVNAME | rev | cut -b 2- | rev`</code>Bringe die Backup-HD dazu in den standby-Modus zu gehen. Der Teil <code bash>echo $DEVNAME | rev | cut -b 2- | rev</code> macht hierbei aus "/dev/sdb1" -> "/dev/sdb" indem der letzte Buchstabe abgeschnitten wird. |
| |
| ==== udev Umgebungsvariablen ==== |
Udev setzt Umgebungsvariablen, die vom aufgerufenen Script benutzt werden. Unter anderen sind das: | Udev setzt Umgebungsvariablen, die vom aufgerufenen Script benutzt werden. Unter anderen sind das: |
* ACTION: hat den Wert "add", wenn das Gerät angeschlossen wird und "remove", wenn das Gerät entfernt wird. | * ACTION: hat den Wert "add", wenn das Gerät angeschlossen wird und "remove", wenn das Gerät entfernt wird. |
* DEVTYPE: hat den Wert "disk", wenn das "disk"-Gerät von udev angelegt wird (z.b. /dev/sdb) oder "partition", wenn von udev das Gerät für die Partition angelegt wird (z.b. /dev/sdb1) | * DEVTYPE: hat den Wert "disk", wenn das "disk"-Gerät von udev angelegt wird (z.b. /dev/sdb) oder "partition", wenn von udev das Gerät für die Partition angelegt wird (z.b. /dev/sdb1) |
* DEVNAME: der Name des eben angelegten Geräts: | * DEVNAME: der Name des eben angelegten Geräts: im Falle von DEVTYPE="disk" ist DEVNAME=/dev/sdb |
| Alle Umgebungsvariablen mit Wert in meinem Fall: |
| <code bash> |
| ID_USB_DRIVER=usb-storage |
| ID_MODEL=002-12345 |
| ID_MODEL_ENC=002-1AH166\x20\x20\x20\x20\x20\x20 |
| ID_REVISION=CV01 |
| DEVTYPE=partition |
| ID_BUS=usb |
| SUBSYSTEM=block |
| ID_SERIAL=ST2000VX_002-12345_0000000000000002-0:0 |
| ID_FS_UUID=eb354dc1-e6b1-48b1-8c69-c30671c58034 |
| DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2:1.0/host18/target18:0:0/18:0:0:0/block/sde/sde1 |
| ID_MODEL_ID=55aa |
| ID_VENDOR_ENC=ST2000VX |
| ID_FS_VERSION=1.0 MINOR=65 |
| ACTION=add PWD=/ |
| UDEV_LOG=3 ID_ |
| FS_TYPE=ext3 |
| MAJOR=8 |
| DEVLINKS=/dev/block/8:65 /dev/disk/by-id/usb-ST2000VX_002-12345_0000000000000002-0:0-part1 /dev/disk/by-path/pci-0000:00:1d.7-usb-0:2:1.0-scsi-0:0:0:0-part1 /dev/disk/by-uuid/eb354dc1-e6b1-48b1-8c69-c30671c58034 |
| ID_VENDOR_ID=174c |
| DEVNAME=/dev/sde1 |
| SHLVL=1 |
| ID_FS_USAGE=filesystem |
| ID_TYPE=disk |
| ID_PART_TABLE_TYPE=dos |
| ID_FS_SEC_TYPE=ext2 |
| ID_FS_UUID_ENC=eb354dc1-e6b1-48b1-8c69-c30671c58034 |
| ID_INSTANCE=0:0 |
| ID_VENDOR=ST2000VX |
| ID_USB_INTERFACE_NUM=00 |
| ID_SERIAL_SHORT=0000000000000002 |
| ID_PATH=pci-0000:00:1d.7-usb-0:2:1.0-scsi-0:0:0:0 |
| ID_USB_INTERFACES=:080650: |
| SEQNUM=1866 |
| </code> |
| |
| |
| |
| |
| ====== Backup unter Linux mit shell ====== |
| <code bash> |
| #!/bin/bash |
| backupname=`hostname`_backup_`date -I`.tar.gz |
| tar -C / -cpf - --exclude="./sys/*" --exclude="./proc/*" . | ssh berni@server "cat >/srv/data/muell/backup/${backupname}" |
| |
| </code> |
| |