Retour au classement

kahing/goofys

Go

a high-performance, POSIX-ish Amazon S3 file system written in Go

s3-buckets3posixfilesystemaws-s3cloud-storagegolangfusegcsgoogle-cloud-storageopenstack-swiftfuse-filesystem
Croissance des étoiles
Étoiles
5.6k
Forks
534
Croissance hebdomadaire
Issues
267
2k4k
janv. 2023mars 2024mai 2025juil. 2026
ArtefactsGo Modulesgo get github.com/kahing/goofys
README

Goofys is a high-performance, POSIX-ish Amazon S3 file system written in Go

Build Status Github All Releases Twitter Follow Stack Overflow Questions

Overview

Goofys allows you to mount an S3 bucket as a filey system.

It's a Filey System instead of a File System because goofys strives for performance first and POSIX second. Particularly things that are difficult to support on S3 or would translate into more than one round-trip would either fail (random writes) or faked (no per-file permission). Goofys does not have an on disk data cache (checkout catfs), and consistency model is close-to-open.

Installation

  • On Linux, install via pre-built binaries. You may also need to install fuse too if you want to mount it on startup.

  • On macOS, install via Homebrew:

$ brew cask install osxfuse
$ brew install goofys
  • Or build from source with Go 1.10 or later:
$ export GOPATH=$HOME/work
$ go get github.com/kahing/goofys
$ go install github.com/kahing/goofys

Usage

$ cat ~/.aws/credentials
[default]
aws_access_key_id = AKID1234567890
aws_secret_access_key = MY-SECRET-KEY
$ $GOPATH/bin/goofys <bucket> <mountpoint>
$ $GOPATH/bin/goofys <bucket:prefix> <mountpoint> # if you only want to mount objects under a prefix

Users can also configure credentials via the AWS CLI or the AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY environment variables.

To mount an S3 bucket on startup, make sure the credential is configured for root, and can add this to /etc/fstab:

goofys#bucket   /mnt/mountpoint        fuse     _netdev,allow_other,--file-mode=0666,--dir-mode=0777    0       0

See also: Instruction for Azure Blob Storage, Azure Data Lake Gen1, and Azure Data Lake Gen2.

Got more questions? Check out questions other people asked

Benchmark

Using --stat-cache-ttl 1s --type-cache-ttl 1s for goofys -ostat_cache_expire=1 for s3fs to simulate cold runs. Detail for the benchmark can be found in bench.sh. Raw data is available as well. The test was run on an EC2 m5.4xlarge in us-west-2a connected to a bucket in us-west-2. Units are seconds.

Benchmark result

To run the benchmark, configure EC2's instance role to be able to write to $TESTBUCKET, and then do:

$ sudo docker run -e BUCKET=$TESTBUCKET -e CACHE=false --rm --privileged --net=host -v /tmp/cache:/tmp/cache kahing/goofys-bench
# result will be written to $TESTBUCKET

See also: cached benchmark result and result on Azure.

License

Copyright (C) 2015 - 2019 Ka-Hing Cheung

Licensed under the Apache License, Version 2.0

Current Status

goofys has been tested under Linux and macOS.

List of non-POSIX behaviors/limitations:

  • only sequential writes supported
  • does not store file mode/owner/group
    • use --(dir|file)-mode or --(uid|gid) options
  • does not support symlink or hardlink
  • ctime, atime is always the same as mtime
  • cannot rename directories with more than 1000 children
  • unlink returns success even if file is not present
  • fsync is ignored, files are only flushed on close

Compatibility with non-AWS S3

goofys has been tested with the following non-AWS S3 providers:

  • Amplidata / WD ActiveScale
  • Ceph (ex: Digital Ocean Spaces, DreamObjects, gridscale)
  • EdgeFS
  • EMC Atmos
  • Google Cloud Storage
  • Minio (limited)
  • OpenStack Swift
  • S3Proxy
  • Scaleway
  • Wasabi

Additionally, goofys also works with the following non-S3 object stores:

  • Azure Blob Storage
  • Azure Data Lake Gen1
  • Azure Data Lake Gen2

References

Dépôts similaires
knadh/koanf

Simple, extremely lightweight, extensible, configuration management library for Go. Supports JSON, TOML, YAML, env, command line, file, S3 etc. Alternative to viper.

GoGo ModulesMIT Licenseconfigurationconfiguration-management
4.1k193
minio/mc

Unix like utilities for object store

GoGo ModulesGNU Affero General Public License v3.0storageaws-s3
min.io/download
3.5k682
0x4447/0x4447_product_s3_email

📫 A serverless email server on AWS using S3 and SES

MIT License0x4447s3
0x4447.com
3k162
nsonaniya2010/SubDomainizer

A tool to find subdomains and interesting things hidden inside, external Javascript files of page, folder, and Github.

PythonPyPIMIT Licensepython3security-tools
1.9k235
jordanpotti/AWSBucketDump

Security Tool to Look For Interesting Files in S3 Buckets

PythonPyPIMIT Licenses3-bucketpenetration-testing
1.5k245
good-lly/s3mini

⚠️ Moved to Codeberg: https://codeberg.org/thinking_tools/s3mini - Tiny S3 client. Edge computing ready. No-dep. In Typescript.

JavaScriptnpmMIT Licenseaws-s3ceph
npmjs.com/package/s3mini
1.3k22
minio/minio-java

MinIO Client SDK for Java

JavaMavenApache License 2.0librariessdk
docs.min.io/docs/java-client-quickstart-guide.html
1.3k521
0xsha/CloudBrute

Awesome cloud enumerator

GoGo ModulesMIT Licensebugbountycloud
1.1k159
minio/minio-py

MinIO Client SDK for Python

PythonPyPIApache License 2.0miniominio-client
docs.min.io/docs/python-client-quickstart-guide.html
1.1k370
okhosting/awesome-storage

A curated list of storage open source tools. Backups, redundancy, sharing, distribution, encryption, etc.

MIT Licensecurated-listsawesome
okhosting.com
1k71