使用 s3fs
裝載儲存區
預期在 NFS 樣式檔案系統中進行讀取及寫入的應用程式,可以使用 s3fs
,這樣可以將儲存區裝載為目錄,同時保留檔案的原生物件格式。
這可讓您使用熟悉的 Shell 指令(例如 ls
列出檔案,或 cp
複製檔案)與您的雲端儲存空間互動,同時也能存取依賴從本端檔案進行讀取及寫入的舊式應用程式。 如需更詳細的概觀,請參閱專案的正式 README。
正在尋找如何在 IBM Cloud Kubernetes Service 叢集中使用 IBM Cloud® Object Storage 的指示? 請改為移至 IBM Cloud Kubernetes Service 文件。
必要條件
- IBM Cloud 帳戶及 IBM Cloud® Object Storage 的實例
- Linux 或 macOS 環境
- 認證(IAM API 金鑰或 HMAC 認證)
安裝
在 Debian 或 Ubuntu 上:
sudo apt-get install automake autotools-dev fuse g++ git libcurl4-openssl-dev libfuse-dev libssl-dev libxml2-dev make pkg-config
在 RHEL 及 CentOS 7 或更新版本上,透過 EPEL:
sudo yum install epel-release
sudo yum install s3fs-fuse
您的裝置必須具有公用連線才能取回此 EPEL 儲存庫,因為它在 IBM的專用儲存庫中無法使用。 如需相關資訊,請參閱 如何在 RHEL 及 CentOS 串流上安裝 EPEL。。
官方的 s3fs
文件建議使用 libcurl4-gnutls-dev
,而非 libcurl4-openssl-dev
。 兩者都可行,但 OpenSSL 版本的效能可能更好。
若為 macOS,您需要從來源建置 s3fs
:
確保您已安裝下列套件 (所有套件都可透過 Homebrew 取得):
macfuse
automake
gcc
curl
libxml2
pkg-config
openssl
如 openssl
安裝的輸出中所指出,您需要設定下列環境變數:
export LDFLAGS="-L/usr/local/opt/openssl@3/lib"
export CPPFLAGS="-I/usr/local/opt/openssl@3/include"
export PKG_CONFIG_PATH="/usr/local/opt/openssl@3/lib/pkgconfig"
請注意,macFUSE 是包含核心擴充的封閉來源軟體,可能需要商業使用授權。
首先,請複製 Github 儲存庫:
git clone https://github.com/s3fs-fuse/s3fs-fuse.git
然後建置 s3fs
:
cd s3fs-fuse
./autogen.sh
./configure
make
安裝二進位檔:
sudo make install
配置
將認證儲存在包含 <access_key>:<secret_key>
或 :<api_key>
的檔案中。 此檔案需要受限制的存取權,因此請執行:
chmod 0600 <credentials_file>
現在,您可以使用下列指令裝載儲存區:
s3fs <bucket> <mountpoint> -o url=http{s}://<endpoint> -o passwd_file=<credentials_file>
如果 credentials 檔案只有 API 金鑰(沒有 HMAC 認證),則您也需要新增 ibm_iam_auth
旗標:
s3fs <bucket> <mountpoint> -o url=http{s}://<endpoint> -o passwd_file=<credentials_file> -o ibm_iam_auth
範例中的 <bucket>
是指現有儲存區,而 <mountpoint>
是您要裝載儲存區的本端路徑。 <endpoint>
必須對應於 儲存區的位置。 credentials_file
是使用 API 金鑰或 HMAC 認證所建立的檔案。
現在,ls <mountpoint>
會列出該儲存區中的物件,如同它們是本端檔案一樣 (或在物件字首的情況下,如同它們是巢狀目錄)。
效能最佳化
雖然效能永遠不會等於真正的本端檔案系統,仍可能使用某些進階選項來提高傳輸量。
s3fs <bucket_name> <mountpoint> -o url=http{s}://<COS_endpoint> –o passwd_file=<credentials_file> \
-o cipher_suites=AESGCM \
-o kernel_cache \
-o max_background=1000 \
-o max_stat_cache_size=100000 \
-o multipart_size=52 \
-o parallel_count=30 \
-o multireq_max=30 \
-o dbglevel=warn
cipher_suites=AESGCM
僅在使用 HTTPS 端點時相關。 依預設,對 IBM COS 的安全連線會使用AES256-SHA
密碼組合。 改用AESGCM
套組可大幅減少用戶端機器上的 CPU 負載 (由 TLS 加密函數所造成),同時提供相同層次的加密安全。kernel_cache
會啟用s3fs mountpoint
裝載點上的核心緩衝區快取。 這表示物件只會由s3fs
讀取一次,因為可以從核心的緩衝區快取處理重複讀取相同檔案的作業。 核心緩衝區快取只會使用未被其他處理程序使用的可用記憶體。 如果您預期在裝載儲存區時,會從另一個處理程序/機器改寫儲存區物件,且您的使用案例需要即時存取最新的內容,則不建議使用這個選項。max_background=1000
能改善s3fs
並行檔案讀取效能。 依預設,FUSE 支援最多 128 KB 的檔案讀取要求。 當要求讀取更多內容時,核心會將大型要求分割成較小的子要求,並讓 s3fs 以非同步方式處理它們。max_background
選項會設定這類並行非同步要求的廣域數目上限。 依預設,它會設為 12,但將它設為任意高值 (1000) 會防止讀取要求被封鎖,即使同時讀取許多檔案也一樣。max_stat_cache_size=100000
會減少HEAD
所傳送的冗餘 HTTPs3fs
要求數,並縮短列出目錄或擷取檔案屬性所花費的時間。 一般檔案系統使用會透過stat()
呼叫(這對應到物件儲存空間系統的HEAD
要求),來頻繁存取檔案的 meta 資料。 依預設,s3fs
會快取最多 1000 個物件的屬性(meta 資料)。 每個快取的項目最多需要 0.5 KB 的記憶體。 理想情況下,您會希望快取能夠保留儲存區中所有物件的 meta 資料。 不過,建議您考量此快取的記憶體用量可能影響。 將它設為100000
將需要不超過 0.5 KB * 100000 = 50 MB。multipart_size=52
將設定從 COS 伺服器傳送及接收的要求及回應大小上限 (以 MB 為單位)。依預設,s3fs
會將此值設為 10 MB。 增加此值也會增加每個 HTTP 連線的傳輸量 (MB/s)。 另一方面,從檔案提供的第一個位元組的延遲也會增加。 因此,如果您的使用案例只會讀取每一個檔案中的少量資料,您可能不想要增加此值。 此外,如果此值足夠小,容許同時使用多個要求來提取檔案,則對於大型物件(例如超過 50 MB)傳輸量會增加。 這個選項的最佳值大約為 50 MB。 COS 最佳作法建議使用的要求數為 4 MB 的倍數,因此建議將這個選項設為 52 (MB)。parallel_count=30
會設定每一次檔案讀取/寫入作業時,同時傳送給 COS 的要求數目上限。 依預設,這會設為 5。 對於非常大的物件,您可以透過增加此值來取得更多傳輸量。 與前一個選項一樣,如果您只讀取每個檔案的少量資料,請將此值保持為低值。multireq_max=30
在列出目錄時,會針對清單中的每個物件傳送物件 meta 資料要求 (HEAD
)(除非在快取中找到 meta 資料)。 這個選項會限制單一目錄清單作業中,傳送至 COS 的此類同時要求數。 依預設,它設為 20。 請注意,此值必須大於或等於上面的parallel_count
選項。dbglevel=warn
會將除錯層次設為warn
,而不是預設值crit
,以便記載訊息至 /var/log/syslog。
限制
請務必記住,s3fs 可能不適合所有應用程式,因為物件儲存空間服務對於第一個位元組具有高延遲時間,而且缺少隨機寫入權。 只有讀取大型檔案的工作負載(例如深度學習工作負載),可以使用 s3fs
達到良好的傳輸量。