Amazon S3 和 Google Cloud Storage 之类的商业云存储服务以能接受的价格供给了高可用性、可扩展、无限容量的目标存储服务。为了加快这些云产品的广泛选用,这些供给商为他们的产品经过清晰的 API 和 SDK 培养了一个杰出的开发者生态体系。而根据云的文件体系就是这些活泼的开发者社区中的典型产品,现已有了好几个开源的完成。
S3QL 就是最盛行的开源云端文件体系之一。它是一个根据 FUSE 的文件体系,供给了好几个商业或开源的云存储后端,比方 Amazon S3、Google Cloud Storage、Rackspace CloudFiles,还有 OpenStack。作为一个功用完好的文件体系,S3QL 具有不少强壮的功用:最大 2T 的文件巨细、紧缩、UNIX 特点、加密、根据写入时仿制的快照、不可变树、重复数据删去,以及软、硬链接支撑等等。写入 S3QL 文件体系任何数据都将首要被本地紧缩、加密,之后才会传输到云后端。当你企图从 S3QL 文件体系中取出内容的时分,假如它们不在本地缓存中,相应的目标会从云端下载回来,然后再即时地解密、解紧缩。
需求清晰的是,S3QL 确实也有它的约束。比方,你不能把同一个 S3FS 文件体系在几个不同的电脑上一起挂载,只能有一台电脑一起拜访它。别的,ACL(拜访操控列表)也并没有被支撑。
在这篇教程中,我将会描绘“怎么根据 Amazon S3 用 S3QL 装备一个加密文件体系”。作为一个运用典范,我还会阐明怎么在挂载的 S3QL 文件体系上运转 rsync 备份东西。
准备工作
本教程首要需求你创立一个 Amazon AWS 帐号(注册是免费的,可是需求一张有用的信用卡)。
然后 创立一个 AWS access key(access key ID 和 secret access key),S3QL 运用这些信息来拜访你的 AWS 帐号。
之后经过 AWS 办理面板拜访 AWS S3,并为 S3QL 创立一个新的空 bucket。
为最佳功能考虑,请挑选一个地理上间隔你最近的区域。
在 Linux 上装置 S3QL
在大多数 Linux 发行版中都有预先编译好的 S3QL 软件包。
关于 Debian、Ubuntu 或 Linux Mint:
$ sudo apt-get install s3ql
关于 Fedora:
$ sudo yum install s3ql
关于 Arch Linux,运用 AUR。
初次装备 S3QL
在 ~/.s3ql 目录中创立 autoinfo2 文件,它是 S3QL 的一个默许的装备文件。这个文件里的信息包含有必要的 AWS access key,S3 bucket 名,以及加密口令。这个加密口令将被用来加密一个随机生成的主密钥,而主密钥将被用来实践地加密 S3QL 文件体系数据。
$ mkdir ~/.s3ql$ vi ~/.s3ql/authinfo2
[s3]storage-url: s3://[bucket-name]backend-login: [your-access-key-id]backend-password: [your-secret-access-key]fs-passphrase: [your-encryption-passphrase]
指定的 AWS S3 bucket 需求预先经过 AWS 办理面板来创立。
为了安全起见,让 authinfo2 文件仅对你可拜访。
$ chmod 600 ~/.s3ql/authinfo2
创立 S3QL 文件体系
现在你现已准备好能够在 AWS S3 上创立一个 S3QL 文件体系了。
运用 mkfs.s3ql 东西来创立一个新的 S3QL 文件体系。这个指令中的 bucket 名应该与 authinfo2 文件中所指定的相符。运用“–ssl”参数将强制运用 SSL 连接到后端存储服务器。默许状况下,mkfs.s3ql 指令会在 S3QL 文件体系中启用紧缩和加密。
$ mkfs.s3ql s3://[bucket-name] –ssl
你会被要求输入一个加密口令。请输入你在 ~/.s3ql/autoinfo2 中经过“fs-passphrase”指定的那个口令。
假如一个新文件体系被成功创立,你将会看到这样的输出:
挂载 S3QL 文件体系
当你创立了一个 S3QL 文件体系之后,下一步就是要挂载它。
首要创立一个本地的挂载点,然后运用 mount.s3ql 指令来挂载 S3QL 文件体系。
$ mkdir ~/mnt_s3ql$ mount.s3ql s3://[bucket-name] ~/mnt_s3ql
挂载一个 S3QL 文件体系不需求特权用户,只需确认你对该挂载点有写权限即可。
视状况,你能够运用“–compress”参数来指定一个紧缩算法(如 lzma、bzip2、zlib)。在不指定的状况下,lzma 将被默许运用。留意假如你指定了一个自界说的紧缩算法,它将只会应用到新创立的数据目标上,并不会影响现已存在的数据目标。
$ mount.s3ql –compress bzip2 s3://[bucket-name] ~/mnt_s3ql
由于功能原因,S3QL 文件体系维护了一份本地文件缓存,里边包含了最近拜访的(部分或悉数的)文件。你能够经过“–cachesize”和“–max-cache-entries”选项来自界说文件缓存的巨细。
假如想要除你以外的用户拜访一个已挂载的 S3QL 文件体系,请运用“–allow-other”选项。
假如你想经过 NFS 导出已挂载的 S3QL 文件体系到其他机器,请运用“–nfs”选项。
运转 mount.s3ql 之后,查看 S3QL 文件体系是否被成功挂载了:
$ df ~/mnt_s3ql$ mount | grep s3ql
卸载 S3QL 文件体系
想要安全地卸载一个(或许含有未提交数据的)S3QL 文件体系,请运用 umount.s3ql 指令。它将会等候一切数据(包含本地文件体系缓存中的部分)成功传输到后端服务器。取决于等候写的数据的多少,这个进程或许需求一些时刻。