把 Google Cloud Storage 加载到文件系统

主机移到 Google Cloud 之后,博客的图片都存放于 Google Cloud Storage (GCS) 中。

GCS 是一个独立的储存系统,可以通过 HTTP 访问,用来当作 CDN 使用。但问题是,GCS 无法绑定一个 SSL 的域名,HTTPS 访问成问题,并且经常被墙。于是我采用的方法是定期把 GCS 的文件用 GSUtil 同步到主机上,这个方法很灵活,不必开放整个 GCS 的 Bucket,而且可以限制文件一定要从博客中访问。唯一一点不爽的是,我设置的同步周期是五分钟,也就是在 GCS 上添加一个新文件之后,要等五分钟才可以从博客中看到,有时候等得比较累。而且我也不经常向 GCS 传文件,每五分钟都同步一下,80% 的同步是浪费掉的。

后来我就看到了 GCSFuse 这个工具。

Fuse (Filesystem in Userspace)是 Linux 中的一个概念,它向用户提供了一种虚拟磁盘的访问方式,即把一个不在本地的磁盘,当成本地磁盘一样来访问。这一技术经常被用来映射网络磁盘。

GCSFuse 是 Google Cloud 的一个 Fuse 实现,它可以把 GCS 的 Bucket 映射到本地,然后就可以通过文件系统的方式来访问 GCS 上的文件。

安装 GCSFuse 的方法用下(Ubuntu):

然后就可以通过以下命令行映射一个 Bucket(其中路径和 Bucket 名称按需修改):

GCSFuse 暂时还处于 Beta 状态,没有提供后台运行的方式,如果要在后台运行,还需要依赖 daemon 工具,完整的命令行大概是这个样子的:

这样运行了之后,/path/to/mount/point 就会成为 my-bucket 的映射,可以直接进行文件操作。其中 -o allow_other 表示允许所有用户访问,GCSFuse 默认只允许运行该命令行的用户访问映射的文件(比如 root),要给其它用户开放权限,我发现 -o allow_other 是最简简单的方法,另外你还可以通过 --uid $UID 和 --gid $GID 指定用户,但我尝试了没有成功。

daemon 不会在开机的时候自动运行,如果要在开机的时候就创建映射,需要添加一个 systemd 或者 upstart 的启动项,代码还在调试中,稍后放出。另外 GCSFuse 来提供了一种 mount 的方式加载,但我死活没有成功运行出来,还搞挂了主机,如果你成功了,请知会一声。


6 条评论 添加

发表评论

电子邮件地址不会被公开。 必填项已用*标注