FUSE-based file system backed by Amazon S3
Go to file
Nathaniel W. Turner 584ea488bf Use role name instead of profile name when iam_role=auto
When using an instance with an IAM Role, transient credentials can be
found in http://169.254.169.254/latest/meta-data/ at
iam/security-credentials/role-name and s3fs tries to do this. However,
it is using the profile-name where role-name is needed. In many cases
the role and profile name are the same, but they are not always.

The simplest way to find the role name appears to be to GET
http://169.254.169.254/latest/meta-data/iam/security-credentials/
itself, which returns a listing of the role names for which temporary
credentials exist. (I think there will probably only be one, but we
probably want to split on newlines and take the first one here in case
that assumption is not valid). This is the approach the AWS SDK appears
to use (based on WireShark analysis).

Bug: https://github.com/s3fs-fuse/s3fs-fuse/issues/421
Signed-off-by: Nathaniel W. Turner <nate@houseofnate.net>
2016-05-24 13:34:19 -04:00
doc loading IAM role name automatically(iam_role option) - #387 2016-05-06 04:37:32 +00:00
src Use role name instead of profile name when iam_role=auto 2016-05-24 13:34:19 -04:00
test Use 'return' instead of 'exit' in test 2016-04-22 16:24:26 +08:00
.gitignore fix gitignore 2015-12-04 15:21:32 -08:00
.mailmap Add .mailmap 2015-04-27 11:17:39 -07:00
.travis.yml Enable integration tests for Travis 2015-10-14 15:57:15 -07:00
AUTHORS Summary of Changes(1.72 -> 1.73) 2013-08-23 17:24:47 +00:00
autogen.sh s3fs can print version with short commit hash - #228 2015-08-21 16:19:31 +00:00
ChangeLog Updated ChangeLog and configure.ac for v1.79 2015-07-19 16:14:33 +00:00
configure.ac Fix clock_gettime autotools detection on Linux 2016-02-08 13:45:34 -08:00
COPYING In preparation to remove the unnecessary "s3fs" 2010-11-13 23:59:23 +00:00
INSTALL In preparation to remove the unnecessary "s3fs" 2010-11-13 23:59:23 +00:00
Makefile.am s3fs can print version with short commit hash - #228 2015-08-21 16:19:31 +00:00
README.md Updated README.md for fstab example. 2016-01-24 05:34:28 +00:00

s3fs

s3fs allows Linux and Mac OS X to mount an S3 bucket via FUSE. s3fs preserves the native object format for files, allowing use of other tools like s3cmd.

Features

  • large subset of POSIX including reading/writing files, directories, symlinks, mode, uid/gid, and extended attributes
  • compatible with Amazon S3, Google Cloud Storage, and other S3-based object stores
  • large files via multi-part upload
  • renames via server-side copy
  • optional server-side encryption
  • data integrity via MD5 hashes
  • in-memory metadata caching
  • local disk data caching
  • user-specified regions, including Amazon GovCloud
  • authenticate via v2 or v4 signatures

Installation

Ensure you have all the dependencies:

On Ubuntu 14.04:

sudo apt-get install automake autotools-dev g++ git libcurl4-gnutls-dev libfuse-dev libssl-dev libxml2-dev make pkg-config

On CentOS 7:

sudo yum install automake fuse-devel gcc-c++ git libcurl-devel libxml2-devel make openssl-devel

Compile from master via the following commands:

git clone https://github.com/s3fs-fuse/s3fs-fuse.git
cd s3fs-fuse
./autogen.sh
./configure
make
sudo make install

Examples

Enter your S3 identity and credential in a file /path/to/passwd:

echo MYIDENTITY:MYCREDENTIAL > /path/to/passwd

Make sure the file has proper permissions (if you get 'permissions' error when mounting) /path/to/passwd:

chmod 600 /path/to/passwd

Run s3fs with an existing bucket mybucket and directory /path/to/mountpoint:

s3fs mybucket /path/to/mountpoint -o passwd_file=/path/to/passwd

If you encounter any errors, enable debug output:

s3fs mybucket /path/to/mountpoint -o passwd_file=/path/to/passwd -d -d -f -o f2 -o curldbg

You can also mount on boot by entering the following line to /etc/fstab:

s3fs#mybucket /path/to/mountpoint fuse _netdev,allow_other 0 0

or

mybucket /path/to/mountpoint fuse.s3fs _netdev,allow_other 0 0

Note: You may also want to create the global credential file first

echo MYIDENTITY:MYCREDENTIAL > /etc/passwd-s3fs
chmod 600 /path/to/passwd

Note2: You may also need to make sure netfs service is start on boot

Limitations

Generally S3 cannot offer the same performance or semantics as a local file system. More specifically:

  • random writes or appends to files require rewriting the entire file
  • metadata operations such as listing directories have poor performance due to network latency
  • eventual consistency can temporarily yield stale data
  • no atomic renames of files or directories
  • no coordination between multiple clients mounting the same bucket
  • no hard links

References

  • goofys - similar to s3fs but has better performance and less POSIX compatibility
  • s3backer - mount an S3 bucket as a single file
  • s3fs-python - an older and less complete implementation written in Python
  • S3Proxy - combine with s3fs to mount EMC Atmos, Microsoft Azure, and OpenStack Swift buckets
  • s3ql - similar to s3fs but uses its own object format
  • YAS3FS - similar to s3fs but uses SNS to allow multiple clients to mount a bucket

Frequently Asked Questions

License

Copyright (C) 2010 Randy Rizun rrizun@gmail.com

Licensed under the GNU GPL version 2