#+SETUPFILE: ~/Dropbox/Doc/Org_Templates/level-1.org
虽然对象存储的协议和使用场景与传统的文件系统存储(传统的 NAS 等)存在较大的差异, 但是 某些场景下, 将对象存储当作普通的文件系统更为方便, 比如不用再为了一些基本的文件操作而 专门使用第三方客户端等.
以下介绍通过 s3fs 来将 S3 兼容对象存储作为文件系统使用的方法.
PS1: 对于 windows 用户来讲, 类似的工具很多, 比如使用 CloudBerry 提供的 CloudBerry Drive. PS2: 对于非 S3 兼容的对象存储产品, 由于各大厂商都是模拟重新实现 S3 协议, 所以可以找到基于 s3fs 的工具, 比如阿里云对象存储的 ossfs, 用法和 s3fs 一样
安装
Linux
由于大部分发行版都没有在软件仓库中收录改包, 所以在 Linux 需要自行编译.
- 安装开发依赖包
$ sudo apt-get install -y automake autotools-dev g++ git libcurl4-gnutls-dev libfuse-dev libssl-dev libxml2-dev make pkg-config # for ubuntu
$ sudo yum install -y automake fuse-devel gcc-c++ git libcurl-devel libxml2-devel make openssl-devel # for fedora
- 下载编译 s3fs
$ git clone https://github.com/s3fs-fuse/s3fs-fuse.git
$ cd s3fs-fuse
$ ./autogen.sh
$ ./configure # 如果报错, 查看具体错误类型安装相应的依赖
$ make -j3
$ sudo make install
OSX
Mac OS 由于有 Homebrew 的存在, 安装很方便:
$ brew install s3fs
使用
设置密码文件
echo {AccessKey}:{SecretKey} > $HOME/.passwd-s3fs && chmod 600 $HOME/.passwd-s3fs
挂载
$ s3fs {BucketName} {MountPoint} -o host=http://obs.eayun.com:9090 -o umask=0022
- obs.eayun.com 是一个自己搭建的兼容 S3 的对象存储服务, 如果使用的是 S3, 则该选项不需要使用
- umask 是挂载的权限, 和 liunx 下的 umask 的一致, 这个参数很重要, 否则挂载用户无法读写某些对象
示例:
$ mkdir mnt
$ s3fs tmp mnt -o host=http://obs.eayun.com:9090 -o umask=0022
$ df -h mnt
文件系统 容量 已用 可用 已用% 挂载点
s3fs 256T 0 256T 0% /home/dunrong/mnt
之后就可以像使用一般文件系统一样使用 bucket 了
$ cp Kvm-forum-2013-COLO.pdf vm.sh mnt/ # <-- 复制本地文件到对象存储
$ s3cmd ls s3://tmp # <-- 在对象存储中查看是否成功
2016-05-09 08:04 2440042 s3://tmp/Kvm-forum-2013-COLO.pdf
2016-05-09 08:04 586 s3://tmp/vm.sh
$ du -sh mnt/ # <-- 查看使用量的大小
2.4M mnt/
$ ls -l mnt/ # <-- 查看挂载点上是否存在上传的对象
总用量 2384
-rwxr-xr-x 1 dunrong dunrong 2440042 5月 9 16:04 Kvm-forum-2013-COLO.pdf
-rwxr-xr-x 1 dunrong dunrong 586 5月 9 16:04 vm.sh
$ rm mnt/vm.sh # <-- 删除对象
rm:是否删除普通文件 "mnt/vm.sh"? y
$ ls -l mnt/
总用量 2383
-rwxr-xr-x 1 dunrong dunrong 2440042 5月 9 16:04 Kvm-forum-2013-COLO.pdf
$ s3cmd ls s3://tmp # <-- 在对象存储中查看是否删除成功
2016-05-09 08:04 2440042 s3://tmp/Kvm-forum-2013-COLO.pdf
优缺点
优点
- 可以像传统文件系统一样读写对象存储, 比如复制删除查看文件等操作
- 在不同设备(windows, linux, macos) 之间共享 bucket 较为方便
缺点
虽然 s3fs 基于 FUSE, 但是底层的实现协议还是对象存储的协议, 很多基于文件的操作无法实现, 或者实现起来性能很差. 所以和传统的 NAS 等文件系统存储比较, 存在很多缺点.
- 由于原生 S3 协议不支持基于文件的读写, 追加文件和随机写文件非常慢
- 由于 S3 协议没有所谓的元数据服务器, 列出文件, 查看文件夹大小等操作非常慢