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-KEYOr 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
| Option | Description |
|---|---|
--endpoint | Custom S3 endpoint URL |
--list-type | Set to 1 or 2 for non-Yandex S3 |
--region | S3 region |
--file-mode | Global file permission bits (e.g. 0644) |
--dir-mode | Global directory permission bits (e.g. 0755) |
--uid / --gid | File ownership |
--memory-limit | Data cache size (default: 1 GB) |
--stat-cache-ttl | Metadata cache TTL (default: 60s) |
--entry-limit | Max cached metadata entries (default: 100000) |
--enable-mtime | Persist mtime on objects (Yandex S3 or compatible) |
--shared-config | Path to AWS credentials file |
Caveats
- No hard links
- No file locking
- Files deleted while open return
ENOENTon access (no unlink-while-open semantics) - Concurrent multi-host writes require coordination: use
fsync()and account for--stat-cache-ttlpropagation delay --enable-patch(partial object updates) is Yandex S3 only