Skip to content

Zeroplex 生活隨筆

小 縮小字型大小。 中 重設字型大小。 大 放大字型大小。

s3fs 參數設定

Posted on 2022 年 7 月 16 日2022 年 11 月 4 日 By 日落 在〈s3fs 參數設定〉中尚無留言

s3fs 是透過 Linux FUSE 界面來與 AWS S3 服務串接,這樣就可以 mount 一個容量幾乎是無限大的 device。

雖然官方文件的 README 很簡單,事實上照著做一定會遇到一堆問題。踩雷以後建議按照以下步驟來規劃並設定 s3fs 的參數:

  1. AWS 設定
    1. 建立 S3 bucket
    2. 建立 IAM 的存取政策 (policy)
  2. server 設定
    1. 建立暫存路徑
    2. s3fs mount 參數設定、測試
    1. fstab 設定

AWS 設定

先建立一個 bucket 作為 s3fs 要掛載用的儲存容器。

再來去 IAM 建立 policy 供存取專用,以下用 JSON 來表示:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::bucket-for-s3fs",
                "arn:aws:s3:::bucket-for-s3fs/*"
            ]
        }
    ]
}

建立 credential 以後記得將 token 和 secret key 記下來,在 s3fs 連線前要建立設定檔。

s3fs 連線設定檔

設定檔的格式為 ACCESS_KEY:SECRET_KEY,設定檔建立完成以後記得調整權限:

echo 'ACCESS_KEY:SECRET_KEY' > /etc/cred_s3fs
chmod 600 /etc/cred_s3fs

建立 cache dir

雖然不一定要開啟 cache,但如果機器不在 EC2 或 AWS 內部網路,建議開啟 cache_dir 讓操作上順暢一些。檔案很大的話,記得加上 ensure_diskfree 避免暫存檔把空間用光。

# 小檔案可以考慮就放 tmpfs,這邊另外建立目錄存放暫存檔
sudo mkdir -p /var/cache/s3fs-mount-name

測試 s3fs 設定

先以下所有操作都需要使用 root。

第一步驟先開啟 debug ouptut 來確認連線是正常的,執行時加上 -o dbglevel=info -f -o curldbg 參數:

sudo s3fs bucket-for-s3fs /mefia/s3fs \
    -o "passwd_file=/etc/cred_s3fs" \
    -o "use_cache=/var/cache/s3fs-mount-name" \
    -o dbglevel=info -f -o curldbg

如果 AWS 權限設定正確、s3fs 參數也正確,應該可以看到輸出最後一行顯示 HTTP 200:

[INF]       curl.cpp:RequestPerform(2416): HTTP response code 200

另外也可以透過 df 確認目錄已經被正確掛載:

df -h
Filesystem                Size  Used Avail Use% Mounted on
udev                      3.8G     0  3.8G   0% /dev
tmpfs                     782M  3.3M  778M   1% /run
/dev/mmcblk0p1             59G  5.6G   51G  10% /
s3fs                       16E     0   16E   0% /mefia/s3fs

256EB 耶,有沒有很爽? (看到帳單可能就沒有那麼爽了 XD)

調整 mount options

上面的步驟只有 root 才可以看到正確的結果,如果沒有 root 權限或是透過 sudo 來執行指令的話,都會出現權限相關的錯誤訊息。

所以在掛載時可以再加上一個 allow_other 的參數,讓其他使用者可以檢視 (能否寫入要看 uid / gid):

sudo s3fs bucket-for-s3fs /mefia/s3fs \
    -o "passwd_file=/etc/cred_s3fs" \
    -o "use_cache=/var/cache/s3fs-mount-name" \
    -o allow_other \
    -o dbglevel=info -f -o curldbg

確認可以正常運作以後,就可以把最後一行的 debug info 刪掉。

s3fs in fstab

在 fstab 中使用 s3fs 只有一點需要注意的,就是在 mount options 要加上 _netdev,表示這個是網路相關裝置,需要在網路啟動以後才 mount。

把原本接在 -o 後面的參數,串到 mount option 即可:

bucket-for-s3fs     /media/s3fs   fuse.s3fs     _netdev,passwd_file=/etc/cred_s3fs,use_cache=/var/cache/s3fs-mount-name,allow_other  0  0

記錄幾個錯誤訊息。

There is no enough disk space for used as cache(or temporary) directory by s3fs.

表示 tmpfs 的空間不夠用,或是 use_cache 的路徑有問題無法存取等。ensure_diskfree 設定錯誤也會出現這個錯誤訊息。

3fs.cpp:s3fs_check_service(3898): invalid credentials(host=https://s3.amazonaws.com) - result of checking service.

這個原因不明,但是可以依照自己使用的 region 來調整 URL,例如:-o "url=https://s3-ap-northeast-1.amazonaws.com"

Tags:AWS, Web

文章導覽

Previous Post: httpstat 讓 HTTP response 連線檢測更簡單
Next Post: crunch 產生 URL UID

發佈留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

其他

關於我  (About me)

小額贊助

  文章 RSS Feed

  留言 RSS Feed

Apache AWS Bash C/C++ Docker FreeBSD Git Google Java JavaScript Laravel Linux Microsoft MSSQL MySQL Nginx PHP PHPUnit PostgreSQL Python Qt Ubuntu Unix Vim Web Windows WordPress XD 作業系統 分享 好站推薦 專題 小提琴 攝影 新奇搞笑 新聞 旅遊 生活雜記 程式設計 網路架站 網頁設計 資訊學習 資訊安全 遊戲 音樂


創用 CC 授權條款
本著作係採用創用 CC 姓名標示-相同方式分享 4.0 國際 授權條款授權.

Go to mobile version