如何创建 s3ql 文件系统并在启动时自动挂载?

ks7*_*s78 5 server boot scripts mount

我一直在 Ubuntu 10.04 上试验s3ql,用它来挂载 Amazon S3 存储桶。但是,我真的很喜欢它自动安装它们。有谁知道这是怎么做到的吗?


解决方案:

感谢 s3ql 的Nikratio 的帮助,我终于能够在系统启动时自动挂载 S3 存储桶。你肯定想看看手册,但这里是如何做到这一点的基础知识!

第一步是创建一个 authinfo 文件。此文件应放置在将使用它的用户的主目录中的 .s3ql 目录中。authinfo 文件包含登录信息,允许 s3ql 在没有提示的情况下挂载存储桶。下面是您的 authinfo 文件应该是什么样子的示例。第一行包含您的 Amazon 安全凭证。第二个包含存储桶的位置和密码。如果需要,您可以向该文件添加多个存储桶行,但我在本示例中仅使用一个。此时,存储桶密码可以是任何内容。

backend s3 machine any login YourAWSAccessKeyID password YourAWSSecretAccessKey
storage-url s3://mybucket password EncryptionPasswordOfYourChoosing
Run Code Online (Sandbox Code Playgroud)

encryption_password_of_your_choosing用于通过S3QL加密/解密所有文件写入从S3 /读取。

存储桶名称在所有 AWS 中必须是唯一的:没有两个用户可以使用相同的存储桶名称,因此最好登录 Amazon Web Services 并尝试不同的名称,直到找到可用的名称。一种好的命名方案是使用您将从中访问存储桶的域+服务器的名称(即“staging.example.com”或“east.coast.01.example.com”,或任何合适的名称)。

要创建文件系统,请使用以下命令:

mkfs.s3ql s3://mybucket
Run Code Online (Sandbox Code Playgroud)

它会提示您输入加密密码。这应该与 authinfo 文件中的存储桶密码相同。

现在您的文件系统已创建,您可以使用以下命令挂载它:

mount.s3ql s3://mybucket /mnt/s3/bucket
Run Code Online (Sandbox Code Playgroud)

当然,您的存储桶名称和挂载点会有所不同。

现在,如果我们想在启动时自动挂载这个存储桶,我们需要在 /etc/init.d 中添加一个 upstart 脚本。幸运的是,s3ql 附带了一个,即 s3ql.conf。

我在 mount.s3ql 命令中添加了“--allow-other”,以允许 root 以外的用户访问已安装的存储桶。

#
# 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 <Nikolaus@rath.org>"

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
Run Code Online (Sandbox Code Playgroud)

添加此脚本后,理论上您应该能够重新启动并自动安装您的存储桶,但这是我遇到了麻烦。我的没有安装。

我的问题是由于 upstart 以 root 身份运行脚本,但我以另一个用户身份创建了文件系统。一旦我从我以 /root 身份登录的用户的主目录中复制了 .s3ql 目录,问题就解决了。

我希望这可以帮助其他人。虽然我已经很久没有使用我安装的 S3 存储桶了,但我对我最初的测试结果印象深刻。

另外,这个答案是在找到解决方案后大约一周写的。我想我已经涵盖了所有内容,但是如果您发现我遗漏了一步,请告诉我,我会添加它。您还需要阅读手册,如果您打算使用 s3ql,它确实值得一读。

ks7*_*s78 0

在 Nikratio 的帮助下,我终于能够在启动时自动安装我的 S3 存储桶。我已经用解决方案更新了我的问题。

  • 这确实是答案的地方。惯例建议您应该将答案放在这里。由于“接受”的答案始终列在最前面,因此它始终会立即出现在问题之后。:) (2认同)