web-dev-qa-db-ja.com

s3qlファイルシステムを作成し、ブート時に自動的にマウントする方法

Ubuntu 10.04で s3ql を試し、それを使用してAmazon S3バケットをマウントしました。ただし、それらを自動的にマウントしたいです。誰もそれを行う方法を知っていますか?


解決策:

s3ql のNikratioの協力のおかげで、システムの起動時にS3バケットを自動的にマウントできるようになりました。 manual を見ることは間違いないでしょうが、それを行う方法の基本を以下に示します!

最初のステップは、authinfoファイルを作成することです。このファイルは、使用するユーザーのホームディレクトリ内の.s3qlディレクトリに配置する必要があります。 authinfoファイルには、s3qlがプロンプトなしでバケットをマウントできるようにするログイン情報が含まれています。以下は、authinfoファイルの外観の例です。最初の行には、Amazonセキュリティ認証情報が含まれています。 2番目には、バケットの場所とパスワードが含まれています。必要に応じてこのファイルに複数のバケットラインを追加できますが、この例では1つだけを使用しています。この時点で、バケットのパスワードは何でもかまいません。

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

encryption_password_of_your_choosingは、S3QLがS3からのすべてのファイルの書き込み/読み取りを暗号化/復号化するために使用されます。

バケット名は、AWS全体で一意である必要があります。2人のユーザーが同じバケット名を持つことはできないため、Amazon Webサービスにログインして、使用可能な名前が見つかるまで別の名前を試すことをお勧めします。適切な命名スキームの1つは、バケットにアクセスするドメインとサーバーの名前を使用することです(つまり、「staging.example.com」または「east.coast.01.example.com」、または適切なもの)。

ファイルシステムを作成するには、次のコマンドを使用します。

mkfs.s3ql s3://mybucket

暗号化パスワードの入力を求められます。これは、authinfoファイルのバケットパスワードと同じである必要があります。

ファイルシステムが作成されたので、次のコマンドを使用してマウントできます。

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

もちろん、バケット名とマウントポイントは異なります。

起動時にこのバケットを自動的にマウントする場合は、/ etc/initにupstartスクリプトを追加する必要があります。幸いなことに、s3qlにはs3ql.confが含まれています。

「--allow-other」をmount.s3qlコマンドに追加して、ルート以外のユーザーがマウントされたバケットにアクセスできるようにしました。

#
# 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

このスクリプトを追加した後、理論的には再起動してバケットを自動的にマウントできるはずですが、これは私がトラブルに遭遇したことです。私はマウントされていませんでした。

私の問題は、upstartがrootとしてスクリプトを実行していたという事実が原因でしたが、別のユーザーとしてファイルシステムを作成していました。/rootとしてログインしたユーザーのホームディレクトリから.s3qlディレクトリをコピーすると、問題は解決しました。

これが他の誰かに役立つことを願っています。マウントされたS3バケットを長い間使用していませんが、最初のテストがどのように行われたかに感銘を受けました。

また、この回答は、解決策が見つかってから約1週間後に書かれました。私はすべてをカバーしたと思いますが、ステップを逃したことがわかった場合はお知らせください。追加します。また、 manual も読む必要があります。s3qlを使用する場合は、読む価値があります。

4
ks78

Nikratioの助けを借りて、ブート時にS3バケットを自動的にマウントできるようになりました。ソリューションで質問を更新しました。

1
ks78

最近のUbuntuのインストールでは、起動プロセスの大部分でイベント駆動型の起動システムを使用しているため、起動に移行するのが最善です。/etc/initに次のようなスクリプトがあります。

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

いくつかのテスト作業を行う必要があります。ログの出力リダイレクトがどのように動作するかわかりません。また、ポストストップスクリプトをセットアップしてファイルシステムを適切にアンマウントする必要があるかもしれません。

Upstartのドキュメントは here です。それを使用するFuseベースのパッケージはまだ見つかりませんでしたが、徹底的な検索は行いませんでした。

別の方法として、ファイルシステムのfstabエントリを作成し、mountallエントリを残してマウントの世話をすることもできますが、特定のFuseファイルシステムがネットワーク依存。

0
John Morton