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