Skip to main content

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.

note

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)
note

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.