PVE
Mount NAS Directories to PVE and LXC
Mounting a folder from your NAS to your Proxmox (PVE) host so that your LXCs can access it is a common and very useful setup. Here's a comprehensive guide, covering the most common scenarios and best practices.
[!note] Understanding the Flow:
- NAS Share: Your NAS needs to have a share configured (e.g., SMB/CIFS or NFS). NFS is generally preferred for Linux-based systems like Proxmox due to better POSIX permissions handling and performance, but SMB/CIFS can also work.
- PVE Host Mount: You'll mount the NAS share onto your Proxmox host. This makes the NAS content directly accessible by the PVE kernel.
- LXC Bind Mount: You'll then "bind mount" a specific directory from the PVE host into your LXC container. This effectively makes the NAS content appear inside the LXC.
Step-by-Step Guide
Let's assume your NAS share is //192.168.1.100/myshare (SMB) or 192.168.1.100:/myshare (NFS).
Option 1: Using NFS (Recommended for Linux Systems)
NFS is generally more robust and performs better with Linux.
Part 1: Configure NAS (NFS)
- Enable NFS Service: On your NAS (Synology, QNAP, TrueNAS, etc.), ensure the NFS service is enabled.
- Create Share: Create the folder/share you want to export (e.g.,
myshare). - Set NFS Permissions:
- Host: Add the IP address of your Proxmox host (e.g.,
192.168.1.50) to the allowed hosts for this share. You might see options like*for all hosts (less secure) or specific subnet masks. - Root Squash/No Root Squash: Be careful with this.
no_root_squash: Root on the client (Proxmox) will be treated as root on the NFS server. This provides full control but can be a security risk if the Proxmox host is compromised.root_squash(default): Root on the client will be mapped to an anonymous user/group (oftennobody:nogroup) on the NFS server. This is safer but might cause permission issues if your LXC processes need root-level access to the files.- Permissions: Set read/write (RW) permissions if your LXC needs to write to the share.
Part 2: Mount on Proxmox Host (NFS)
- Install NFS Client:
apt update
apt install nfs-common- Create Mount Point on PVE: Choose a location on your Proxmox host to mount the NAS share. A common place is
/mnt/nas/<share_name>.
mkdir -p /mnt/nas/myshare- Test Mount:
mount -t nfs 192.168.1.100:/myshare /mnt/nas/myshare- Common Options:
_netdev: Ensures the network is up before attempting to mount (important for/etc/fstab).auto: Allows mounting at boot.syncorasync:async(default) can improve performance but risks data loss on crashes.syncis safer but slower.hardorsoft:hardmakes the client retry indefinitely on errors (can hang processes).softmakes it return an error after a timeout.soft,intrallows processes to be interrupted.hard,intris often a good balance.nolock: If you encounter issues (less common with modern NFSv4).vers=3orvers=4: Specify NFS version if needed. Most modern setups use NFSv4.
For example:
mount -t nfs 192.168.1.100:/myshare /mnt/nas/myshare -o defaults,hard,intr,_netdev- Verify Mount:
df -h /mnt/nas/myshare
ls -l /mnt/nas/myshareYou should see the contents of your NAS share.
- Make Mount Permanent (Add to
/etc/fstab):
echo "192.168.1.100:/myshare /mnt/nas/myshare nfs defaults,hard,intr,_netdev 0 0" >> /etc/fstab- Important: Always test the manual
mountcommand first. - After adding to
fstab, runmount -ato test if it mounts correctly before rebooting or usingsystemctl deamon-reloadto make the changes effective.
Option 2: Using SMB/CIFS
SMB/CIFS is more common for Windows environments but works fine.
Part 1: Configure NAS (SMB/CIFS)
- Enable SMB/CIFS Service: On your NAS, ensure the SMB/CIFS service is enabled.
- Create Share: Create the folder/share you want to export (e.g.,
myshare). - User/Permissions: Create a dedicated user on the NAS (e.g.,
pve_user) with read/write permissions to this specific share. This is crucial for mounting from Linux. Set a strong password.
Part 2: Mount on Proxmox Host (SMB/CIFS)
- Install CIFS Utilities:
apt update
apt install cifs-utils- Create Mount Point on PVE:
mkdir -p /mnt/nas/myshare- Store Credentials (Securely):
It's best not to put credentials directly in
/etc/fstab. Create a credentials file:
mkdir -p /etc/samba
nano /etc/samba/credentials_myshareAdd these two lines:
username=pve_user
password=YourStrongPasswordHereSecure the file:
chmod 600 /etc/samba/credentials_myshare- Test Mount:
mount -t cifs //192.168.1.100/myshare /mnt/nas/myshare -o credentials=/etc/samba/credentials_myshare,uid=0,gid=0,forceuid,forcegid,file_mode=0644,dir_mode=0755uid,gid,forceuid,forcegid: These options are crucial for controlling how permissions are mapped from SMB to Linux.uid=0,gid=0(root) is a common choice for initial setup, but you might want to map to a specific user/group ID on your Proxmox host that also exists in your LXC.file_mode,dir_mode: Sets default permissions for new files/directories created via the mount.- Guest access: If your NAS allows guest access, you might use
guestorusername=guest,password=instead of a credentials file.
- Verify Mount:
df -h /mnt/nas/myshare
ls -l /mnt/nas/myshare- Make Mount Permanent (Add to
/etc/fstab):
echo "//192.168.1.100/myshare /mnt/nas/myshare cifs credentials=/etc/samba/credentials_myshare,uid=0,gid=0,forceuid,forcegid,file_mode=0644,dir_mode=0755,_netdev 0 0" >> /etc/fstab- Run
mount -ato test.
Part 3: Bind Mount into LXC
Once the NAS share is successfully mounted on your PVE host, you can bind mount it into your LXC.
-
Identify LXC ID: Get the ID of your LXC (e.g.,
101). You can find this in the Proxmox web UI. -
Run the following command:
pct set 101 -mp0 /host/dir,mp=/container/mount/pointTo unmount simply run
pct set 101- Restart LXC: For the bind mount to take effect, you must restart the LXC.
pct stop 101
pct start 101Or through the Proxmox web UI.
- Verify Inside LXC: After the LXC restarts, access its console again and verify the mount:
df -h /media/nas_data
ls -l /media/nas_dataYou should now see the contents of your NAS share within the LXC at /media/nas_data.
[!note] Don't forget to update permissions on your NAS side otherwise the LXC still won't be able to access files.