- NFS storage account
rysweethomedirexists and is configured - NFS feature is fully implemented in main branch (issue #72 merged)
- Auto-detection feature works (auto-selects when only one storage exists)
- All necessary commands are available (
azlin storage mount/unmount) - Bootstrap is COMPLETE - NFS share is populated and ready to use
- Config file is set with
default_nfs_storage = "rysweethomedir"
DO NOT remove or comment out default_nfs_storage from ~/.azlin/config.toml
This setting ensures new VMs automatically mount your shared NFS home directory.
When you create a VM with NFS enabled, this happens:
- VM is created with basic Ubuntu defaults
- NFS share is mounted to
/home/azureuser - If NFS share is empty, the VM's home directory contents are copied to it
BUT: A new VM's home directory only has Ubuntu defaults, NOT your custom configuration from ~/.azlin/home (SSH keys, .bashrc, tools, etc.).
The ~/.azlin/home directory is only synced when NFS is NOT being used.
To populate the NFS share with your configuration:
# Check current VMs
az vm list --resource-group rysweet-linux-vm-pool --output table
# Delete unused VMs to free quota
az vm delete --name <vm-name> --resource-group rysweet-linux-vm-pool --yesIf you need to re-bootstrap, temporarily remove default_nfs_storage from config.
# Create VM that will sync ~/.azlin/home
uv run python -m azlin new --name nfs-bootstrap --vm-size Standard_D2s_v3 --no-auto-connectThis VM will:
- Sync
~/.azlin/home→/home/azureuseron the VM - Include all your SSH keys, dotfiles, and configuration
# Mount the NFS storage (copies home directory to NFS share)
uv run python -m azlin storage mount rysweethomedir --vm nfs-bootstrapThis will:
- Backup existing
/home/azureuseron the VM - Mount the NFS share
- Copy the backed-up home directory to the NFS share
# Delete the bootstrap VM
az vm delete --name nfs-bootstrap --resource-group rysweet-linux-vm-pool --yesEdit ~/.azlin/config.toml and add:
default_nfs_storage = "rysweethomedir"# Create a VM - it will automatically use NFS
uv run python -m azlin new --name test-nfs-vm --no-auto-connect
# The VM will auto-detect the NFS storage and mount it
# All your configuration will be available immediately# Create a second VM
uv run python -m azlin new --name test-nfs-vm-2 --no-auto-connect
# Both VMs will share the same home directory
# Changes made on one VM are visible on the otherYour ~/.azlin/config.toml is configured:
default_resource_group = "rysweet-linux-vm-pool"
default_region = "westus2"
default_vm_size = "Standard_E16as_v5"
default_nfs_storage = "rysweethomedir" # ✅ ACTIVE - Do not remove!default_nfs_storage. This ensures all new VMs automatically use your shared NFS home directory.
Account: rysweethomedir
- Endpoint:
rysweethomedir.file.core.windows.net:/rysweethomedir/home - Size: 100GB Premium
- Region: westus2
- Status: Currently empty (0% used)
# List storage accounts
azlin storage list
# Check storage status
azlin storage status rysweethomedir
# Mount storage on existing VM
azlin storage mount rysweethomedir --vm <vm-name>
# Unmount storage from VM
azlin storage unmount --vm <vm-name>
# Create new storage account
azlin storage create <name> --size 100 --tier PremiumOnce the NFS share is populated:
-
Create VM:
azlin new --name my-vm- Auto-detects
rysweethomedir(only one storage) - Mounts NFS share instead of syncing home directory
- VM immediately has all your configuration
- Auto-detects
-
Multiple VMs: All VMs share the same home directory
- SSH keys work across all VMs
- Configuration changes propagate instantly
- Perfect for distributed workloads
-
Manual Control: Use
--nfs-storageto overrideazlin new --nfs-storage rysweethomedir(explicit)azlin new --nfs-storage ""(disable NFS for this VM)
If you see "QuotaExceeded" when creating VMs:
# List and delete old VMs
az vm list --resource-group rysweet-linux-vm-pool --output table
az vm delete --name <old-vm> --resource-group rysweet-linux-vm-pool --yesCheck that:
- VM is in the same region as storage (westus2)
- VM is in the same resource group
- VM is running before mounting
Verify ~/.azlin/home/.ssh/authorized_keys exists and contains your public key:
cat ~/.azlin/home/.ssh/authorized_keys┌─────────────────┐
│ ~/.azlin/home/ │
│ (local) │
└────────┬────────┘
│
│ 1. Sync to bootstrap VM
▼
┌─────────────────┐
│ Bootstrap VM │
│ /home/azureuser │
└────────┬────────┘
│
│ 2. Mount NFS & copy
▼
┌─────────────────────────┐
│ NFS Storage │
│ rysweethomedir │
│ (Azure Files Premium) │
└────────┬────────────────┘
│
│ 3. Auto-mount on new VMs
▼
┌─────────────────┐ ┌─────────────────┐
│ VM 1 │ │ VM 2 │
│ /home/azureuser │ ◀─▶ │ /home/azureuser │
│ (shared) │ │ (shared) │
└─────────────────┘ └─────────────────┘
- Free up VM quota by deleting unused VMs
- Create bootstrap VM to populate NFS share
- Uncomment
default_nfs_storagein config - Test with new VMs
All the code is already in place - you just need to populate the NFS share once!