使用 s3fs 挂载对象存储到本地磁盘

#+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 协议没有所谓的元数据服务器, 列出文件, 查看文件夹大小等操作非常慢

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦