S3 object storage offers scalable and cost-effective storage solutions, but working with it directly can be challenging when your applications expect traditional filesystem access. This guide explores two powerful tools - rclone
and s3fs
- that bridge this gap by mounting S3 buckets as local filesystems.
Visit my blog here
Prerequisites
Before getting started, ensure you have installed the required third-party software:
-
rclone
: A versatile command-line tool for managing files on cloud storage- Installation: https://rclone.org/install/
- Supports numerous storage providers beyond S3
-
s3fs
: A FUSE-based filesystem specifically designed for S3- Installation: https://github.com/s3fs-fuse/s3fs-fuse
- Available in most package managers:
apt install s3fs
oryum install s3fs-fuse
Configuring Your S3 Mount Tools
Step 1: Setting Up Configuration Files
Each tool requires specific configuration to connect to your S3 bucket:
rclone Configuration
Create a configuration file at /etc/rclone.conf
:
[s3-mount]
type = s3
provider = AWS
env_auth = false
access_key_id = YOUR_ACCESS_KEY
secret_access_key = YOUR_SECRET_KEY
endpoint = YOUR_ENDPOINT_URL
acl = private
See rclone.config.example for a complete template.
s3fs Configuration
Create a credentials file at /etc/passwd-s3fs
with the following format:
ACCESS_KEY_ID:SECRET_ACCESS_KEY
Set appropriate permissions:
chmod 600 /etc/passwd-s3fs
See s3fs-passwd.example for reference.
Step 2: Creating Mount Scripts
Create shell scripts to manage the mounting process with proper parameters:
rclone Mount Script
Create /usr/local/bin/rclone-mount.sh
:
#!/bin/bash
# Configuration variables
bucket="your-bucket-name"
url="https://your-endpoint.com"
mount_point="/mnt/s3-bucket"
config_file="/etc/rclone.conf"
log_file="/var/log/rclone-mount.log"
log_level="DEBUG"
provider="s3" # Options: vstorage, s3, etc.
# Create mount point if it doesn't exist
mkdir -p "${mount_point}"
# Mount the bucket
rclone mount \
--config "${config_file}" \
--log-file "${log_file}" \
--log-level "${log_level}" \
--allow-other \
--file-perms 0644 \
--dir-perms 0755 \
--vfs-cache-mode full \
--vfs-cache-max-size 1G \
--vfs-read-chunk-size 10M \
--daemon \
"${provider}:${bucket}" "${mount_point}"
exit 0
Make the script executable:
chmod +x /usr/local/bin/rclone-mount.sh
s3fs Mount Script
Create /usr/local/bin/s3fs-mount.sh
:
#!/bin/bash
# Configuration variables
bucket="your-bucket-name"
url="https://your-endpoint.com"
mount_point="/mnt/s3-bucket"
passwd_file="/etc/passwd-s3fs"
log_file="/var/log/s3fs-mount.log"
log_level="debug"
region="HCM03" # Your specific region
# Create mount point if it doesn't exist
mkdir -p "${mount_point}"
# Mount the bucket
s3fs "${bucket}" "${mount_point}" \
-o passwd_file="${passwd_file}" \
-o url="${url}" \
-o use_path_request_style \
-o allow_other \
-o umask=0022 \
-o dbglevel="${log_level}" \
-o curldbg \
-o endpoint="${region}" \
> "${log_file}" 2>&1
exit 0
Make the script executable:
chmod +x /usr/local/bin/s3fs-mount.sh
Step 3: Creating Systemd Service Units
To ensure your S3 bucket mounts automatically at boot and is properly managed by systemd:
rclone Systemd Service
Create /lib/systemd/system/rclone-mount.service
:
[Unit]
Description=Mount S3 Bucket using rclone
After=network-online.target
Wants=network-online.target
[Service]
Type=forking
ExecStart=/usr/local/bin/rclone-mount.sh
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
s3fs Systemd Service
Create /lib/systemd/system/s3fs-mount.service
:
[Unit]
Description=Mount S3 Bucket using s3fs
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/s3fs-mount.sh
RemainAfterExit=yes
ExecStop=/bin/fusermount -u /mnt/s3-bucket
[Install]
WantedBy=multi-user.target
Step 4: Enable and Start the Service
Choose which tool you prefer (rclone or s3fs) and enable its service:
# For rclone
sudo systemctl daemon-reload
sudo systemctl enable rclone-mount.service --now
sudo systemctl status rclone-mount.service
# For s3fs
sudo systemctl daemon-reload
sudo systemctl enable s3fs-mount.service --now
sudo systemctl status s3fs-mount.service
Performance Considerations
-
rclone:
- Offers better performance for large files
- More feature-rich with built-in caching
- Uses more memory but provides better throughput
- Excellent for backup/sync operations
-
s3fs:
- Simpler, lighter resource footprint
- Better for direct file access patterns
- More POSIX-compliant but slower for metadata operations
- Good for applications that need basic file access
Troubleshooting Common Issues
Mount Failure
If your mount fails to initialize:
- Check credentials: Verify your access keys are correct in the configuration files
cat /var/log/rclone-mount.log | grep "auth"
# or
cat /var/log/s3fs-mount.log | grep "auth"
- Test connectivity: Confirm network access to your S3 endpoint
curl -I https://your-endpoint.com
- Permissions: Ensure your mount scripts are executable
ls -la /usr/local/bin/rclone-mount.sh
ls -la /usr/local/bin/s3fs-mount.sh
- Bucket existence: Verify the bucket name is spelled correctly and exists
# For AWS S3
aws s3 ls s3://your-bucket-name
# For other S3 providers, use their CLI tools
Performance Issues
If you experience slow access:
-
Increase cache size: For rclone, modify the
--vfs-cache-max-size
parameter -
Adjust chunk size: Modify
--vfs-read-chunk-size
for your workload - Check network latency: High latency to your S3 endpoint will impact performance
- Consider local caching: For frequently accessed files
Top comments (0)