bucket 使用 goofys 在我的linux環境在寫入資料時會有問題, 改用s3fs-fuse就正常了.

Posted in :

我的使用情境, 是在 bucket 的路徑上執行 python script 產生1GB 的檔案, 透過 goofys 會失敗, 只會產生一個 0 bytes 的檔案, 但是使用s3fs-fuse 就可以正確的產生檔案到 bucket 中.

python create_tmp_file.py 內容:

with open("1GB.dat", "wb") as out:
    out.truncate(1*(1024**3))

測試環境:

  • rocky linux 8
  • goofys version 0.24.0-45b8d78375af1b24604439d2e60c567654bcdf88

測試情境:

  • 複製 local storage 大於 500MB 檔案到 bucket 會失敗.
  • 直接在 bucket 的 path 上, 執行 python script 產生 500MB 檔案會失敗.
  • 連直接在 bucket 上使用 vi 開啟 python script 檔案來修改, 都會顯示錯誤訊息: E297: Write error in swap file

解法:

改用 s3fs-fuse 來 mount bucket 就一切正常,

s3fs-fuse 檔案下載/安裝:

https://github.com/s3fs-fuse/s3fs-fuse

其他人的安裝分享:

How to Mount S3 Bucket on Linux Instance
https://sysadminxpert.com/how-to-mount-s3-bucket-on-linux-instance/#Step_2_Install_the_s3fs_on_Linux_CentOSRHELAmazon_Linux
附註: 這個人所分享的 script 有些地方有錯誤, 直接使用原作者的 script 比較簡單.

值得注意的是上面文件中的 Limitations:

non-AWS providers may have eventual consistency so reads can temporarily yield stale data (AWS offers read-after-write consistency since Dec 2020)

結論: non-AWS providers 就會是有bucket 的 bug 的樣子.


我的 mount 指令:

mkdir -p ~/bucket/
echo access_key:scrept_key > ~/bucket/.profile-8.passwd-s3fs
chmod 600 ~/bucket/.profile-8.passwd-s3fs
mkdir -p /tmp/cache/s3-mount-8
chmod 777 /tmp/cache/s3-mount-8
s3fs my_bucket_name /tmp/cache/s3-mount-8 -o passwd_file=~/bucket/.profile-8.passwd-s3fs -o url=https://my_end_point/

我的 unmount 指令:

  • fusermount -u /tmp/cache/s3-mount-8
  • umount /tmp/cache/s3-mount-8
  • s3fs umount /tmp/cache/s3-mount-8

上面3個都可以, 但如果mount point 上有 process 正在存取中, 會 umount fail.

fusermount: failed to unmount /tmp/cache/s3-mount-8: Device or resource busy

發佈留言

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