it-swarm.com.de

Wie erstelle ich ein S3QL-Dateisystem und mounte es automatisch beim Booten?

Ich habe mit s3ql unter Ubuntu 10.04 experimentiert und es zum Mounten von Amazon S3-Buckets verwendet. Ich möchte jedoch wirklich, dass sie automatisch eingehängt werden. Weiß jemand, wie man das macht?


Lösung:

Dank der Hilfe von Nikratio von s3ql bin ich endlich in der Lage, S3-Buckets automatisch zu montieren, wenn das System hochfährt. Sie werden sich auf jeden Fall das Handbuch ansehen wollen, aber hier sind die Grundlagen, wie es gemacht wird!

Der erste Schritt ist das Erstellen einer Authinfo-Datei. Diese Datei sollte in einem .s3ql-Verzeichnis im Home-Verzeichnis des Benutzers abgelegt werden, der sie verwenden wird. Die authinfo-Datei enthält Anmeldeinformationen, mit denen s3ql ohne Aufforderung Buckets bereitstellen kann. Unten sehen Sie ein Beispiel, wie Ihre authinfo-Datei aussehen sollte. Die erste Zeile enthält Ihre Amazon-Sicherheitsdaten. Die zweite enthält den Speicherort und das Kennwort für Ihren Eimer. Sie können dieser Datei bei Bedarf mehrere Bucket-Zeilen hinzufügen, in diesem Beispiel verwende ich jedoch nur eine. Zu diesem Zeitpunkt kann das Bucket-Passwort ein beliebiges sein.

backend s3 machine any login YourAWSAccessKeyID password YourAWSSecretAccessKey
storage-url s3://mybucket password EncryptionPasswordOfYourChoosing

Das encryption_password_of_your_choosing wird von S3QL verwendet, um alle Datei-Schreib-/Lesevorgänge von S3 zu verschlüsseln/entschlüsseln.

Der Bucket-Name muss in allen AWS eindeutig sein: Kein Benutzer kann denselben Bucket-Namen haben. Melden Sie sich daher bei Amazon Web Services an und probieren Sie verschiedene Namen aus, bis Sie einen gefunden haben, der verfügbar ist. Ein gutes Benennungsschema besteht darin, den Namen der Domäne + des Servers zu verwenden, von dem aus Sie auf den Bucket zugreifen (d. H. "Staging.example.com" oder "east.coast.01.example.com" oder was auch immer geeignet ist).

Verwenden Sie den folgenden Befehl, um das Dateisystem zu erstellen:

mkfs.s3ql s3://mybucket

Sie werden aufgefordert, Ihr Verschlüsselungskennwort einzugeben. Dies sollte dasselbe sein wie das Bucket-Passwort in der Authinfo-Datei.

Nachdem Ihr Dateisystem erstellt wurde, können Sie es mit dem folgenden Befehl bereitstellen:

mount.s3ql s3://mybucket /mnt/s3/bucket

Ihr Bucket-Name und der Mount-Punkt variieren natürlich.

Wenn wir diesen Bucket jetzt automatisch beim Booten bereitstellen möchten, müssen wir ein Startskript zu/etc/init hinzufügen. Glücklicherweise wird s3ql mit einer s3ql.conf ausgeliefert.

Ich habe dem Befehl mount.s3ql "--allow-other" hinzugefügt, damit andere Benutzer als root auf den gemounteten Bucket zugreifen können.

#
# This file can be placed in /etc/init. It defines an upstart job that
# takes care of mounting and unmounting an S3QL file system.
# 
description "S3QL Backup File System"
author      "Nikolaus Rath <[email protected]>"

start on (filesystem and net-device-up IFACE=eth0)
stop on runlevel [016]

env BUCKET="s3://mybucket"
env MOUNTPOINT="/mnt/s3/bucket"

expect stop

script
    # Redirect stdout and stderr into the system log
    DIR=$(mktemp -d)
    mkfifo "$DIR/LOG_FIFO"
    logger -t s3ql -p local0.info < "$DIR/LOG_FIFO" &
    exec > "$DIR/LOG_FIFO"
    exec 2>&1
    rm -rf "$DIR"

    # Check and mount file system
    fsck.s3ql --batch "$BUCKET"
    exec mount.s3ql --upstart --allow-other "$BUCKET" "$MOUNTPOINT"
end script

pre-stop script
    umount.s3ql "$MOUNTPOINT"
end script

Nachdem Sie dieses Skript hinzugefügt haben, sollten Sie theoretisch in der Lage sein, einen Neustart durchzuführen und Ihren Bucket automatisch zu aktivieren. Meins wurde nicht bestiegen.

Mein Problem wurde durch die Tatsache verursacht, dass upstart das Skript als Root ausführte, aber das Dateisystem als anderer Benutzer erstellt hatte. Nachdem ich das .s3ql-Verzeichnis aus dem Ausgangsverzeichnis des Benutzers kopiert hatte, bei dem ich als/root angemeldet war, wurde das Problem behoben.

Ich hoffe das hilft jemand anderem da draußen. Obwohl ich meinen montierten S3-Löffel schon lange nicht mehr benutze, bin ich beeindruckt, wie meine ersten Tests verlaufen sind.

Diese Antwort wurde auch ungefähr eine Woche nach der Lösungsfindung geschrieben. Ich denke, ich habe alles abgedeckt, aber wenn Sie feststellen, dass ich einen Schritt verpasst habe, lassen Sie es mich wissen und ich werde ihn hinzufügen. Du solltest auch das manual lesen, das es wirklich wert ist, gelesen zu werden, wenn du s3ql verwenden willst.

4
ks78

Mit Hilfe von Nikratio kann ich meinen S3-Bucket nun automatisch beim Booten aktivieren. Ich habe meine Frage mit der Lösung aktualisiert.

1
ks78

Moderne Ubuntu-Installationen verwenden für einen Großteil des Startvorgangs das ereignisgesteuerte Upstart-System. Sie hätten ein Skript in/etc/init, das ungefähr so ​​aussehen würde:

description     "S3FS"

start on (filesystem
        and net-device-up IFACE!=lo)
stop on runlevel[!2345]

console output
expect fork
respawn

script
    # Redirect stdout and stderr into the system log
    DIR=$(mktemp -d)
    mkfifo "$DIR/LOG_FIFO"
    logger -t s3ql -p local0.info < "$DIR/LOG_FIFO" &
    exec > "$DIR/LOG_FIFO"
    exec 2>&1
    rm -rf "$DIR"

    modprobe Fuse
    fsck.s3ql --batch s3://mybucket
    exec mount.s3ql --allow-other s3://mybucket /mnt/s3fs
end script

Sie müssen einige Tests durchführen. Ich weiß nicht, wie sich die Ausgabeumleitung für die Protokollierung verhält, und möglicherweise müssen Sie ein Post-Stop-Skript einrichten, um die Bereitstellung des Dateisystems ordnungsgemäß aufzuheben.

Die Dokumentation zum Upstart ist hier . Ich habe noch kein Fuse-basiertes Paket gefunden, das es verwendet, aber ich habe keine umfassende Suche durchgeführt.

Eine Alternative könnte darin bestehen, einen fstab-Eintrag für das Dateisystem zu erstellen, damit die mountall-Einträge für Sie bereitgestellt werden, aber ich weiß nicht, ob es eine Möglichkeit gibt, das Dateisystem von Fuse anzugeben netzwerkabhängig.

0
John Morton