Backup mit Google Cloud Storage (Nearline/Coldline)
Google bietet im Rahmen der Google Cloud Storage zwei Tarife (Coldline und Nearline) speziell für Backups an. Coldline ist für langfristige Backups gedacht auf die weniger als einmal im Jahr zugegriffen wird. Nearline für Daten die seltener als einmal im Monat gebraucht werden.
Die (abrechnungstechnische) Mindesthaltezeit für Coldline sind 90 Tage, bei Nearline sind es 30 Tage. Der Abruf von Daten bei Coldline ist teurer als bei Nearline (0,05$/GB vs. 0,01$/GB), dafür ist die Datenhaltung etwas günstiger (0,007$/GB vs. 0,01$/GB).
Eine Beispielrechnung:
Gespeichert werden 1 TB über Coldline in einer US-Region. Die Daten werden nach 60 Tagen gelöscht. Insgesamt zahlt man hierfür 21,- $. Nämlich einmal 14,- (0,007 $ 1.000 GB 2 Monate) und einmal 7,- $ (0,007 $ 1.000 GB 1 Monat), da die Daten vor Ablauf der 90 Tage entfernt wurden.
Bei Nearline wären es 20,- $ gewesen (0,01 $ 1.000 GB 2 Monate), da die 30-Tage Mindesthaltezeit bereits abgelaufen wäre.
Bis 5 GB ist der Speicherplatz kostenlos, desweiteren sind 5.000 Class A Operations und 50.000 Class B Operations inbegriffen. Class A umfasst z.B. die Anfrage für das Auflisten von Dateien in einem Bucket, aber auch das Speichern von Daten (storage..insert). Man sollte daher also nicht kleine Einzeldateien hochladen sondern große Archive z.B. tarballs. Die Anfrage zum Herunterladen von Daten fällt dann in die Class B Operations (storage..get). Das hochladen von Archiven bietet sich schon allein deswegen an, weil man die Daten vor dem Upload verschlüsseln sollte. Das Löschen von Daten/Buckets ist immer kostenfrei.
Um die Google Cloud Storage zu nutzen installiert man zunächst das Google Cloud SDK (gsutil):
curl https://sdk.cloud.google.com | bash
Für Debian/Ubuntu steht alternativ auch ein Repository bereit: https://cloud.google.com/storage/docs/gsutil_install#deb
Ist die Installation vollzogen führt man den Befehl gcloud init aus und beantwortet die dort gestellten Fragen.
Nun muss ein sog. Bucket angelegt werden um dort Daten ablegen zu können. Ein Bucket ist einem Storage-Type (Coldline/Nearline) und einer Region zugeordnet:
gsutil mb -c nearline -l europe-west1 gs://21x9
Anschließend können die Daten hochgeladen werden:
gsutil -m rsync -d -r /backup gs://21x9
Ein Restore der Daten erfolgt dann über:
gsutil -m rsync gs://21x9 /restore
Anders als z.B. bei Amazon Glacier stehen die Daten unmittelbar zum Restore zur Verfügung. Natürlich ist es auch möglich nur einzelne Dateien oder Verzeichnisse aus dem Backup zu laden:
gsutil -m rsync gs://21x9/data.tar.gz.crypt /restore
Eine Liste der gespeicherten Daten kann mit gsutil ls gs://21x9
angefordert werden, mit der Option -r
kann die Ausgabe recursiv erfolgen, die Option -d
sorgt dafür dass nur Verzeichnisse angezeigt werden, die Option -l zeigt weitere Informationen zu den Objekten an.
Ein kleines Backupscript könnte z.B. wie folgt aussehen:
#!/bin/bash
echo -n "### Init"
date=$(date +"%u") # Creates a subdirectory inside your bucket for each day of the week to keep 7 daily backup generations
crypt_key="/path/filename" # Keyfile for ccrypt use: "pwgen -1 4096 > /path/filename" to create one
bucket="bucket_name" # Backup bucket on Google Cloud Storage
mail="backup-notifications@example.com" # Recipient for status mails
gsutil="/path/gsutil" # Path to Google Cloud SDK (gsutil)
source="/home" # Path/Filename to upload
target="/backup" # Local target for backup files
if [ ! -f /usr/bin/ccrypt ]; then
apt-get install ccrypt -y --force-yes
fi
if [ ! -f ${crypt_key} ]; then
echo "${crypt_key} does not exist, aborting...
exit 1
fi
result=0
echo " [OK]"
echo -n "### Housekeeping"
mkdir -p ${target}
result=${result}$?
rm -f /backup/*.cpt
result=${result}$?
echo " [OK]"
echo -n "### Create Tarballs"
/bin/tar -cpf /backup/data.tar.gz --directory=${source} .
result=${result}$?
echo " [OK]"
echo -n "### Crypt Tarballs"
/usr/bin/ccrypt -e -f -k ${crypt_key} ${target}/data.tar.gz
result=${result}$?
echo " [OK]"
echo "### Upload Tarballs"
${gsutil} -m rsync -r ${target} gs://${bucket}/${date}
result=${result}$?
if [[ ${result} =~ ^[0]+$ ]]; then
${gsutil} du -hs gs://${bucket} | /usr/bin/mail -s "Backup success" ${mail}
echo "Success: ${result}"
exit 0
else
echo "Backup Error: ${result}" | /usr/bin/mail -s "BACKUP ERROR" ${mail}
echo "There was an error..."
exit 128
fi
Generell ist Nearline/Coldline einfach zu nutzen und recht kostengünstig. Wie bei vergleichbaren Backupdiensten (z.B. Amazon Glacier) ist es etwas umständlich ein gemachtes Backup zu verifizieren und ggf. verursacht dies Zusatzkosten.