Achtung bei EBS-Snapshots vom Windows Root-Volume

Am vergangenen Freitag haben wir einen Disaster-Recovery-Test bei einem unserer Kunden durchgeführt und haben in diesem Zuge einen schwerwiegenden Fehler im Zusammenhang mit EBS-Snapshots festgestellt.

Im Rahmen des Backup-Plans des Kunden werden nachts automatisiert EBS-Snapshots von allen EBS-Root-Volumes der Windows-Instanzen erstellt, die Instanzen sind währenddessen weiterhin im Betrieb.

Während des Recovery-Tests wollten wir nun mit Hilfe eines EBS-Snapshots das Windows Root-Volume wiederherstellen und mussten feststellen, dass dieser und alle anderen erstellten EBS-Snapshots inkonsistent und unbrauchbar waren.

Nachdem wir Kontakt mit dem AWS Support hatten und einige weitere Tests mit EBS-Snapshots und Windows-/Linux-Instanzen durchgeführt hatten konnten wir folgende Punkte festhalten:

  • Snapshots vom Root-Volume einer Windows-Instanz können aktuell nur im „stopped“-State erstellt werden.
  • Snapshots vom Root-Volume einer Windows-Instanz die im „running“-State erstellt werden, sind inkonsistent und unbrauchbar.
  • Snapshots von zusätzlichen Volumes einer Windows-Instanz sind von dem Problem generell nicht betroffen.
  • Snapshots vom Root-Volume und zusätzlichen Volumes einer Linux-Instanz sind generell auch nicht betroffen.

Eine Ursache für das Problem scheint laut AWS Support der Windows DMA IRQ Pool zu sein, in welchem das Root-Volume registriert und gelockt ist. Dieser Pool wird beim Herunterfahren der Instanz geleert.

Der AWS-Support bearbeitet dieses Problem momentan intern und informiert uns über Neuigkeiten zu diesem Thema.

Amazon S3 und Amazon Glacier im Zusammenspiel

Seit dem 14.11.2012 ist nun die angekündigte Verbindung zwischen Amazon S3 und Amazon Glacier verfügbar. Beide zusammen sind ein unschlagbares Team …

Amazon S3 ist ein Cloud-Speicher und hat aufgrund der Redundanz über mehrere Availability-Zonen eine sehr hohe Verfügbarkeit von 99,999999999%, kostest 0,125 US$ pro GByte / Monat  und hat einen schnellen Lese- und Schreibzugriff über HTTPS. Kunden nutzen Amazon S3 in der Regel für die Ablage von Videos, Bildern oder Datensicherungen. Allerdings summieren sich die Kosten bei sehr grossen Datenmengen entsprechend und nicht alle Daten müssen stets sofort wieder im Lesezugriff sein.

Aus diesem Grund hat Amazon mit dem Dienst Amazon Glacier einen Cloud-Speicher für langfrist-Archive seit Sommer 2012 im Angebot. Auch Amazon Glacier hat aufgrund der Redundanz über mehrere Availability-Zonen eine sehr hohe Verfügbarkeit von 99,999999999%, kostet aber nur 0,011 US$ pro GByte / Monat, also ungefähr ein 1/10 von Amazon S3. Der wesentliche Unterschied ist, das Daten nach Amazon Glacier über HTTPS schnell eingestellt werden können, der Abruf der Daten von Amazon Glacier aber angefordert werden muss, anschließend wird innerhalb von 3-4 Stunden ein Download-Link zur Verfügung gestellt, das reduziert das Einsatzszenario wirklich nur auf Archiv-Daten.

(mehr …)

EBS-Volumes mit einem Windows-Script als Snapshot sichern

Um dieses Skript auszuführen, müssen die Bitnami Cloud Tools installiert sein. (siehe diesen Artikel). Anschließend erstellt man im Root Verzeichnis der Bitnami Cloud Tools eine AWS-Backup.bat Datei und fügt dort das folgende Skript ein:

@echo off

CALL "D:\AWS-BI~1\scripts\setenv.bat"
CALL "D:\AWS-BI~1\aws-setenv.bat"

:: Path for your AWS home directory
set AWS_HOME=D:\AWS-BI~1\
:: Hier wird der Endpunkt für die Region EU gesetzt.
set EC2_URL=https://ec2.eu-west-1.amazonaws.com:443

cd "D:\AWS-BitNami"

:: Set today's day of week parameter, German Date with . otherwise /
for /F "tokens=1 delims=. " %%a in ('DATE/T') do set dateDayOfMonth=%%a

:: Create a file with all attached volumes
ec2-describe-volumes|find /i "attached">%AWS_HOME%\Volumes.txt

:: Create a file with old scheduled snapshots using same day of week parameter
ec2-describe-snapshots|find /i "%dateDOW%: Daily Backup for">%AWS_HOME%\SnapshotsDOM.txt

:: Create a file of instances filtering on the instance tag Name
ec2-describe-instances|find /i "TAG"|find /i "Name">%AWS_HOME%\InstanceNames.txt

:: Create snapshots of all attached volumes
for /F "tokens=2,3" %%d IN (%AWS_HOME%\Volumes.txt) do for /F "tokens=3,5" %%a IN (%AWS_HOME%\InstanceNames.txt) do if %%a EQU %%e ec2-create-snapshot %%d -d "%dateDayOfMonth%: Daily Backup for %%b (VolID:%%d InstID:%%e)"

::Delete old Snapshots listet in SnapshotsDOM.txt
for /F "tokens=2" %%i in (%AWS_HOME%\SnapshotsDOM.txt) do ec2-delete-snapshot %%i

pause

Das ganze Skript basiert auf einer Vorlage von Mark Sehmer, ich habe nur ein paar Änderungen durchgeführt, damit es bei mir auch funktioniert.