Written by James McDonald

December 7, 2022

BlobFuse2 is a Microsoft maintained utility to mount a remote Azure Storage Account Blob Container or folder into the Linux file system and then interact with it as if it was local.

You need some directories to serve as a cache and mount point. You could put them anywhere such as in your home directory but I have created a 120GB disk an mounted it as /u1

Cache DirectoryAzure Storage Account Container Mount Point
/u1/blobfuse/cache/u1/azure

The Cache Directory stores files that you copy into the mount point before they get up loaded to Azure

Download and install Microsoft apt repository configuration

wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb
dpkg -i ./packages-microsoft-prod.deb
apt-get update
apt-get install blobfuse2

Modify /etc/fuse.conf and uncomment user_allow_other

This allows more than just the user that mounted the storage account to access the files in Azure.

# presence of the option.
user_allow_other
# mount_max = n - this option sets the maximum number of mounts.

Config blobfuse2.yaml

# Refer ./setup/baseConfig.yaml for full set of config parameters

allow-other: true

logging:
  type: syslog
  level: log_debug

components:
  - libfuse
  - file_cache
  - attr_cache
  - azstorage

libfuse:
  attribute-expiration-sec: 120
  entry-expiration-sec: 120
  negative-entry-expiration-sec: 240

file_cache:
   path: /u1/blobfuse/cache
#  timeout-sec: 120
   max-size-mb: 8192
   cleanup-on-start: true
   allow-non-empty-temp: true
stream:
  block-size-mb: 8
  blocks-per-file: 3
  cache-size-mb: 1024

attr_cache:
  timeout-sec: 7200

azstorage:
  type: block
  account-name: mystorageaccount
  # account-key: mystoragekey
  endpoint: https://mystorageaccount.blob.core.windows.net
  mode: sas
  container: mycontainer
  sas: ?st=_START_DATE_&se=_EXPIRY_DATE_&sp=racwdl&sv=2021-06-08&sr=c&sig=_SIG_HERE_


Manual mount command

blobfuse2 mount /u1/azure --config-file=./blobfuse2.yaml

Create a SAS signed by Access Key using az cli

 az storage container generate-sas  \
--account-name mystorageaccount \
--name mycontainer \
--permissions acdlrw \
--start 2022-12-06 \
--expiry 2024-12-07 \
--account-key "_STORAGE_ACCOUNT_ACCESS_KEY_"

To get the _STORAGE_ACCOUNT_ACCESS_KEY_ from the Azure Portal

Show and copy the Key

Starting blobfuse2 at boot systemd

Edit to taste then copy the following into /etc/systemd/system/blobfuse2.service

sudo systemctl daemon-reload

Contents of blobfuse2.service file

Not sure if i’m doing it right but I had to add –foreground to get the service to run and stay up.

[Unit]
Description=A virtual file system adapter for Azure Blob storage.
After=network-online.target
Requires=network-online.target
WorkingDirectory=/u1/blobfuse2
[Service]
User=ja
Group=ja
Environment=BlobMountingPoint=/u1/azure
Environment=BlobTmp=/u1/blobfuse2/cache
Environment=BlobConfigFile=/u1/blobfuse2/blobfuse2.yaml
Environment=BlobLogLevel=LOG_WARNING
Environment=attr_timeout=240
Environment=entry_timeout=240
Environment=negative_timeout=120
Type=forking
ExecStart=/usr/bin/blobfuse2 mount ${BlobMountingPoint} --tmp-path=${BlobTmp} --config-file=${BlobConfigFile} --log-level=${BlobLogLevel}
ExecStop=/usr/bin/fusermount -u ${BlobMountingPoint}
[Install]
WantedBy=multi-user.target

Stopping rsync from copying everything back up to azure after a restart

Use --ignore-existing

Caution with --delete it will delete everything in target that is not in source

rsync -av --delete --ignore-existing /u1/backup/ofs/ /u1/azure/

0 Comments

Submit a Comment

Your email address will not be published. Required fields are marked *

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

The reCAPTCHA verification period has expired. Please reload the page.

You May Also Like…