全部產品
Search
文件中心

Object Storage Service:使用ossfs將OSS Bucket掛載到Linux系統的本地目錄

更新時間:Jul 09, 2024

對於原來需要直接讀寫本地檔案的應用程式,為了讓應用程式能在不作修改的情況下直接存取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)

ossfs_1.91.3_ubuntu22.04_amd64.deb

Ubuntu 20.04 (x64)

ossfs_1.91.3_ubuntu20.04_amd64.deb

Ubuntu 18.04 (x64)

ossfs_1.91.3_ubuntu18.04_amd64.deb

Ubuntu 16.04 (x64)

ossfs_1.91.3_ubuntu16.04_amd64.deb

Ubuntu 14.04 (x64)

ossfs_1.91.3_ubuntu14.04_amd64.deb

CentOS 8.0 (x64)

ossfs_1.91.3_centos8.0_x86_64.rpm

CentOS 7.0 (x64)

ossfs_1.91.3_centos7.0_x86_64.rpm

Anolis8/Alibaba Cloud Linux 3

ossfs_1.91.3_anolisos8.0_x86_64.rpm

Anolis7/Alibaba Cloud Linux 2

ossfs_1.91.3_anolisos7.0_x86_64.rpm

快速安裝

  1. 安裝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換成對應包的名稱。

  2. 如果您希望上傳檔案的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
  3. 確認fuse版本。

    fusermount -V

    返回結果如:fusermount version: 2.9.2,表示fuse滿足版本要求。

掛載訪問

  1. 選擇需要進行本地掛載的Bucket。

    說明
    • 不推薦掛載低頻訪問或者開啟了歸檔直讀類型的Bucket。向這些類型的掛載點上傳檔案時,可能會出現兩次上傳請求,第一次是產生一個0大小的對象,然後上傳有效資料,生效新對象。

      由於檔案都是低頻/歸檔屬性,所以0大小的檔案會按照低頻/歸檔檔案的計費邏輯被收取64KB 30天的費用,導致產生預期外的費用。

  2. 配置帳號訪問資訊。

    將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
  3. 將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內網網域名稱的更多資訊,請參見訪問網域名稱和資料中心

  4. 您可以像訪問本地檔案系統一樣讀取Bucket中的對象。

    1. 查看檔案清單。

      sudo ls -lh /tmp/ossfs

      image

      說明

      中繼資料操作(例如list directory)需要遠端存取OSS伺服器,存在網路延遲。

    2. 拷貝檔案。

      sudo cp /tmp/ossfs/bird.jpeg /root

      將OSS中的bird.jpeg拷貝到/root目錄中。

    3. 新增檔案。

      sudo cp /root/forest.jpeg /tmp/ossfs

      即可將原生forest.jpeg添加到掛載目錄,並同步到OSS遠程。

      image

      說明

      如果您因意外中斷了檔案上傳的過程且未繼續完成該檔案的上傳,則已上傳的部分會以片段(Part)的形式儲存在Bucket中。如果您不再需要這些Part,建議您通過以下方式刪除,以免產生額外的儲存費用。

  5. 如果您不希望繼續掛載此Bucket,您可以將其卸載。

    sudo fusermount -u /tmp/ossfs

相關文檔