Post

Creating Network Storage on External Drive and YouTube Download System

This guide documents setting up a centralized Samba network storage server on Proxmox using an external SSD

Creating Network Storage on External Drive and YouTube Download System

Creating Network Storage on External Drive and YouTube Download System

Overview

This guide documents setting up a centralized Samba network storage server on Proxmox using an external SSD, configuring it for universal access across Linux, Windows, and iOS devices, fixing Navidrome music streaming, and setting up yt-dlp for downloading YouTube videos directly to network storage with mobile streaming capability.

Infrastructure Assessment

Proxmox Hosts:

  • .125 (nuc5): 60 GB RAM, 29 GB available
  • .121 (nuc3): 16 GB RAM, 2.6 GB available

Storage on .125:

  • 1 TB NVMe (nvme1tb): Backups
  • 2 TB internal NVMe (nvme2tb): Applications and VMs
  • 2 TB external SSD (Ext_T7_SSD): 1.7 TB available - chosen for network storage

Commands run on both Proxmox hosts:

1
2
3
4
5
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,FSTYPE
df -h
free -h
top -bn1 | head -20
qm list

Cleaning the External SSD

Check current contents on .125:

1
2
ls -lh /mnt/Ext_T7_ssd/
du -sh /mnt/Ext_T7_ssd/*

Move music to permanent location:

1
2
mkdir -p /mnt/nvme2tb/music
mv /mnt/Ext_T7_ssd/music/* /mnt/nvme2tb/music/

Delete old files:

1
2
3
rm -rf /mnt/Ext_T7_ssd/nvme2tb-backup/
rm -rf /mnt/Ext_T7_ssd/dump/
rm -rf /mnt/Ext_T7_ssd/music/

Verify clean:

1
2
ls -lh /mnt/Ext_T7_ssd/
df -h /mnt/Ext_T7_ssd

Creating Samba Storage VM

Clone Ubuntu template on .125:

1
qm clone 890 1106 --name samba-storage-vm --full

Start VM and get IP address (192.168.1.167)

Update hostname on VM:

1
2
3
ssh mark@192.168.1.167
hostnamectl set-hostname samba-storage-vm
hostname

Passing External Drive to VM

On Proxmox host .125, identify the drive:

1
ls -l /dev/disk/by-id/ | grep -i sda

Update NFS exports (remove old Ext_T7_SSD shares):

1
nano /etc/exports

Changed to export music from new location:

1
/mnt/nvme2tb/music 192.168.1.0/24(ro,sync,no_subtree_check)

Reload exports:

1
exportfs -ra

Unmount drive from Proxmox host:

1
umount /mnt/Ext_T7_ssd

Attach drive to VM:

1
qm set 1106 -scsi1 /dev/disk/by-id/usb-Samsung_PSSD_T7_S7MPNS0XA03986E-0:0

Verify attachment:

1
qm config 1106 | grep scsi

Mounting Drive Inside VM

SSH into samba-storage-vm:

1
ssh mark@192.168.1.167

Check for new disk:

1
lsblk

Create mount point:

1
sudo mkdir -p /mnt/storage

Mount the drive:

1
sudo mount /dev/sdb1 /mnt/storage

Verify mount:

1
df -h /mnt/storage

Get UUID for permanent mount:

1
sudo blkid /dev/sdb1

Add to fstab:

1
sudo nano /etc/fstab

Added:

1
UUID=18e4bb73-2214-486f-a4da-0efef03a4eec /mnt/storage ext4 defaults 0 2

Test fstab:

1
sudo mount -a

Installing and Configuring Samba

Update and install Samba:

1
2
3
sudo apt update
sudo apt upgrade -y
sudo apt install samba -y

Backup original config:

1
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.backup

Configure Samba share:

1
sudo nano /etc/samba/smb.conf

Added at bottom:

1
2
3
4
5
6
7
[storage]
   path = /mnt/storage
   browseable = yes
   read only = no
   create mask = 0775
   directory mask = 0775
   valid users = mark

Set Samba password:

1
sudo smbpasswd -a mark

Restart Samba:

1
sudo systemctl restart smbd

Verify running:

1
sudo systemctl status smbd

Testing Access from Linux Laptop

On Linux Mint laptop, access via file manager:

1
smb://192.168.1.167/storage

Login with username: mark and Samba password

Test file creation and verify read/write access

Setting Up iOS Access

Install Infuse from App Store

Add SMB share in Infuse:

  • Name: Network Storage
  • Protocol: SMB
  • Address: 192.168.1.167/storage
  • Username: mark
  • Password: [Samba password]

Enable background audio in Infuse settings → Playback → Background Audio: ON

Fixing Navidrome Music Access

Update NFS mount on Navidrome VM (.152):

1
ssh mark@192.168.1.152

Edit fstab:

1
sudo nano /etc/fstab

Changed:

1
192.168.1.125:/mnt/nvme2tb/music /mnt/navidrome/music nfs ro,nofail,x-systemd.automount,_netdev 0 0

Stop Navidrome:

1
2
cd ~/navidrome
docker compose down

On Proxmox host .125, verify NFS server running:

1
systemctl status nfs-server

Start if needed:

1
systemctl start nfs-server

Verify NFS daemons:

1
rpcinfo -p | grep nfs

Verify export active:

1
exportfs -v

Back on Navidrome VM, verify can see export:

1
showmount -e 192.168.1.125

Manually mount:

1
sudo mount -t nfs 192.168.1.125:/mnt/nvme2tb/music /mnt/navidrome/music

Verify mount:

1
mount | grep navidrome

Test access:

1
ls -lh /mnt/navidrome/music/ | head -20

Start Navidrome:

1
docker compose up -d

Setting Up yt-dlp Network Downloads

On Linux Mint laptop, create mount point:

1
sudo mkdir -p /mnt/network-storage

Create credentials file:

1
nano ~/.smbcreds

Contents:

1
2
username=mark
password=YOUR_SAMBA_PASSWORD

Secure credentials:

1
chmod 600 ~/.smbcreds

Add to fstab:

1
sudo nano /etc/fstab

Added:

1
//192.168.1.167/storage /mnt/network-storage cifs credentials=/home/mark/.smbcreds,uid=1000,gid=1000 0 0

Reload systemd:

1
sudo systemctl daemon-reload

Mount the share:

1
sudo mount /mnt/network-storage

Verify mount:

1
mount | grep network-storage

Test access:

1
ls /mnt/network-storage

Update yt-dlp alias:

1
nano ~/.config/fish/config.fish

Changed from:

1
alias yt-dlp-save="yt-dlp --write-sub --write-auto-sub --sub-lang 'en.*' --convert-subs srt --restrict-filenames -o '/media/mark/Ext_T7_lpthp/YouTube-downloads/%(uploader)s/%(title)s/%(title)s.%(ext)s'"

To:

1
alias yt-dlp-save="yt-dlp --write-sub --write-auto-sub --sub-lang 'en.*' --convert-subs srt --restrict-filenames -o '/mnt/network-storage/YouTube-downloads/%(uploader)s/%(title)s/%(title)s.%(ext)s'"

Reload fish config:

1
source ~/.config/fish/config.fish

Test download:

1
yt-dlp-save https://www.youtube.com/watch?v=dQw4w9WgXcQ

Verify file on network storage:

1
ls -lh /mnt/network-storage/YouTube-downloads/

Final Configuration Summary

Network Storage Server (VM 1106 on .125):

  • IP: 192.168.1.167
  • Storage: 1.7 TB external SSD at /mnt/storage
  • Samba share name: storage
  • Access: \192.168.1.167\storage (Windows) or smb://192.168.1.167/storage (Linux/Mac)

Access Methods:

  • Linux: Mounted at /mnt/network-storage
  • Windows: \192.168.1.167\storage
  • iOS: Infuse app with SMB connection

yt-dlp Integration:

  • Downloads go directly to /mnt/network-storage/YouTube-downloads/
  • Organized by uploader/title structure
  • Accessible from all devices

Navidrome Music Streaming:

  • Music location: /mnt/nvme2tb/music on Proxmox host .125
  • Shared via NFS to Navidrome VM
  • Mounted at /mnt/navidrome/music

Mobile Streaming:

  • Use Infuse app on iOS
  • Background audio enabled for screen-off listening
  • Access via SMB to network storage

Key Lessons Learned

  • Always verify NFS server is running before troubleshooting client-side mount issues
  • Check basic infrastructure (is service running?) before complex troubleshooting
  • Unmounting actively-exported filesystems can stop NFS server
  • Systemd automounts require daemon-reload after fstab changes
  • Simple solutions (like rebooting) often work better than complex systemd commands

Next Steps

  • Set up Tailscale for remote access to network storage
  • Configure automatic backups of network storage
  • Consider additional Samba shares for specific purposes
This post is licensed under CC BY 4.0 by the author.