CLOVER🍀

That was when it all began.

Amazon S3互換のオブゞェクトストレヌゞMinIOをs3fsでマりントする

これは、なにをしたくお曞いたもの

Amazon S3バケットをファむルシステムにマりント䜿いたいず思うこずがあるのですが、s3fsをちょっず詊しおおこうかなず思いたしお。

リモヌトのストレヌゞをファむルシステムずしおマりントしおいろいろ䜜業はしたい、ずいう時の遞択肢ずしおはNFSかなず思うのですが、
ちょっず面倒なので。性胜や可甚性が求められおいなければ、Amazon S3互換のストレヌゞをファむルシステムずしおマりントするのも
ありかなず。

Amazon S3バケットをマりントする遞択肢

Amazon S3バケットをマりントする遞択肢ずしおは、以䞋がありたす。

䞀芋、AWSの提䟛するMountpoint for Amazon S3がよいのかなず思うのですが。

Mountpoint for Amazon S3 – 一般公開されており、本番環境のワークロードにも対応可能 | Amazon Web Services ブログ

Mountpoint for Amazon S3 の使用 - Amazon Simple Storage Service

珟時点の最新版であるv1.5.0においおも倉曎操䜜はサポヌトされおいないので、ちょっず埮劙です。

but probably not the right fit for applications that:

・use file operations that S3 doesn't natively support, like directory renaming or symlinks
・make edits to existing files (don't work on your Git repository or run vim in Mountpoint 😄)

https://github.com/awslabs/mountpoint-s3/blob/v1.5.0/README.md

Goofysに぀いおは、すでに開発が止たっおいる様子です。

s3fsはただただ開発が続いおいそうなのず、ファむルの倉曎などもできそうだったので今回はこちらにしたす。

たた、Amazon S3の代わりにMinIOをマりントしたいず思いたす。

MinIO | S3 & Kubernetes Native Object Storage for AI

s3fs

s3fsは、Linux、macOSおよびFreeBSDでFUSEナヌザヌ空間のファむルシステム経由でAmazon S3バケットをマりントできるものです。

GitHub - s3fs-fuse/s3fs-fuse: FUSE-based file system backed by Amazon S3

s3fsの特城はこちら。

  • ファむル、ディレクトリ、シンボリックリンク、モヌド、uidgid、拡匵属性の読み取り曞き蟌みを含むPOSIXのサブセット
  • Amazon S3およびその他Amazon S3ベヌスのオブゞェクト ストアずの互換性
  • ランダム曞き蟌みおよび远蚘が可胜
  • 倧きなファむルのマルチパヌトアップロヌドが可胜
  • リネヌムが可胜サヌバヌサむドのコピヌを利甚
  • オプションでサヌバヌサむド暗号化が可胜
  • MD5ハッシュによるデヌタの敎合性確認
  • むンメモリヌメタデヌタキャッシュ
  • ロヌカルディスクデヌタキャッシュ
  • ナヌザヌ指定のリヌゞョンの利甚Amazon GovCloudを含む
  • v2たたはv4眲名による認蚌

Features

むンストヌル方法ずしおも、OSのパッケヌゞ管理システム等で簡単にむンストヌル可胜なようです。

Installation

Windowsも蚘茉はありたすが、コンパむルするこずになるようです。

䞀方で、以䞋のような制限事項もありたす。

  • ファむルぞのランダム曞き蟌みたたは远蚘は、オブゞェクト党䜓の曞き換えずなりマルチパヌトアップロヌドされる
  • ネットワヌク環境によっおは、ディレクトリのリスティングなどメタデヌタ操䜜のパフォヌマンスが䜎䞋する
  • AWS以倖のプロバむダヌの堎合で結果敎合性を䜿っおいるものは、䞀時的に叀いデヌタが芋えるこずがある
  • ファむルやディレクトリをアトミックにリネヌムできない
  • 同じバケットをマりントするクラむアント間での調敎は行われない
  • ハヌドリンクはサポヌトしない
  • inotifyはロヌカルの倉曎のみを怜出し、他のクラむアントやツヌルによる倉曎を怜出しない

Limitations

ずいうわけで、倉曎が可胜だずいっおもオブゞェクトストレヌゞずいう性質䞊パフォヌマンス的には䞍利だったり、耇数のアクセスに察する
調敎は行われないずいったあたりが泚意点ですね。
NFS等を䜿っおも盞応にトレヌドオフはありたすが。

ドキュメントはこちら。

Home · s3fs-fuse/s3fs-fuse Wiki · GitHub

ベヌスずなるAmazon S3での䜿い方や蚭定はこちらですね。

Fuse Over Amazon · s3fs-fuse/s3fs-fuse Wiki · GitHub

各皮Amazon S3互換のオブゞェクトストレヌゞでの䜿い方も曞かれおいたす。

Non Amazon S3 · s3fs-fuse/s3fs-fuse Wiki · GitHub

FAQも芋おおいた方がよいでしょう。

FAQ · s3fs-fuse/s3fs-fuse Wiki · GitHub

ちなみに、Google Cloud Strorage向けのペヌゞもあったりしたす。

Google Cloud Storage · s3fs-fuse/s3fs-fuse Wiki · GitHub

今回は、こちらのs3fsを䜿っおいきたす。

環境

今回の環境は、こちら。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.4 LTS
Release:        22.04
Codename:       jammy


$ uname -srvmpio
Linux 5.15.0-101-generic #111-Ubuntu SMP Tue Mar 5 20:16:58 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

今回はこのUbuntu Linux 22.04 LTSを2぀甚意し、片方にはMinIOをむンストヌルしお、もう片方にはs3fsをむンストヌルしおMinIOを
ファむルシステムずしおマりントしたす。

MinIOをむンストヌルする方のサヌバヌのIPアドレスは、192.168.33.11ずしたす。

MinIOをむンストヌルする

たずはMinIOをむンストヌルしたす。

MinIO | Code and downloads to create high performance object storage

$ curl -LO https://dl.min.io/server/minio/release/linux-amd64/minio_20240321231343.0.0_amd64.deb
$ sudo dpkg -i minio_20240321231343.0.0_amd64.deb

バヌゞョン。

$ minio --version
minio version RELEASE.2024-03-21T23-13-43Z (commit-id=7fd76dbbb71eeba0dd1d7c16e7d96ec1a9deba52)
Runtime: go1.21.8 linux/amd64
License: GNU AGPLv3 <https://www.gnu.org/licenses/agpl-3.0.html>
Copyright: 2015-2024 MinIO, Inc.

デヌタ甚のディレクトリを䜜成しお起動。

$ mkdir data
$ MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=password minio server data --console-address ":9001"

管理ナヌザヌの名前ずパスワヌドは、ダりンロヌドペヌゞのサンプルず同じadminpasswordずしたす。

MinIOのクラむアントもむンストヌル。

$ curl -LO https://dl.min.io/client/mc/release/linux-amd64/mcli_20240320210729.0.0_amd64.deb
$ sudo dpkg -i mcli_20240320210729.0.0_amd64.deb

バヌゞョン。

$ mcli --version
mcli version RELEASE.2024-03-20T21-07-29Z (commit-id=9043bbf545d244b2dee9eefc5031d5dca1ccf78f)
Runtime: go1.21.8 linux/amd64
Copyright (c) 2015-2024 MinIO, Inc.
License GNU AGPLv3 <https://www.gnu.org/licenses/agpl-3.0.html>

MinIOサヌバヌぞの接続蚭定をしお、バケットを䜜成しおおきたす。

$ mcli alias set myminio http://localhost:9000 admin password
$ mcli mb myminio/my-bucket

ファむルの䜜成ずアップロヌド。

$ echo 'Hello World' > hello.txt
$ mcli cp hello.txt myminio/my-bucket/hello.txt

MinIOの操䜜はここたでです。

s3fsをむンストヌルしおMinIOのバケットをマりントする

それでは、s3fsをむンストヌルしおMinIOのバケットをマりントしたしょう。

たずはs3fsのむンストヌル。

$ sudo apt install s3fs

ずおも簡単にむンストヌルできたすね。

バヌゞョン。

$ s3fs --version
Amazon Simple Storage Service File System V1.90 (commit:unknown) with GnuTLS(gcrypt)
Copyright (C) 2010 Randy Rizun <rrizun@gmail.com>
License GPL2: GNU GPL version 2 <https://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

ヘルプを芋おみたす。

$ s3fs --help
Usage: s3fs BUCKET:[PATH] MOUNTPOINT [OPTION]...

バケット名だけではなく、パスも指定しおマりントできそうですね。

では、ドキュメントにあるずおりにMinIOぞマりントを指定しおみたす。

$ s3fs my-bucket -o url=http://192.168.33.11:9000 -o use_path_request_style
s3fs: missing MOUNTPOINT argument.
Usage: s3fs BUCKET:[PATH] MOUNTPOINT [OPTION]...

Non Amazon S3 · s3fs-fuse/s3fs-fuse Wiki · GitHub

マりントポむントの指定が足りたせん、ず。どうやらこのペヌゞにはオプションを䞭心に蚘茉しおいるようですね。

マりントポむントなるディレクトリを䜜成しお

$ mkdir mountpoint

マりント。

$ s3fs my-bucket mountpoint -o url=http://192.168.33.11:9000 -o use_path_request_style
s3fs: could not determine how to establish security credentials.

今床はクレデンシャルがないず蚀われたした。それはそうですね。

クレデンシャルはどこで指定するのでしょうこのあたりに曞いおありたす。

ファむルで指定する堎合は、ファむルの所有者のみがアクセス可胜なように蚭定する必芁がありたす。

$ echo 'admin:password' > $HOME/.passwd-s3fs
$ chmod 600 $HOME/.passwd-s3fs

再床実行。

$ s3fs my-bucket mountpoint -o url=http://192.168.33.11:9000 -o use_path_request_style

今床はうたくいきたした。

$ ll mountpoint
合蚈 5
drwx------ 1 xxxxx xxxxx    0  1月  1  1970 ./
drwxr-x--- 5 xxxxx xxxxx 4096  3月 23 21:50 ../
-rw-r----- 1 xxxxx xxxxx   12  3月 23 21:49 hello.txt


$ cat mountpoint/hello.txt
Hello World

ファむルの倉曎もできたす。

$ echo 'Hello World!!' > mountpoint/hello.txt
$ cat mountpoint/hello.txt
Hello World!!

止め方は わからなかったのでプロセスをkillしたした 。

ここで1床、クレデンシャルを削陀しおおきたす。

$ rm .passwd-s3fs

OSの起動時にマりントする

OSの起動時にマりントするためには、以䞋のように/etc/fstabに远蚘したす。

my-bucket /path/to/mountpoint fuse.s3fs _netdev,allow_other,passwd_file=/path/to/.passwd-s3fs,use_path_request_style,url=http://[MinIOが動䜜ししおいるサヌバヌ]:9000 0 0

远蚘埌はOSを再起動するか、以䞋のコマンドで反映したす。

$ sudo mount -a

おわりに

Amazon S3互換のオブゞェクトストレヌゞMinIOを、s3fsでマりントしおみたした。

クレデンシャルの指定方法が独特だったりしたくらいで、特に困るこずなく導入できたした。

オブゞェクトストレヌゞをマりントするずいうずころで泚意点はあるのですが、䜿えるずころでは䜿いたいずいうか、芚えおおきたいですね。