Mount Tigris as a Filesystem
For AI workloads, most runtimes assume data is accessible via a filesystem. By mounting a Tigris bucket as a filesystem, data is no longer limited by local storage nor memory capacity.
After testing filesystems for performance and reliability, we recommend GeeseFS. The is a fork of the original yandex-cloud/geesefs project with optimizations for Tigris. GeeseFS is a FUSE-based filesystem that mounts S3-compatible storage as a local filesystem. You can use GeeseFS to mount any Tigris bucket as if it was a normal Linux filesystem.
GeeseFS does not obfuscate the objects in the bucket, and does not require an additional metadata service (unlike JuiceFS). This means you can access the objects directly via the S3-compatible API using the standard S3 SDKs, tools, and libraries, as well as via the GeeseFS filesystem.
Prerequisites:
- A Tigris account
- A bucket you want to mount into your system (
mybucket
) - A target location you want to mount your bucket to (
~/data
)
geesefs uses FUSE to mount buckets into the filesystem. FUSE has limitations involving multiple users accessing the same mountpoint. If you need multiple users (human or service) to access the same bucket, consider creating multiple systemd services mounting the bucket in each user's home directory.
Installing geesefs
Download the latest release for your machine from
the list of geesefs releases
to /usr/local/bin
and mark it as executable:
amd64 Linux
sudo wget -O /usr/local/bin/geesefs https://github.com/tigrisdata/geesefs/releases/download/v0.42.0-tigris1/geesefs-linux-amd64
sudo chmod +x /usr/local/bin/geesefs
Configure credentials
Create a new access key with edit permissions on your target bucket in the Tigris Dashboard. Configure the aws-cli to utilize the credentials as described in the guide here.
Mount bucket on login with systemd
Make a folder for the geesefs service:
mkdir -p ~/.local/share/systemd/user
Then copy this unit into ~/.local/share/systemd/user/mount-data.service
:
[Unit]
Description=Mount Tigris bucket mybucket to ~/data
After=network.target
[Service]
Type=forking
WorkingDirectory=%h
ExecStart=/usr/local/bin/geesefs --endpoint https://fly.storage.tigris.dev --list-type=2 --disable-xattr --no-implicit-dir --no-dir-object mybucket %h/data
[Install]
WantedBy=default.target
Make sure to adjust mybucket
and %h/data
as needed. In systemd units, %h
refers to your home directory, so this mounts bucket mybucket
to ~/data
.
Enable the unit with systemctl daemon-reload
and systemctl enable
:
systemctl --user daemon-reload
systemctl --user enable --now mount-data.service
Reboot test
Reboot your system and log back in. Run the mount command and you should see information about geesefs mounting your bucket:
$ mount | grep geesefs
mybucket on /home/opc/data type fuse.geesefs (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000,default_permissions)
You did it! You now have a performant filesystem backed by bottomless object storage.