[ AWS ] S3 掛載到 linux 上
03 Oct 2017Step 1 - Install the service s3fs,fuse
cd /usr/local/src/
wget http://sourceforge.net/projects/fuse/files/fuse-2.X/2.9.2/fuse-2.9.2.tar.gz/download -O fuse-2.9.2.tar.gz
sudo yum install fuse*
sudo chkconfig fuse
#沒有出現任何信息就是安裝好了
#載入模組
sudo modprobe fuse
sudo yum install s3fs
#s3fs 在 AWS 上的instance可以直接安裝,若不是AWS上面的機器可以照以下步驟安裝
git clone https://github.com/s3fs-fuse/s3fs-fuse.git
cd s3fs-fuse
./autogen.sh
./configure --prefix=/usr
make
sudo make install
#檢查s3fs是否安裝成功
s3fs
#show: s3fs: missing BUCKET argument.
#show: Usage: s3fs BUCKET:[PATH] MOUNTPOINT [OPTION]...
which s3fs
#show: /usr/local/bin/s3fs
Step 2 - 將IAM密鑰新增到passwd文件內
在做這個步驟前,需要先到AWS控制台內操作,直到拿到密鑰才能回來繼續往下做
echo 'AKIAIOEO4E2VOHLxxxxx:2LXBboddEpRLmWl48i3+b4ziwPL3bJ4vxxxxxxxx' >> ~/.passwd-s3fs
chmod 600 ~/.passwd-s3fs
- s3fs 指令:
- s3fs BUCKET MOUNTPOINT [OPTION]…
- s3fs [S3 bucket name] [foldername] [OPTION]
OPTION是選項,格式是 –o
名稱 | 含意 | 預設值 |
---|---|---|
passwd_file | 指定掛載的密鑰 | |
default_acl | 開放的權限 | |
use_cache | 是否使用cache (建議使用) | |
connect_timeout | 設置超時連接等待的時間,單位秒 | 300 |
url | 設定訪問此s3的網址 | http://s3.amazonaws.com |
endpoint | 設定bucket的endpoint | us-east-1 |
allow_other | 設定allow_other允許所有使用者訪問掛載的目錄,設定這個選項需要在/etc/fuse.conf 文件添加user_allow_other 選項,Like below↓ |
/etc/fuse.conf
# 掛載上限
# mount_max = 1000
user_allow_other
Step 3 - 掛載 bucket
#創一個folder來當作載體
cd /home/user
mkdir s3folder
s3fs s3-bucket -o allow_other s3folder -o passwd_file=/home/user/.passwd-s3fs/ -o use_cache=/tmp -o default_acl=public-read
s3fs ez-ftp -o allow_other S3_FTP -o passwd_file=/etc/.passwd-s3fs -o use_cache=/tmp -o default_acl=public-read-write
cd s3foler
du -h
#show: s3fs 256T 0 256T 0% /home/user/s3folder
Step 4 - 卸載 bucket
cd /home/user
fusermount -u s3folder
rmdir s3folder
2017-12-14 補充:
今天我照著上面的步驟做,看到的訊息是
ls: cannot open directory .: Permission denied
因為我想掛載的是一個用了一段時間的 bucket ,裡面有不少資料都是 User 丟上去的
如果照著上面的步驟做,是可以正常新增一個以前沒有的檔案並操作它,但是如果是對”已經存在”的檔案操作的話就會看到上面那個訊息
當下我找到這篇,它的 issue 幫助我很多,因為很多人也遇到相同的問題
解決方法是在原本的指令後面加個 -oumask=000
,參數有點類似chmod 777
,oumask 000 = chmod 777
,如果之後知曉參數意思時再來補充
最後指令如下:
sudo s3fs [Bucket-name] -oallow_other [Folder_PATH] -opasswd_file=/etc/passwd-s3fs -ouse_cache=/tmp -odefault_acl=public-read-write -oumask=000 -ouid=1000 -ogid=1000
參考:https://github.com/s3fs-fuse/s3fs-fuse/wiki/Fuse-Over-Amazon