GeeseFS

High-performance FUSE-based S3 filesystem. Successor to s3fs with significantly better performance via aggressive parallelism and async I/O. Supports AWS S3, MinIO, Yandex S3, and any S3-compatible storage.

For Kubernetes, see k8s-csi-s3 which uses GeeseFS as its backend.

Credentials

Uses standard AWS credential format in ~/.aws/credentials:

[default]
aws_access_key_id = AKID1234567890
aws_secret_access_key = MY-SECRET-KEY

Or via environment variables:

export AWS_ACCESS_KEY_ID=...
export AWS_SECRET_ACCESS_KEY=...

Mount

# Basic mount
geesefs my-bucket /mnt/s3
 
# Custom endpoint (MinIO etc.)
geesefs --endpoint https://minio.example.com my-bucket /mnt/s3
 
# Mount a prefix/subdirectory within a bucket
geesefs --endpoint https://minio.example.com my-bucket:some/prefix /mnt/s3
 
# With permissions
geesefs --file-mode=0644 --dir-mode=0755 --uid=1000 --gid=1000 my-bucket /mnt/s3
 
# Non-Yandex S3 (most providers) — set --list-type
geesefs --list-type=2 --endpoint https://s3.example.com my-bucket /mnt/s3
 
# Unmount
fusermount -u /mnt/s3

/etc/fstab entry

my-bucket /mnt/s3 fuse.geesefs _netdev,allow_other,--file-mode=0666,--dir-mode=0777,--list-type=2,--endpoint=https://minio.example.com 0 0

For a custom credentials file: add --shared-config=/etc/geesefs-credentials.

Key options

OptionDescription
--endpointCustom S3 endpoint URL
--list-typeSet to 1 or 2 for non-Yandex S3
--regionS3 region
--file-modeGlobal file permission bits (e.g. 0644)
--dir-modeGlobal directory permission bits (e.g. 0755)
--uid / --gidFile ownership
--memory-limitData cache size (default: 1 GB)
--stat-cache-ttlMetadata cache TTL (default: 60s)
--entry-limitMax cached metadata entries (default: 100000)
--enable-mtimePersist mtime on objects (Yandex S3 or compatible)
--shared-configPath to AWS credentials file

Caveats

  • No hard links
  • No file locking
  • Files deleted while open return ENOENT on access (no unlink-while-open semantics)
  • Concurrent multi-host writes require coordination: use fsync() and account for --stat-cache-ttl propagation delay
  • --enable-patch (partial object updates) is Yandex S3 only