ubuntuusers.de

Problem mit btrfs Snapshot und Cronjob

Status: Gelöst | Ubuntu-Version: Server 11.10 (Oneiric Ocelot)
Antworten |

bernhard891

Anmeldungsdatum:
14. November 2011

Beiträge: Zähle...

Hallo zusammen,

Ich habe mir ein Bash-Script zusammengebaut, welches täglich unseren Fileserver mit rsync auf ein btrfs-Dateisystem sichert, und anschließend einen Snapshot erstellt und eine Mail verschickt. Soweit getestet, funktioniert auch alles wunderbar, wenn ich das Script (mit sudo) ausführe.

nun habe ich mit sudo crontab -e folgende Zeile hinzugefügt zum Aufruf meines Scripts:

0 0 * * * /pfad/zu/meinem/script 

rsync läuft auch, die Mail wird ebenfalls verschickt, es wird allerdings kein Snapshot erstellt. Den Snapshot erstelle ich mit folgendem Befehl:

btrfs subvolume snapshot /mnt/raid/vol /mnt/raid/snap_$datum

unter /mnt/raid ist das btrfs-System gemountet, und vol ist ein Subvolume.

alle anderen Befehlszeilen funktionieren tadellos.

an was kann das liegen, dass dieser Befehl beim händischen ausführen des Backup-Scripts funktioniert, beim automatischen jedoch nicht?

ich weiß nicht, ob das einen Unterschied macht, aber ich hab das ganze in verschiedene Bash-Files aufgeteilt (mount_fileserver, copy_rsync, unmount_fileserver, create_snapshot, send_mail) die ich aus einer execute_backup heraus der Reihe nach ausführe.

ich bin mit meinem Latein hier echt am Ende, wäre um jede Hilfe dankbar!

theinlein

Anmeldungsdatum:
29. Dezember 2007

Beiträge: 1279

Hi,

es ist immer wieder das gleiche ...

Wenn Cron das Script ausführt, dann hat Cron nicht deine benutzerumgebung, die du nach dem Einloggen hast. Da ist nur die nackte Shell, keine Umgebungsvariablen gesetzt etc.

Starte mal dein Script als root aus dem Verzeichnis '/' mit

env -i meinPfadZuMeinemScript/meinScript

und schau, was das alles meckert.

syscon-hh

Anmeldungsdatum:
8. Oktober 2005

Beiträge: 10220

bernhard891 schrieb:

btrfs subvolume snapshot /mnt/raid/vol /mnt/raid/snap_$datum

Ich weiß nicht, ob das einen Unterschied macht, aber ich hab das ganze in verschiedene Bash-Files aufgeteilt (mount_fileserver, copy_rsync, unmount_fileserver, create_snapshot, send_mail) die ich aus einer execute_backup heraus der Reihe nach ausführe.

Hallo bernhard891, ich hoffe mal, dass neben dem Kommentar von theinlein die Reihenfolge der Aufzählung nicht wirklich so abläuft

  • 1.: "mount_fileserver → copy_rsync"

  • 2.: "unmount_fileserver →"

  • 3.: "create_snapshot → send_mail"

Ansonsten bitte mal das Skipt hier herzeigen. Auch die Terminal-Ausgabe für:

ls -l /mnt/raid 
sudo btrfs su li /mnt/raid 

Auch fehlt mir eine Sequenz, die einen älteren Schnappschuss löscht - nicht dass das wegen Überfüllung abgewürgt wird - ich kenne da im Moment nicht die internen Einstellungen.

Weitere Bitte: Da Du Dich ja mit dem Thema BtrFS beschäftigst, schau dort mal rein und gebe mir mal ein Feedback - Danke

gruß syscon-hh

bernhard891

(Themenstarter)

Anmeldungsdatum:
14. November 2011

Beiträge: 129

@ theinlein

1. was macht das env -i genau?

2. hab das mal so ausgeführt wie du geschrieben hast; der Snapshot wird erstellt, er "meckert" nirgens"

@ syscon-hh

diese Bach wird ausgeführt:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/bash

echo ----------------------- >> /var/log/backup_q
echo `date "+%Y-%m-%d %H:%M:%S"`: Mounting Q >> /var/log/backup_q
/backupscripts/mount_q

echo `date "+%Y-%m-%d %H:%M:%S"`: Copying Data >> /var/log/backup_q
/backupscripts/copy >> /var/log/backup_q_tmp 2>&1

echo `date "+%Y-%m-%d %H:%M:%S"`: Unmounting Q >> /var/log/backup_q
/backupscripts/umount_q

echo `date "+%Y-%m-%d %H:%M:%S"`: Creating Snapshot >> /var/log/backup_q
/backupscripts/create_snapshot

echo `date "+%Y-%m-%d %H:%M:%S"`: Backup Done >> /var/log/backup_q
echo `date "+%Y-%m-%d %H:%M:%S"`: Backup Done >> /var/log/backup_q_tmp

 /backupscripts/mail

cat /var/log/backup_q_tmp >> /var/log/backup_q
rm /var/log/backup_q_tmp

und hier die /backupscripts/create_snapshots

1
2
3
4
5
6

#!/bin/bash
datum=`date "+%Y-%m-%d"`

btrfs subvolume snapshot /mnt/raid/vol /mnt/raid/snap_tmp_$datum

syscon-hh

Anmeldungsdatum:
8. Oktober 2005

Beiträge: 10220

Dann tausche im Skript die Positionen:

echo `date "+%Y-%m-%d %H:%M:%S"`: Creating Snapshot >> /var/log/backup_q
/backupscripts/create_snapshot

echo `date "+%Y-%m-%d %H:%M:%S"`: Unmounting Q >> /var/log/backup_q
/backupscripts/umount_q

Dann ist das noch gemounted und zu erreichen!

bernhard891

(Themenstarter)

Anmeldungsdatum:
14. November 2011

Beiträge: 129

syscon-hh schrieb:

Dann tausche im Skript die Positionen Dann ist das noch zu erreichen!

Verstehe ich nicht ganz... was hat der Snapshot mit meinem gemounteten Laufwerk zu tun?

PS: das Laufwerk wird nach /mnt/q gemountet.

syscon-hh

Anmeldungsdatum:
8. Oktober 2005

Beiträge: 10220

unter /mnt/raid ist das btrfs-System gemountet, und vol ist ein Subvolume.

hast Du weiter oben geschrieben. Daraus war nicht zu entnehmen, dass das ein Dauerzustand ist - dann vergiss es!

das Laufwerk wird nach /mnt/q gemountet.

Das widerspricht aber der Aussage von oben!

theinlein

Anmeldungsdatum:
29. Dezember 2007

Beiträge: 1279

env -i startet das Script ohne deine Umgebung. Damit stellst du die Bedingungen her, wie sie Cron in Sachen Umgebung vorfindet.

bernhard891

(Themenstarter)

Anmeldungsdatum:
14. November 2011

Beiträge: 129

ach so, ich sollte das klarstellen:

Das Script Mount und Unmount mountet, bzw. unmountet, nur den Fileserver. das btrfs System ist immer gemountet, das steht in der /etc/fstab.

Sorry für die Verwirrung

@theinlein: okay, das ist seltsam, dass er trotz des Befehls den Snapshot erstellt, aber im Crontab nicht...

theinlein

Anmeldungsdatum:
29. Dezember 2007

Beiträge: 1279

Hi,

was ist mit create_snapshot ?

Macht der Ausgaben? Ggf. wir etwas auf stderr ausgegeben.

Cron versendet dann eine System-Mail. Hast du Mails vom Cron erhalten? Der Empfänger von System-Mails ist normalerweise root.

syscon-hh

Anmeldungsdatum:
8. Oktober 2005

Beiträge: 10220

bernhard891 schrieb:

ach so, ich sollte das klarstellen:

Das Script Mount und Unmount mountet, bzw. unmountet, nur den Fileserver. das btrfs System ist immer gemountet, das steht in der /etc/fstab.

Dann zeige mal (nur) die relevante Zeile der

  • /etc/fstab mit /mnt/raid/vol

und bitte auch noch die Anfragen von oben beantworten. Da stimmt dann etwas nicht, das will ich ja rausbekommen.

...das ist seltsam, dass er trotz des Befehls den Snapshot erstellt, aber im Crontab nicht...

Hast Du da mal reingeschaut, ob da im snapshot_datum wirklich was drin ist?

@theinlein Wenn das BtrFS ist, dann ist sein Befehl schon richtig!

Nachtrag 11.02.: Ich habe das jetzt mal mit einem Btr-Filesystem durchgetestet und es läuft. Allerdings habe ich das Skript direkt in /etc/cron.daily abgelegt → siehe auch meine Ausführungen unter Backup und Replay.

bernhard891

(Themenstarter)

Anmeldungsdatum:
14. November 2011

Beiträge: 129

Guten Morgen allerseits,

hier die /etc/fstab

/dev/sdb1     /mnt/raid    btrfs    device=/dev/sdb1,device=/dev/sdc1,device=/dev/sdd1,device=/dev/sde1,compress        0       0

hab also das gesamte btrfs gemountet, wodurch die Snapshots auch immer gemountet bleiben.

meine /backupscripts/mount führt dann folgendes aus:

1
2
3
4
#!/bin/bash

mount -o credentials=/mnt/.cred //svsp09/q$ /mnt/q
mount -o credentials=/mnt/.cred //svsp01/home /mnt/svsp01_home

braucht ihr noch weitere Scriptteile?

ls -la /mnt/raid

insgesamt 8
dr-xr-xr-x 1 root root  156 2012-02-10 10:15 .
drwxr-xr-x 5 root root 4096 2012-02-10 10:12 ..
drwx------ 1 root root   60 2012-02-01 15:36 snap_2012-02-03
drwx------ 1 root root   60 2012-02-01 15:36 snap_2012-02-06
drwx------ 1 root root   60 2012-02-01 15:36 snap_2012-02-07
drwx------ 1 root root   60 2012-02-01 15:36 snap_2012-02-08
drwx------ 1 root root   60 2012-02-01 15:36 snap_2012-02-10
drwx------ 1 root root  104 2012-02-10 10:15 vol

hier die Ausgabe von btrfs su li /mnt/raid

ID 256 top level 5 path vol
ID 267 top level 5 path snap_2012-02-03
ID 268 top level 5 path snap_2012-02-06
ID 269 top level 5 path snap_2012-02-07
ID 270 top level 5 path snap_2012-02-08
ID 271 top level 5 path snap_2012-02-10

theinlein schrieb:

Cron versendet dann eine System-Mail. Hast du Mails vom Cron erhalten? Der Empfänger von System-Mails ist normalerweise root.

an die stderr hab ich nicht gedacht. wie prüfe ich das mit den System-Mails?

theinlein

Anmeldungsdatum:
29. Dezember 2007

Beiträge: 1279

Systemmails sind ganz normal in der Mailbox drin, die root gehört - sofern der Benutzer root für den Empfang der Systemmails eingerichtet ist (Normalfall).

Du kannst z.B. 'mailx' verwenden

sudo mailx

listet die root-Mailbox.

siehe auch

man mailx

bernhard891

(Themenstarter)

Anmeldungsdatum:
14. November 2011

Beiträge: 129

ahh.. da steht folgendes drin:

/backupscripts/create_snapshot: Zeile 4: btrfs: Kommando nicht gefunden.

heißt das, es würde schon genügen, wenn ich den den Snapshot mit

/sbin/btrfs subvolume snapshot

aufrufe?

syscon-hh

Anmeldungsdatum:
8. Oktober 2005

Beiträge: 10220

Da sind in Deinem System mehrere formale Fehler enthalten - deshalb noch ein paar Fragen bzw. Hinweise:

  • Frage 1

Ist das /dev/sdb1 bis /dev/sde1 ein BtrFS RAID-Verbund oder was soll das sein??

  • Hinweis 2

Wenn das ein"BtrFS RAID-Verbund" ist, dann sollte man das in der /etc/fstab setzen mit:

/dev/sdb1     /mnt/raid    btrfs    defaults,compress     0       0
  • Frage 3

Es fehlt mir die Anbindung des "subvol=vol" an den mount-point, ist das bewusst gewählt? Das ist zwar nicht zwingend erforderlich, hebt aber das Subvolume in die richtige Ebene - also zusätzlich "subvolid=256" in den Optionen der /etc/fstab. Das bedingt dann aber ein grundsätzliches Umdenken bei den Schnappschüssen.

  • Hinweis 4

Die Rechte des "angeblichen" Subvolume vol stimmen nicht bzw. würde ich anders setzen. Wie ich oben geschrieben habe, funktionierte das bei mir einwandfrei - und hier sieht es so aus:

root@SERVER-O-64:/home/laura# ls -la /mnt
insgesamt 4
dr-xr-xr-x 1 root root  14 Feb 11 08:54 .
drwxr-xr-x 1 root root 270 Feb  9 12:19 ..
drwxr-xr-x 1 root root 270 Feb  9 12:19 @
drwxr-xr-x 1 root root 270 Feb  9 12:19 r02-11

Das entspricht chmod 755

  • Frage 5

Warum löscht Du nicht die älteren Schnappschüsse? Das hält unnötig alte Dateien fest und füllt damit die HD's.

Antworten |