阿里云ossfs簡明教程

1. OSSFS功能

能像傳統磁盤一樣,把阿里云OSS掛在到本地主機上(像普通磁盤一樣使用)

ossfs 能讓您在Linux/Mac OS X 系統中把Aliyun OSS bucket 掛載到本地文件系統中,您能夠便捷的通過本地文件系統操作OSS 上的對象,實現數據的共享。

2. OSSFS下載

下載地址如下

https://github.com/aliyun/ossfs/releases

3. 安裝

3.1 Ubuntu

首先安裝 gdebi?,然后使用 gdebi?安裝下載好的安裝包。

3.2 CentOS 6.5及以上

3.3?CentOS 5.7

#其中your_ossfs_package為你下載的安裝包(記得要替換填寫)

#下面的代碼也都是你的什么什么包來命名的,請自行改成你的報的名字(或者oss的bucket名字)

4. 運行

設置 bucket name?, access key/id?信息,將其存放在 /etc/passwd-ossfs? 文件中, 注意這個文件的權限必須正確設置,建議設為 640?。

oss bucket mount?到指定目錄

5. 示例

my-bucket?這個bucket掛載到 /tmp/ossfs?目錄下, AccessKeyId?是 faint?, AccessKeySecret?是 123?, oss endpoint?是 http://oss-cn-hangzhou.aliyuncs.com

6. 常用設置

使用 ossfs --version?來查看當前版本,使用 ossfs -h?來查看可用的參數

如果使用ossfs的機器是阿里云ECS,可以使用內網域名來避免流量收費和提高速度:

在linux系統中, updatedb?會定期地掃描文件系統,如果不想 ossfs?的掛載目錄被掃描,可參考下方FAQ設置,跳過掛載目錄

如果你沒有使用eCryptFs等需要XATTR的文件系統,可 以通過添加-o noxattr參數來提升性能
ossfs允許用戶指定多組 bucket/access_key_id/access_key_secret?信息。當 有多組信息,寫入passwd-ossfs的信息格式為:

生產環境中推薦使用supervisor來啟動并監控ossfs進程,使用方法見下方FAQ

7. FAQ常見問題

1

Q: ossfs適合什么樣的程序?

ossfs能把oss bucket掛載到本地,如果您使用的軟件沒有支持OSS,但您又想讓數據能自動同步到OSS,那么ossfs是很好的選擇。

2

Q: ossfs有什么局限性?

由于數據需要經過網絡同步到云端,ossfs在性能和功能上可能與本地文件系統有差距。如果您想讓數據庫等對io要求很高的應用跑在ossfs掛載的盤上,請慎重考慮。和本地文件系統具體差異:

  • 隨機或者追加寫文件會導致整個文件的重寫。
  • 元數據操作,例如list directory,性能較差,因為需要遠程訪問OSS服務器。
  • 文件/文件夾的rename操作不是原子的。
  • 多個客戶端掛載同一個oss bucket時,依賴用戶自行協調各個客戶端的行為。例如避免多個客戶端寫同一個文件等等。
  • 不支持hard link。

3

Q: ossfs一定要阿里云的機器才能用么?

ossfs不限制一定要阿里云的內網才可以使用,外網機器依然可以使用。

4

Q: ossfs能不能同時掛載多個OSS bucket

可以的,在passwd-ossfs文件中寫入多個OSS配置信息即可。支持不同帳號的OSS。

5

Q: 我在yum/apt-get安裝ossfs,遇到conflicts with file from package fuse-devel的錯誤,請問是怎么回事?

您的系統中存在老版本的fuse,請先使用相關的包管理器卸載,再重新安裝ossfs。

6

Q: ossfs工作不正常,如何debug?

您可以使用在掛載時,加上-d -o f2參數,ossfs會把日志寫入到系統日志中。在centos系統中,在 /var/log/messages?中。

您也可以在掛載時使用 -f -d -o f2?參數, ossfs?會把日志輸出到屏幕上。

7

Q: 為什么我在mount時遇到 ossfs: unable to access MOUNTPOINT /tmp/ossfs: Transport endpoint is not connected?這樣的錯誤?

請先 umount?對應的目錄。

請檢查您在使用ossfs掛載時,填入的url參數是否正確,是否和 bucket/access key id/access key secret?匹配。

特別注意:url中不包含bucket的名字。例如:您在oss控制臺中看到bucket的域名是這樣的: ossfs-test-1.oss-cn-hangzhou.aliyuncs.com?。那么填入的url則是: http://oss-cn-hangzhou.aliyuncs.com?。

8

Q: ossfs提示 ossfs: unable to access MOUNTPOINT /tmp/odat: No such file or directory
這是您未創建該目錄導致的,在掛載前需要創建對應目錄

9

Q: 我把bucket掛載到本地后,ls目錄,卻收到 operation not permitted?錯誤,這是為什么?
請檢查您的bucket中,是否包含目錄名含有不可見字符的OSS object。文件系統對文件/目錄名有更嚴格的限制,因此會收到上述錯誤。使用其他工具對這些object重命名后,ls就能正確顯示目錄內容了。

10

Q: 我的一個目錄下有非常多的文件,為什么ls該目錄很慢?

假設一個目錄下有n個文件,那么ls該目錄至少需要n次OSS http requests。在文件非常多的時候,這可能造成嚴重的性能問題。

您可以采用下面兩個辦法優化:

通過-omax_stat_cache_size=xxx參數增大stat cache的size,這樣第一次ls會較慢,但是后續的ls就快了,因為文件的元數據都在本地cache中。默認這個值是1000,大約消耗4MB內存,請根據您機器內存大小

調整為合適的值。

使用ls -f命令,這個命令會消除與OSS的n次http請求。

11

Q: ossfs掛載時如何設置權限?

如果要允許其他用戶訪問掛載文件夾,可以在運行ossfs的時候指定allow_other參數:

為什么使用 allow_other?參數,仍然不能訪問文件?

注意: allow_other?是賦予掛載目錄其他用戶訪問的權限,不是里面的文件!如果您要更改文件夾中的文件,請用 chmod?命令。

allow_other?默認賦予掛載目錄777權限,我想讓掛載目錄的權限為770,該怎么辦?

可以通過umask來設置。

12

Q:如果要使掛載的文件夾( /tmp/ossfs?)屬于某個 user?,則需要以user的身份創建掛載文件夾和使用ossfs:

首先通過id命令獲得指定用戶的uid/gid信息。例如獲取www用戶的uid/gid信息: id www
然后掛載時指定uid/gid參數:

注意: uid/gid?都是數字。

13

Q: 我不是root用戶,如何umount ossfs掛載的目錄

14

Q: 如何開機自動掛載ossfs?

Step 1 首先請參考使用說明,把 bucket name?, access key id/secret?等信息寫入 /etc/passwd-ossfs?,并將該文件權限修改為 640?。

Step 2 接下來針對不同的系統版本,設置方式有所不同

Step 2A 通過fstab的方式自動mount(適用于ubuntu14.04, centos6.5)

在/etc/fstab中加入下面的命令

其中上述命令中的your_xxx信息需要根據您的bucket name等信息填入。

保存/etc/fstab文件。執行mount -a命令,如果沒有報錯,則說明設置正常。

到這一步,ubuntu14.04就能自動掛載了。centos6.5還需要執行下面的命令:

Step 2B 通過開機自啟動腳本mount(適用于centos7.0及以上的系統)

/etc/init.d/?目錄下建立文件ossfs,把模板文件中的內容拷貝到這個新文件中。并將其中的your_xxx內容改成您自己的信息。

執行命令: chmod a+x /etc/init.d/ossfs

上述命令是把新建立的ossfs腳本賦予可執行權限。您可以執行該腳本,如果腳本文件內容無誤,那么此時oss中的bucket已經掛載到您指定的目錄下了。

執行命令: chkconfig ossfs on

上述命令是把ossfs啟動腳本作為其他服務,開機自動啟動。

好了,現在ossfs就可以開機自動掛載了。總結起來,如果您是ubuntu14.04和centos6.5,您需要執行Step 1 + Step 2A;如果您是centos7.0系統,您需要執行Step 1 + Step 2B。

15

Q: 遇到 fusermount: failed to open current directory: Permission denied?錯誤如何解決?

這是fuse的一個bug,它要求當前用戶對當前目錄(非掛載目錄)有讀權限。解決的辦法就是cd到一個有讀權限的目錄再運行ossfs命令

16

Q: 使用ECS掛載ossfs,如何避免因后臺程序掃描文件而產生費用?

程序掃描ossfs掛載的目錄,會轉換成向OSS的請求,如果請求次數很多,會產生費用(1分錢/1萬次)。如果是updatedb,可以通過修改 /etc/updatedb.conf?讓它跳過。具體做法是:

PRUNEFS =?后面加上 fuse.ossfs

PRUNEPATHS =?后面加上掛載的目錄

17

Q: 使用ossfs上傳到OSS的文件Content-Type全是" application/octet-stream?"是怎么回事?

ossfs通過查詢/etc/mime.types中的內容來確定文件的Content-Type,請檢查這個文件是否存在,如果不存在,則需要添加:

對于ubuntu可以通過 sudo apt-get install mime-support?來添加

對于centos可以通過 sudo yum install mailcap?來添加

也可以手動添加,每種格式一行,每行格式為: application/javascript js

18

Q: 如何使用supervisor啟動ossfs?

安裝supervisor,在ubuntu中執行 sudo apt-get install supervisor

建立一個目錄,編輯ossfs的啟動腳本:

編輯/etc/supervisor/supervisord.conf:

運行supervisor:

確認一切正常:

如果出錯,請檢查 /var/log/supervisor/supervisord.log?和 /var/log/ossfs.log?。

任 江風

發表評論

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: