Posts Tagged ‘Backup’

Samstag, 14. April 2018

Ein Backup oder eine alte Version einer Ubiquiti Edgerouter-Konfiguration einspielen

Ich habe bei Bekannten derzeit je ein Ubiquiti Edgerouter X in Betrieb, welche als Router an einem Kabelmodem angeschlossen sind.

Die Router habe ich so konfiguriert, dass sie bei jeder Aktualisierung der Konfiguration über das Web-GUI resp. das CLI ein Backup der vorherigen Konfiguration per TFTP auf einen Linux-Laptop im lokalen Netz ablegen. Dies mit der folgenden Konfiguration:

...
system {
    config-management {
        commit-archive {
            location tftp://10.1.2.3/
        }
        commit-revisions 10
    }
...
}
...

Gestern trat der Notfall ein, dass ich einen der Router komplett zurücksetzen musste und danach eine ältere Version der Konfiguration einspielen wollte.

Dies ist recht trivial: Auf dem Linux-Laptop, auf welchem die Konfiguration versioniert ist, kopiert man das Backup folgendermassen auf den auf Fabrikzustand zurückgesetzten Router:

$ scp config.boot-ROUTER.20180413_133604 ubnt@10.1.2.1:/config

Das Kennwort lautet ubnt und sollte in der so übermittelten Konfiguration zwingend angepasst werden.

Anschliessend verbindet man sich per SSH mit dem Router und führt folgende Befehle aus (compare ist nicht nötig, zeigt aber schön auf, welche Anpassungen zur derzeit aktiven Konfiguration vorgenommen werden):

$ configure
$ load /config/config.boot-ROUTER.20180413_133604
$ commit
[$ compare]
$ save

Quelle: Re: Swap X-SFP to Pro8 – can we upload config.boot from X-SFP?

Siehe auch: EdgeRouter – Archiving and Managing the Configuration Files — Saving and Loading Backup Configurations

Tags: , , , , , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Samstag, 29. Juli 2017

Backup der Raspberry Pi SD-Karte anfertigen

Kürzlich hatte ich während eines Anfalls aus geistiger Umnachtung versucht, meinen Raspberry Pi 3 von Raspbian Jessy auf Raspbian Stretch zu „lüpfen“. Scheiss-Idee. Im Gegensatz zu Debian ist Raspbian Stretch leider noch nicht stabil genug, um auf einem produktiven Raspberry Pi zu laufen.

Nicht nur das, es war tatsächlich so, dass ich zwar seit wohl fünf Jahren hier in der Wohnung einen Raspberry Pi betreibe — und nicht wusste, dass man auf einfachste Weise eine Kopie einer sauber aufgesetzten Raspbian-Installation anfertigen kann.

Das Vorgehen ist im Internet mehrfach beschrieben; ich habe mich an den Artikel Back-up a Raspberry Pi SD card using a Mac gehalten.

Das Vorgehen:

  1. Raspberry Pi herunterfahren
  2. Die SD-Karte mit einer Pinzette aus dem Gerät holen
  3. Die SD-Karte mit einem Adapter an einen Mac (oder Linux-Rechner) anschliessen
  4. Mit diskutil list oder df die Device-Adresse der SD-Karte herausfinden; in meinem Fall /dev/rdisk4
  5. Die gesamte SD-Karte in eine Datei auf dem lokalen Mac klonen:
    # dd if=/dev/rdisk4 of=~/Desktop/emeidi-dashboard.img bs=1m

Fertig! Verbockt man sich in Zukunft den Raspberry Pi, schliesst man einfach wieder die SD-Karte an den Mac an und schreibt das Image zurück.

Dies funktioniert auch wieder auf der Kommandozeile mit dd (mit umgekehrten if– und of-Parametern), doch hier war ich zu Faul und habe stattdessen das quelloffene Etcher mit graphischer Oberfläche und Fortschrittsanzeige verwendet.

Übrigens: Nachdem ich das Image testhalber auf eine zweite SD-Karte zurückgeschrieben und verifiziert hatte, dass der Raspberry Pi 3 vom Backup bootet, habe ich das Image mit ZIP komprimiert und so eine Platzreduktion von 50 Prozent hingekriegt.

Tags: , , , , , , , ,
Labels: Uncategorized

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 28. September 2016

WhatsApp kann nicht auf iCloud backupen

Nachdem ich meinen Mac mini endlich auf OS X 10.11 El Capitan gelüpft hatte, konnte ich endlich auch iCloud Drive über all meine Geräte (Mac mini, MacBook Air, iPhone SE, iPad Air 2, iPad 4) aktivieren.

Leider aber bockt WhatsApp auf meinem iPhone SE und will partout nicht nach iCloud backupen:

whatsapp-iphone-se-ios-10-backing-up

Uploading: 0 bytes of 456.0 MB (0%)

Und genau in diesem Zustand verweilt die Anzeige, minuten- und stundenlang, ohne dass ein einziges Byte in die iCloud hochgeladen wird.

Gestern und heute habe ich ein, zwei Stunden investiert, um dem Problem auf den Grund zu gehen. Leider habe ich die Lösung (noch?) nicht gefunden.

Ein Blick auf dem iPhone SE unter Settings > iCloud > iCloud Drive zeigt, dass iCloud aktiviert ist, WhatsApp der Zugriff auf iCloud erlaubt ist und das iPhone auch über das Mobilfunknetz mit iCloud kommunizieren darf:

iphone-se-icloud-drive-top

iphone-se-icloud-drive-bottom

Soweit so gut. Spannend wird es, wenn ich den iCloud Speicherverbrauch genauer anschaue. Hierzu gehe ich zu Settings > iCloud > Storage > Manage Storage, wo ich unter der Rubrik „DOCUMENTS & DATA“ den Eintrag

WhatsApp Messen… 2.1MB

entdecke:

iphone-se-icloud-manage-storage

Gestern reagierte das iPhone nicht, als ich diesen Eintrag antippte.

Versuch unter iCloud Web

Als nächste loggte ich mich auf die Web-Oberfläche von iCloud ein und versuchte es dort mit einer Bereinigung. Unter Einstellungen fand ich folgendes Dialogfeld:

Apple iCloud Web Reset Documents and Data

Leider klappte das auch nicht:

Apple iCloud Web Could not reset Documents and Data

Versuch unter macOS

Man kann übrigens auch versuchen, das WhatsApp-Backup unter OS X zu entfernen — doch gestern schlug auch das fehl:

os-x-icloud-manage-storage

os-x-icloud-manage-storage-whatsapp

os-x-icloud-manage-storage-whatsapp-delete-documents-and-data

os-x-icloud-manage-storage-whatsapp-delete-documents-and-data-failed-try-again-later

In der Console las ich die nichtssagende Fehlermeldung:

com-apple-preferences-icloud-remoteservice-js_log-error-deletedate-returned-error-code-500

Erneuter Versuch auf dem iPhone

Doch heute gelange ich auf dem iPhone schnurstracks in die Detailansicht:

iphone-se-icloud-manage-storage-whatsapp

Edit angetippt, dann erscheint die Möglichkeit, die Daten zu löschen:

iphone-se-icloud-manage-storage-whatsapp-edit

iphone-se-icloud-manage-storage-whatsapp-delete-all

Dies habe ich soeben getan, und tatsächlich, WhatsApp erscheint nun nicht mehr in der Liste. Immerhin ein Fortschritt zu gestern — wobei ich felsenfest überzeugt war, dass wenn einmal dieses veraltete Backup weg ist das Backup funktionieren wird. Falsch gedacht; WhatsApp hängt immer noch bei 0 Bytes.

Ein kompletter Neustart des Gerätes änderte schlussendlich alles! Als ich den Button Back Up Now anklickte, lud das iPhone nach ein paar Sekunden „Preparing“ Daten in irrer Geschwindigkeit nach iCloud:

whatsapp-chat-backup-preparing-28

whatsapp-chat-backup-uploading-433-2-mb

whatsapp-chat-backup-last-backup-today-at-19-53

Seither kann ich endlich beruhigt sein, bei einem Verlust meines Telefons garantiert noch alle WhatsApp-Mitteilungen als Sicherung auf iCloud zu besitzen:

Die Lösung?

Leider für mich immer noch ein Mysterium. Doch was ich gestern gemacht habe: iCloud Drive auf all meinen Geräten ausgeschaltet, die Geräte heruntergefahren, neugestartet und erst dann wieder eingeschaltet.

Update 2016-11-17: Ich vermute mittlerweile, dass das iOS-Upgrade meines ehrwürdigen iPad 4 das Problem gelöst hat. Meine Hypothese: Da auf dem Gerät noch iOS 9 installiert war, verhinderte das Gerät so, dass meine iCloud upgegradet werden kann. Sobald das Gerät auf iOS 10 migriert war, konnte die von Apple durchgeführte, transparente Migration endlich losgetreten werden.

iCloud Drive-Zugang über iCloud.com

Während dem Debugging-Prozess ist mir aufgefallen, dass ich weder über meinen Mac mini, noch mein iPad Air 2 auf das (webbasierte) iCloud Drive unter iCloud.com zugreifen kann. Folgende Fehlermeldung erscheint:

icloud-com-icloud-drive-there-was-a-problem-loading-the-contents-of-this-folder

There was a problem loading the content of this folder.

Der nette Herr von der Apple Support-Hotline konnte mir heute mit diesem Problem leider auch nicht weiterhelfen. Seine einzige Empfehlung: Cookies löschen und den Mac mini neu starten. Immerhin hat mich Apple angerufen und so den Anruf auf das Mobilfunknetz bezahlt.

Er beharrte zudem darauf, dass ich diesen Screen auf meinem iPad nicht anzeigen lassen könne — doch, kann ich, wenn ich in Safari lange auf dem Reload-Button verharre und dann „Request Desktop Site“ auswähle.

iCloud Drive-Ablage auf dem lokalen Mac

Im Laufe der Untersuchung kam ich zudem auf die Idee, den WhatsApp-Ordner auf iCloud über meinen Mac zu löschen. Das iCloud Drive wird auf meinem Mac mini unter OS X 10.11 in folgendem Verzeichnis gecached:

~/Library/Mobile Documents/

Mit dem Tool Plain Cloud erhält man eine Übersichtsliste in Form eines GUIs:

plain-cloud-whatsapp

Dort habe ich dann auch WhatsApp wiedergefunden, welches im folgenden Pfad liegt (lag):

~/Library/Mobile Documents/57T9237FN3~net~whatsapp~WhatsApp

Der Inhalt gestern (vor rm -rf):

57t9237fn3netwhatsappwhatsapp

Dieses Verzeichnis auf der Kommandozeile von Hand zu löschen brachte gestern leider nicht den gewünschten Erfolg.

brctl

Apple stellt mit brctl ein Kommandozeilentool zur Verfügung (Kommentar von Mendel Kucharzeck vom 11.07.16 um 22:08 Uhr), welches beim Debugging eventuell auch noch weiterhelfen könnte. Hier der Output für gestern:

$ brctl log
[note]    0.000 [2016-09-27 02:40:22.115] sqlite.clientTruth             sync-down.periodic-sync BRCPeriodicSyncOperation.m:137
        scheduled a useless periodic sync
[note]  28798.505 [2016-09-27 10:40:20.620] sqlite.clientTruth             sync-down.periodic-sync BRCPeriodicSyncOperation.m:137
        scheduled a useless periodic sync
[ERROR] 32416.649 [2016-09-27 11:40:38.764] cloudkit.operation.callback    sync.down            BRCSyncDownOperation.m:201
        fetch operation 57T9237FN3.net.whatsapp.WhatsApp error: <CKError 0x7ff7cd9f6220: "Server Rejected Request" (15/6000); server message = "Zone migration failed"; Retry after 43200.0 seconds; uuid = 1CFAE291-105A-4BA7-B0DA-663C5F5EA27F; conta
[note]  56254.108 [2016-09-27 18:17:56.223] brc.sync                       container.scheduler  BRCContainerScheduler.m:819
        received a push for container 57T9237FN3~net~whatsapp~WhatsApp
[note]  56254.412 [2016-09-27 18:17:56.527] brc.sync                       container.scheduler  BRCContainerScheduler.m:808
        received a push for the container-metadata zone
[note]  56261.563 [2016-09-27 18:18:03.677] brc.sync                       container.scheduler  BRCContainerScheduler.m:808
        received a push for the container-metadata zone
[WARN]  56318.506 [2016-09-27 18:19:00.621] cloudkit.operation.callback    sync-down.container-metadata BRCContainerMetadataSyncDownOperation.m:44
        no data in record <CKRecord: 0x7ff7cd6392c0; recordType=AppContainer, recordID=iCloud.com.microsoft.lync2013.iphone:(com.apple.CloudDocs.container-metadata:__defaultOwner__), recordChangeTag=3>
[WARN]  56318.506 [2016-09-27 18:19:00.621] cloudkit.operation.callback    sync-down.container-metadata BRCContainerMetadataSyncDownOperation.m:44
        no data in record <CKRecord: 0x7ff7cd68bb00; recordType=AppContainer, recordID=iCloud.com.kayak.travel:(com.apple.CloudDocs.container-metadata:__defaultOwner__), recordChangeTag=4>
[WARN]  56318.507 [2016-09-27 18:19:00.621] cloudkit.operation.callback    sync-down.container-metadata BRCContainerMetadataSyncDownOperation.m:44
        no data in record <CKRecord: 0x7ff7cd6caad0; recordType=AppContainer, recordID=iCloud.com.reddit.alienblue:(com.apple.CloudDocs.container-metadata:__defaultOwner__), recordChangeTag=5>
[WARN]  56318.507 [2016-09-27 18:19:00.622] cloudkit.operation.callback    sync-down.container-metadata BRCContainerMetadataSyncDownOperation.m:44
        no data in record <CKRecord: 0x7ff7cd631250; recordType=AppContainer, recordID=LWL9XTYF8Q.com.syniumsoftware.macfamilytree7:(com.apple.CloudDocs.container-metadata:__defaultOwner__), recordChangeTag=6>
[WARN]  56318.507 [2016-09-27 18:19:00.622] cloudkit.operation.callback    sync-down.container-metadata BRCContainerMetadataSyncDownOperation.m:44
        no data in record <CKRecord: 0x7ff7cd6392c0; recordType=AppContainer, recordID=iCloud.QW9YDLAY9G.com.hotels.HotelsNearMe:(com.apple.CloudDocs.container-metadata:__defaultOwner__), recordChangeTag=7>
[WARN]  56318.508 [2016-09-27 18:19:00.622] cloudkit.operation.callback    sync-down.container-metadata BRCContainerMetadataSyncDownOperation.m:44
        no data in record <CKRecord: 0x7ff7cd6caad0; recordType=AppContainer, recordID=ZKENARDFWN.com.ifolor.ifolor-designer:(com.apple.CloudDocs.container-metadata:__defaultOwner__), recordChangeTag=8>
[WARN]  56318.508 [2016-09-27 18:19:00.623] cloudkit.operation.callback    sync-down.container-metadata BRCContainerMetadataSyncDownOperation.m:44
        no data in record <CKRecord: 0x7ff7cd631250; recordType=AppContainer, recordID=iCloud.com.getdropbox.Dropbox:(com.apple.CloudDocs.container-metadata:__defaultOwner__), recordChangeTag=9>
[WARN]  56318.509 [2016-09-27 18:19:00.623] cloudkit.operation.callback    sync-down.container-metadata BRCContainerMetadataSyncDownOperation.m:44
        no data in record <CKRecord: 0x7ff7cd68b2e0; recordType=AppContainer, recordID=com.apple.mobilemail:(com.apple.CloudDocs.container-metadata:__defaultOwner__), recordChangeTag=a>
[WARN]  56318.509 [2016-09-27 18:19:00.623] cloudkit.operation.callback    sync-down.container-metadata BRCContainerMetadataSyncDownOperation.m:44
        no data in record <CKRecord: 0x7ff7cd6392c0; recordType=AppContainer, recordID=L996Q9B5UB.com.landi.weather:(com.apple.CloudDocs.container-metadata:__defaultOwner__), recordChangeTag=b>
[WARN]  56318.509 [2016-09-27 18:19:00.624] cloudkit.operation.callback    sync-down.container-metadata BRCContainerMetadataSyncDownOperation.m:44
        no data in record <CKRecord: 0x7ff7cd68b2e0; recordType=AppContainer, recordID=iCloud.com.apple.iBooks:(com.apple.CloudDocs.container-metadata:__defaultOwner__), recordChangeTag=c>
[WARN]  56318.509 [2016-09-27 18:19:00.624] cloudkit.operation.callback    sync-down.container-metadata BRCContainerMetadataSyncDownOperation.m:44
        no data in record <CKRecord: 0x7ff7cd68bb00; recordType=AppContainer, recordID=F6266T9T75.com.apple.iMovie:(com.apple.CloudDocs.container-metadata:__defaultOwner__), recordChangeTag=d>
[WARN]  56318.510 [2016-09-27 18:19:00.625] cloudkit.operation.callback    sync-down.container-metadata BRCContainerMetadataSyncDownOperation.m:44
        no data in record <CKRecord: 0x7ff7ca980b30; recordType=AppContainer, recordID=com.apple.Numbers:(com.apple.CloudDocs.container-metadata:__defaultOwner__), recordChangeTag=e>
[WARN]  56318.510 [2016-09-27 18:19:00.625] cloudkit.operation.callback    sync-down.container-metadata BRCContainerMetadataSyncDownOperation.m:44
        no data in record <CKRecord: 0x7ff7c860c6c0; recordType=AppContainer, recordID=com.apple.QuickTimePlayerX:(com.apple.CloudDocs.container-metadata:__defaultOwner__), recordChangeTag=f>
[WARN]  56318.511 [2016-09-27 18:19:00.625] cloudkit.operation.callback    sync-down.container-metadata BRCContainerMetadataSyncDownOperation.m:44
        no data in record <CKRecord: 0x7ff7c8610550; recordType=AppContainer, recordID=com.apple.Preview:(com.apple.CloudDocs.container-metadata:__defaultOwner__), recordChangeTag=g>
[WARN]  56318.511 [2016-09-27 18:19:00.626] cloudkit.operation.callback    sync-down.container-metadata BRCContainerMetadataSyncDownOperation.m:44
        no data in record <CKRecord: 0x7ff7cd906ac0; recordType=AppContainer, recordID=com.apple.Notes:(com.apple.CloudDocs.container-metadata:__defaultOwner__), recordChangeTag=h>
[WARN]  56318.511 [2016-09-27 18:19:00.626] cloudkit.operation.callback    sync-down.container-metadata BRCContainerMetadataSyncDownOperation.m:44
        no data in record <CKRecord: 0x7ff7c860c6c0; recordType=AppContainer, recordID=8YE23NZS57.com.kayak.travel:(com.apple.CloudDocs.container-metadata:__defaultOwner__), recordChangeTag=i>
[WARN]  56318.512 [2016-09-27 18:19:00.626] cloudkit.operation.callback    sync-down.container-metadata BRCContainerMetadataSyncDownOperation.m:44
        no data in record <CKRecord: 0x7ff7c8610550; recordType=AppContainer, recordID=com.apple.Pages:(com.apple.CloudDocs.container-metadata:__defaultOwner__), recordChangeTag=j>
[WARN]  56318.512 [2016-09-27 18:19:00.627] cloudkit.operation.callback    sync-down.container-metadata BRCContainerMetadataSyncDownOperation.m:44
        no data in record <CKRecord: 0x7ff7c860c6c0; recordType=AppContainer, recordID=iCloud.com.tinyspeck.chatlyio:(com.apple.CloudDocs.container-metadata:__defaultOwner__), recordChangeTag=k>
[WARN]  56318.512 [2016-09-27 18:19:00.627] cloudkit.operation.callback    sync-down.container-metadata BRCContainerMetadataSyncDownOperation.m:44
        no data in record <CKRecord: 0x7ff7c8610550; recordType=AppContainer, recordID=com.apple.mail:(com.apple.CloudDocs.container-metadata:__defaultOwner__), recordChangeTag=l>
[WARN]  56318.513 [2016-09-27 18:19:00.627] cloudkit.operation.callback    sync-down.container-metadata BRCContainerMetadataSyncDownOperation.m:44
        no data in record <CKRecord: 0x7ff7cd9e2800; recordType=AppContainer, recordID=com.apple.TextEdit:(com.apple.CloudDocs.container-metadata:__defaultOwner__), recordChangeTag=m>
[WARN]  56318.513 [2016-09-27 18:19:00.628] cloudkit.operation.callback    sync-down.container-metadata BRCContainerMetadataSyncDownOperation.m:44
        no data in record <CKRecord: 0x7ff7c8610550; recordType=AppContainer, recordID=57T9237FN3.net.whatsapp.WhatsApp:(com.apple.CloudDocs.container-metadata:__defaultOwner__), recordChangeTag=n>
[WARN]  56318.513 [2016-09-27 18:19:00.628] cloudkit.operation.callback    sync-down.container-metadata BRCContainerMetadataSyncDownOperation.m:44
        no data in record <CKRecord: 0x7ff7c860c6c0; recordType=AppContainer, recordID=37GSA6A9EQ.com.benkazez.FlightTrack:(com.apple.CloudDocs.container-metadata:__defaultOwner__), recordChangeTag=o>
[WARN]  56318.514 [2016-09-27 18:19:00.628] cloudkit.operation.callback    sync-down.container-metadata BRCContainerMetadataSyncDownOperation.m:44
        no data in record <CKRecord: 0x7ff7c8611e30; recordType=AppContainer, recordID=CZF32S63U5.com.phaidon.wallpaperParis:(com.apple.CloudDocs.container-metadata:__defaultOwner__), recordChangeTag=p>
[WARN]

Spannend ist insbesondere dieser Eintrag mit dem Fehler „Zone migration failed“:

[ERROR] 32416.649 [2016-09-27 11:40:38.764] cloudkit.operation.callback    sync.down            BRCSyncDownOperation.m:201
        fetch operation 57T9237FN3.net.whatsapp.WhatsApp error: <CKError 0x7ff7cd9f6220: "Server Rejected Request" (15/6000); server message = "Zone migration failed"; Retry after 43200.0 seconds; uuid = 1CFAE291-105A-4BA7-B0DA-663C5F5EA27F; conta
[note]  56254.108 [2016-09-27 18:17:56.223] brc.sync                       container.scheduler  BRCContainerScheduler.m:819
        received a push for container 57T9237FN3~net~whatsapp~WhatsApp
[note]  56254.412 [2016-09-27 18:17:56.527] brc.sync                       container.scheduler  BRCContainerScheduler.m:808
        received a push for the container-metadata zone
[note]  56261.563 [2016-09-27 18:18:03.677] brc.sync                       container.scheduler  BRCContainerScheduler.m:808
        received a push for the container-metadata zone

Tags: , , , , , , , , , , ,
Labels: Apple

3 Kommentare | neuen Kommentar verfassen

Freitag, 16. August 2013

MySQL-Passwörter nicht in cron-Job Kommandozeilen hinterlegen

Seit längerem habe ich mich gestört, dass in den von cron versendeten E-Mails mit dem Status des Datenbank Backup-Scripts der Benutzername und das Passwort des verwendeten Datenbankbenutzers im Klartext stehen.

Dank einer Frage auf Superuser.com konnte ich diese „Unschönheit“ beheben.

Im Home-Verzeichnis meines Hosting-Benutzers habe ich eine Datei namens .my.cnf angelegt. Deren Inhalt:

[client]
user=username
password=password

username und password müssen selbstverständlich mit gültigen Zugangsdaten ersetzt werden.

Ganz wichtig: Die Datei ist mittels folgendem Befehl nur für den Owner lesbar zu machen:

$ chmod 600 ~/.my.cnf

Anschliessend habe ich mein Backup-Script umgebaut. Dort steht nun neu:

...
OPTS=""
OPTS="$OPTS --defaults-file=/home/sitename/.my.cnf"

echo ""
echo "Running $MYSQLDUMP $OPTS $DATABASE > $DUMPFILE"

$MYSQLDUMP $OPTS $DATABASE > $DUMPFILE

Der Vorteil dieser Lösung: Selbst wenn der Sysadmin des Servers mittels ps ax alle auf dem Web-Server laufenden Prozesse (und so je nach Zeitpunkt auch meinen cron-Job) angezeigt erhält, steht auch dort nichts von einem Passwort oder gar Benutzernamen.

Tags: , , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Samstag, 11. Februar 2012

curlftps mit Zeichensatz-Problemen

Ich ziehe mir wöchentlich ein Backup eines produktiven Web-Servers auf meinen Testserver. Da Endbenutzer Dateien auf die Web-Site laden und Ordner erstellen können, gibt es dort mittlerweile auch Dateinamen mit Sonderzeichen wie äöü.

Die Kombination aus curlftps (zur Bereistellung eines FTP-Mounts welcher wie eine lokale Festplatte angesprochen werden kann, zu Gunsten von rsync, mit welchem ich nur neu hinzugekommene Dateien übertrage) hat nun aber zu Problemen bei der Darstellung der Dateien mit Sonderzeichen geführt. Anstelle des ä bei „Bräteln“ sah ich auf der Kommandozeile mit ls nur „Br?teln“.

Seit ich curlftps mit folgenden Optionen aufrufe, klappt es auch mit der korrekten Übertragung der Dateinamen mit Sonderzeichen:

/usr/bin/curlftpfs -o codepage=latin1 -o iocharset=utf8 -r -s 'server.tld' '/mnt/ftpBackup/server.tld'

Damit wird tarsnap hoffentlich auch nicht mehr mit folgenden Fehlermeldungen auffallen:

...
tarsnap: var/www/sites/server.tld/Bilder/T�ftelwettbewerb/: Can't translate pathname 'var/www/sites/server.tld/Bilder/T�ftelwettbewerb/' to UTF-8
...

Übrigens: Meine locale-Einstellungen schauen folgender massen aus:

LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

Tags: ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Samstag, 4. Juni 2011

Manuell ein TimeMachine sparsebundle-Image anlegen

Für meinen betagten PowerMac G5 sah der Befehl folgendermassen aus:

$ hdiutil create -size 500g -fs HFS+J -volname "BETA" beta_000a95XXXXXX.sparsebundle

… wobei ich aus Datenschutzgründen die MAC-Adresse mittels „X“-Zeichen unkenntlich gemacht habe.

Das damit erstellte Image kann man anschliessend auf einer Samba-Freigabe auf einem Server ablegen und als TimeMachine-Ziel benutzen. Bei mir klappte diese Art von Backup einige Monate, bis das Image irgendwie korrumpiert wurde. Seither fahre ich kein TimeMachine-Backup mehr.

Vielleicht bringt ja die WWDC-Keynote 2011 eine interessante neue Möglichkeit (iCloud?), um Backups zu fahren.

Tags: , ,
Labels: Apple

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 26. Dezember 2010

Netgear ReadyNAS Duo mit eigener FTP-Backuproutine sichern

Die Gründe hinter einem solchen Vorhaben können vielfältig sein — aber wer will es einem Linux-Hacker verübeln, wenn er sich des in einem ReadyNAS Duo werkelnde (aber völlig veraltete) Debian GNU/Linux‘ bemächtigen will?

Pakete nachinstallieren

Von der ReadyNAS-Web-Site lädt man sich zwei Binärpakete herunter, die mit der Installation über die Web-Oberfläche des Gerätes a) den Root-Zugang und b) apt-get nachrüsten:

Tipps

  • Falls die Download-Links nicht mehr funktionieren, schaut man am Besten unter Add-ons for RAIDiator 4.1.3+ nach. Klappt dieser Link auch nicht, hangelt man sich über die Web-Site via
    Support > Downloads > ReadyNAS Add-Ons > Add-ons for RAIDiator 4.1.3+
    durch.
  • Das Root-Passwort entspricht dem Administrator-Passwort, welches man zum Login auf der Web-Oberfläche verwendet.

lftp nachrüsten

Für das Backup der lokal auf dem NAS gespeicherten Daten auf einen entfernten FTP-Server habe ich mich für das Tool lftp entschieden:

# apt-get install lftp

Backup-Script einrichten

Damit man die Datensicherung automatisieren kann, sollte man unter /usr/local/bin/backup-emeidi.sh folgendes Script ablegen und gemäss seinen eigenem Gutdünken anpassen:

#!/bin/bash    

HOST="www.host.tld"
USER="user"
PASS="pass"
LCD="/c/"
RCD="/"

echo "---------------------------------------------------------------------"
echo "Backing up $LCD to $HOST/backup$RCD with user $USER"
echo "---------------------------------------------------------------------"
echo `date`
echo "---------------------------------------------------------------------"

lftp -c "
open ftp://$USER:$PASS@$HOST; 
lcd $LCD;
cd $RCD;
mirror --reverse \
       --verbose \
       --no-perms \
       --no-umask \
       --ignore-time"

echo "---------------------------------------------------------------------"
echo "Backup finished."
echo "---------------------------------------------------------------------"
echo `date`
echo "---------------------------------------------------------------------"
echo ""

exit 0

Die Variable LCD speichert das lokale Verzeichnis, die Variable RCD das entfernte (auf dem FTP-Server liegende) Verzeichnis.

Am Ende macht man das Script mittels folgendem Befehl ausführbar:

# chmod 755 /usr/local/bin/backup-emeidi.sh

Cron-Job einrichten

Damit das Script nun täglich einmal mitten in der Nacht ausgeführt wird, erstellt man sich unter /etc/cron.d/backup-emeidi einen entsprechenden Cron-Job:

...
0 1     * * *   root    /usr/local/bin/backup-emeidi.sh | mail -s "Backup ReadyNAS" -c syslog@server.tld syslog@customer.tld
...

Dieser Cron-Job wird täglich um 1 Uhr morgens gestartet und mailt das Ergebnis an syslog@customer.tld wie auch an syslog@server.tld. So kann der Sysadmin, wie auch der Kunde, täglich die Ergebnisse des Backuplaufes überprüfen.

Problem

Bei meinem Kunden werden lustigerweise gewisse Dateien in jeder Nacht gebackupt, obwohl diese nachweislich nicht verändert wurden. Ich vermute hier einen Bug in lftp.

Tags: , , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen