對於原來需要直接讀寫本地檔案的應用程式,為了讓應用程式能在不作修改的情況下直接存取Object Storage Service的資料,您可以使用ossfs將OSS的Bucket掛載到Linux系統中,並將其映射到本地目錄,從而能夠像處理本地檔案那樣直接操作OSS中的資料,實現檔案分享權限設定。
功能原理
s3fs是一個使用者空間檔案系統(userspace filesystem),它允許您在Linux系統上將Amazon S3儲存桶掛載為本地檔案系統。ossfs基於s3fs構建,具有s3fs的全部功能。其中包括:
支援POSIX檔案協議標準的大部分功能,例如上傳下載檔案、目錄,設定使用者權限等。
預設使用OSS的分區上傳和斷點續傳功能上傳檔案。
支援MD5校正,保證資料的完整性。
運行環境
ossfs基於FUSE(Filesystem in Userspace)使用者態檔案系統開發,只能運行在支援FUSE的機器上。ossfs提供Ubuntu系統和CentOS系統的安裝包。如果需要在其他環境下運行,可以通過源碼方式構建目標程式。
Linux系統
CentOS 7.0及以上版本。
Ubuntu 14.04及以上版本。
Anolis7及以上版本。
fuse軟體
2.8.4以上版本。
說明使用如下命令判斷fuse版本。
fusermount -V
返回結果如:
fusermount version: 2.9.2
,表示fuse滿足版本要求。
使用限制
ossfs將遠程Bucket資料及功能映射到本地檔案系統,在使用上存在如下限制:
不適合高並發讀寫的情境。
說明ossfs的實現中,讀寫均需要落盤。在高並發讀寫的情境下,磁碟效能對於讀和寫都是一個瓶頸。
ossfs的實現中,並發的讀寫請求之間存在競爭,影響頻寬。
不支援檔案永久連結。
不支援訪問未解凍的歸檔(未開啟歸檔直讀)、冷歸檔、深度冷歸檔類型的檔案。
多個用戶端掛載同一個OSS Bucket,且同時寫入同一個檔案時,無法保證資料的一致性。
操作步驟
以下操作步驟均以ecs-user
使用者進行示範,若使用root
使用者,請去除命令開頭的sudo
。
下載地址
以下列表中提供了常用系統的安裝包,如果您的系統版本不在以下列表中,請通過源碼編譯。源碼地址以及如何進行源碼編譯,請參見GitHub ossfs。
Linux發行版 | 下載 |
Ubuntu 22.04 (x64) | |
Ubuntu 20.04 (x64) | |
Ubuntu 18.04 (x64) | |
Ubuntu 16.04 (x64) | |
Ubuntu 14.04 (x64) | |
CentOS 8.0 (x64) | |
CentOS 7.0 (x64) | |
Anolis8/Alibaba Cloud Linux 3 | |
Anolis7/Alibaba Cloud Linux 2 |
快速安裝
安裝ossfs。
Ubuntu系統
以Ubuntu 16.04 (x64)版本為例,依次執行以下命令安裝ossfs。
sudo wget https://gosspublic.alicdn.com/ossfs/ossfs_1.91.3_ubuntu16.04_amd64.deb sudo apt-get update sudo apt-get install gdebi-core sudo gdebi ossfs_1.91.3_ubuntu16.04_amd64.deb
CentOS系統/Anolis系統
以CentOS 7.0(x64)版本為例,安裝命令如下:
sudo wget https://gosspublic.alicdn.com/ossfs/ossfs_1.91.3_centos7.0_x86_64.rpm sudo yum install ossfs_1.91.3_centos7.0_x86_64.rpm
對於使用yum安裝rpm包的用戶端,如果用戶端節點網路環境特殊,無法直接使用yum下載依賴包。您可以在網路正常的、相同版本作業系統的節點上,使用yum下載依賴包並拷貝到網路特殊的節點。例如,ossfs需要依賴fuse 2.8.4以上版本,可使用如下命令,下載yum源中最新的fuse到本地:
sudo yum install --downloadonly --downloaddir=./ fuse
重要如果需要下載其他依賴包,請將fuse換成對應包的名稱。
如果您希望上傳檔案的Content-Type和副檔名匹配,您需要添加mime.types檔案。
如果您不添加mime.types檔案,ossfs預設將上傳檔案的Content-Type設定為application/octet-stream。
通過命令添加mime.types檔案的樣本如下。
Ubuntu系統
您可以通過以下命令添加mime.types檔案。
sudo apt-get install mime-support
CentOS系統/Anolis系統
您可以通過以下命令添加mime.types檔案。
sudo yum install mailcap
確認fuse版本。
fusermount -V
返回結果如:
fusermount version: 2.9.2
,表示fuse滿足版本要求。
掛載訪問
選擇需要進行本地掛載的Bucket。
說明不推薦掛載低頻訪問或者開啟了歸檔直讀類型的Bucket。向這些類型的掛載點上傳檔案時,可能會出現兩次上傳請求,第一次是產生一個0大小的對象,然後上傳有效資料,生效新對象。
由於檔案都是低頻/歸檔屬性,所以0大小的檔案會按照低頻/歸檔檔案的計費邏輯被收取64KB 30天的費用,導致產生預期外的費用。
配置帳號訪問資訊。
將Bucket名稱以及具有該Bucket存取權限的RAM使用者的AccessKey ID和AccessKey Secret資訊存放在/etc/passwd-ossfs檔案中,並設定檔案的許可權為640。
sudo sh -c 'echo <BucketName>:<yourAccessKeyId>:<yourAccessKeySecret> > /etc/passwd-ossfs' ### root 使用者可使用以下命令:### # echo <BucketName>:<yourAccessKeyId>:<yourAccessKeySecret> > /etc/passwd-ossfs sudo chmod 640 /etc/passwd-ossfs
BucketName、yourAccessKeyId、yourAccessKeySecret請按需替換為您實際的Bucket名稱、AccessKey ID和AccessKey Secret,例如:
sudo sh -c 'echo bucket-test:LTAIbZcdVCmQ****:MOk8x0y9hxQ31coh7A5e2MZEUz**** > /etc/passwd-ossfs' sudo chmod 640 /etc/passwd-ossfs
將Bucket掛載到指定目錄。
sudo ossfs <BucketName> <mountfolder> -o url=<Endpoint>
將杭州地區名稱為
bucket-test
的Bucket掛載到/tmp/ossfs
目錄下的樣本如下:sudo mkdir /tmp/ossfs sudo ossfs bucket-test /tmp/ossfs -o url=http://oss-cn-hangzhou-internal.aliyuncs.com
重要如果您使用從阿里雲購買的Elastic Compute Service來提供ossfs服務,您可以使用內網網域名稱,但是需要注意,使用內網Endpoint要求您的ECS必須和即將掛載的Bucket處於同一地區。例如,在該樣本中您可以將OSS Endpoint 修改為
oss-cn-hangzhou-internal.aliyuncs.com
,從而節省流量費用。有關OSS內網網域名稱的更多資訊,請參見訪問網域名稱和資料中心。您可以像訪問本地檔案系統一樣讀取Bucket中的對象。
查看檔案清單。
sudo ls -lh /tmp/ossfs
說明中繼資料操作(例如list directory)需要遠端存取OSS伺服器,存在網路延遲。
拷貝檔案。
sudo cp /tmp/ossfs/bird.jpeg /root
將OSS中的
bird.jpeg
拷貝到/root
目錄中。新增檔案。
sudo cp /root/forest.jpeg /tmp/ossfs
即可將原生
forest.jpeg
添加到掛載目錄,並同步到OSS遠程。說明如果您因意外中斷了檔案上傳的過程且未繼續完成該檔案的上傳,則已上傳的部分會以片段(Part)的形式儲存在Bucket中。如果您不再需要這些Part,建議您通過以下方式刪除,以免產生額外的儲存費用。
手動刪除Part,請參見刪除片段。
通過生命週期規則自動刪除Part,請參見基於最後一次修改時間的生命週期規則。
如果您不希望繼續掛載此Bucket,您可以將其卸載。
sudo fusermount -u /tmp/ossfs