Document Youtarr SMB storage mount

This commit is contained in:
Brian Pooe 2026-06-28 13:40:08 +02:00
parent cdd4874bf1
commit e2f62deb2d
3 changed files with 51 additions and 31 deletions

View file

@ -51,8 +51,9 @@ for media servers. Run all commands from the repository root.
If this stack runs inside a Proxmox LXC, bind-mount
`/mnt/unas/youtube_downloads` into the container before starting Docker.
The current UNAS NFS export maps writes through its anonymous owner, so the
dedicated privileged LXC runs Youtarr with upstream's default root UID/GID.
The Proxmox host mounts this share over SMB with
`/etc/unas-smb-credentials` and maps it to UID/GID `0`. The dedicated
privileged LXC therefore runs Youtarr with upstream's default root UID/GID.
4. Render the template:

View file

@ -1,4 +1,4 @@
# LXC Boot Dependencies — NFS and NVIDIA
# LXC Boot Dependencies — Network Mounts and NVIDIA
Two things must be ready on the Proxmox host before LXC 101 (arr-stack)
can start: the UNAS NFS mount and the NVIDIA device nodes. Both are
@ -80,38 +80,38 @@ After any change: `systemctl daemon-reload`
---
## Per-container NFS fix (future containers)
## Per-container network-mount fix (future containers)
Every LXC that mounts a UNAS NFS share via `mp` **and** has `onboot: 1`
Every LXC that bind-mounts a UNAS NFS or SMB share via `mp` and has `onboot: 1`
needs its own drop-in. Run these commands on Proxmox right after creating
the container (substitute the real CT ID and mount name):
```bash
CTID=<id>
NFS_UNIT=mnt-unas-<mountname>.mount # see table below
MOUNT_UNIT=mnt-unas-<mountname>.mount # see table below
mkdir -p /etc/systemd/system/pve-container@${CTID}.service.d
cat > /etc/systemd/system/pve-container@${CTID}.service.d/nfs-deps.conf << EOF
[Unit]
After=${NFS_UNIT}
Requires=${NFS_UNIT}
After=${MOUNT_UNIT}
Requires=${MOUNT_UNIT}
EOF
systemctl daemon-reload
```
`Requires=` means: if the NFS mount fails (UNAS is genuinely down),
`Requires=` means: if the network mount fails (UNAS is genuinely down),
systemd will not start the container — which is correct, since the
container's data lives on that mount.
## Container checklist
| Container | NFS mount path | systemd unit | Drop-in status |
|---|---|---|---|
| LXC 101 — arr-stack | `/mnt/unas/arr_data` | `mnt-unas-arr_data.mount` | ✅ done |
| LXC ??? — immich | `/mnt/unas/immich_data` | `mnt-unas-immich_data.mount` | ⬜ apply when created |
| LXC ??? — gramps | `/mnt/unas/gramps_data` | `mnt-unas-gramps_data.mount` | ⬜ apply when created |
| LXC ??? — paperless | `/mnt/unas/paperless_data` | `mnt-unas-paperless_data.mount` | ⬜ apply when created |
| LXC 103 — ytd | `/mnt/unas/youtube_downloads` | `mnt-unas-youtube_downloads.mount` | ✅ done |
| Container | Protocol | Network mount path | systemd unit | Drop-in status |
|---|---|---|---|---|
| LXC 101 — arr-stack | NFS | `/mnt/unas/arr_data` | `mnt-unas-arr_data.mount` | ✅ done |
| LXC ??? — immich | NFS | `/mnt/unas/immich_data` | `mnt-unas-immich_data.mount` | ⬜ apply when created |
| LXC ??? — gramps | NFS | `/mnt/unas/gramps_data` | `mnt-unas-gramps_data.mount` | ⬜ apply when created |
| LXC ??? — paperless | NFS | `/mnt/unas/paperless_data` | `mnt-unas-paperless_data.mount` | ⬜ apply when created |
| LXC 103 — ytd | SMB | `/mnt/unas/youtube_downloads` | `mnt-unas-youtube_downloads.mount` | ✅ done |
LXC 100 (PBS) uses a local disk — no NFS or NVIDIA dependency.

View file

@ -2,7 +2,7 @@
Persistent mounts for the UniFi Drive shares on the Proxmox host, and how to
bind-mount each share into the LXC that consumes it. Most shares use NFS;
`mobile_photos` is the SMB/CIFS exception because PhotoSync writes to it.
`mobile_photos` and `youtube_downloads` use SMB/CIFS.
## Understanding the U-NAS Path Structure
@ -63,16 +63,16 @@ Repeat for every share in the list.
- `arr_data`, `gramps_data`, `immich_data`, `paperless_data`: set to
**No Root Squash** (Isolated Mode). This allows the Proxmox host root to
`chown` files so that container users (UID 1000) can write.
- `pbs_backup`, `youtube_downloads`: default squash mode is fine.
- `pbs_backup`: default squash mode is fine.
6. Set access to **Read/Write**.
7. Save and confirm before moving to the next share.
LXC containers do not mount NFS directly. The Proxmox host is the only NFS
client; LXCs get access via bind mounts from the host.
`mobile_photos` is the exception: it is mounted on the Proxmox host over
SMB/CIFS using `/etc/unas-smb-credentials`, then bind-mounted into the Immich
LXC.
`mobile_photos` and `youtube_downloads` are mounted on the Proxmox host over
SMB/CIFS using `/etc/unas-smb-credentials`, then bind-mounted into their
consumer LXCs.
> **Why No Root Squash for some shares?** UniFi Drive's default NFS mode
> squashes the client root to an anonymous UID (977:988). That anonymous user
@ -106,14 +106,12 @@ Export list for 10.0.10.25:
/volume/b69055de-0b30-4e8c-b7ef-b533d92733c3/.srv/.unifi-drive/immich_data/.data 10.0.10.10
/volume/b69055de-0b30-4e8c-b7ef-b533d92733c3/.srv/.unifi-drive/paperless_data/.data 10.0.10.10
/volume/b69055de-0b30-4e8c-b7ef-b533d92733c3/.srv/.unifi-drive/pbs_backup/.data 10.0.10.10
/volume/b69055de-0b30-4e8c-b7ef-b533d92733c3/.srv/.unifi-drive/youtube_downloads/.data 10.0.10.10
```
If a share is absent from the output, return to step 1 and confirm NFS is
enabled for that share with the Proxmox host IP in the allowed-hosts list.
`mobile_photos` will not appear in `showmount`; it is mounted separately over
SMB/CIFS.
The two SMB shares will not appear in `showmount`.
## 4. Create Mountpoints
@ -137,7 +135,7 @@ cp /etc/fstab /etc/fstab.bak
nano /etc/fstab
```
Add the following six lines. The UUID in the export path must match what
Add the following five lines. The UUID in the export path must match what
`showmount -e` returned in step 3. UniFi Drive 4.x exports NFSv3 only —
`vers=3` is required.
@ -148,13 +146,26 @@ Add the following six lines. The UUID in the export path must match what
10.0.10.25:/volume/b69055de-0b30-4e8c-b7ef-b533d92733c3/.srv/.unifi-drive/immich_data/.data /mnt/unas/immich_data nfs vers=3,noatime,nofail,_netdev,x-systemd.automount,x-systemd.mount-timeout=10s 0 0
10.0.10.25:/volume/b69055de-0b30-4e8c-b7ef-b533d92733c3/.srv/.unifi-drive/paperless_data/.data /mnt/unas/paperless_data nfs vers=3,noatime,nofail,_netdev,x-systemd.automount,x-systemd.mount-timeout=10s 0 0
10.0.10.25:/volume/b69055de-0b30-4e8c-b7ef-b533d92733c3/.srv/.unifi-drive/pbs_backup/.data /mnt/unas/pbs_backup nfs vers=3,noatime,nofail,_netdev,x-systemd.automount,x-systemd.mount-timeout=10s 0 0
10.0.10.25:/volume/b69055de-0b30-4e8c-b7ef-b533d92733c3/.srv/.unifi-drive/youtube_downloads/.data /mnt/unas/youtube_downloads nfs vers=3,noatime,nofail,_netdev,x-systemd.automount,x-systemd.mount-timeout=10s 0 0
```
Add this separate CIFS line for the PhotoSync target:
Create one root-only credential file for both SMB mounts:
```ini
# /etc/unas-smb-credentials
username=<unas-user>
password=<unas-password>
domain=WORKGROUP
```
```bash
chmod 600 /etc/unas-smb-credentials
```
Add the CIFS entries:
```fstab
//10.0.10.25/mobile_photos /mnt/unas/mobile_photos cifs credentials=/etc/unas-smb-credentials,vers=3.0,iocharset=utf8,ro,nofail,_netdev,x-systemd.automount,x-systemd.mount-timeout=10s 0 0
//10.0.10.25/youtube_downloads /mnt/unas/youtube_downloads cifs credentials=/etc/unas-smb-credentials,vers=3.0,iocharset=utf8,rw,noperm,uid=0,gid=0,file_mode=0660,dir_mode=0770,nofail,_netdev,x-systemd.automount,x-systemd.mount-timeout=120s 0 0
```
## 6. Apply and Verify All Mounts
@ -167,25 +178,26 @@ mount -a
Confirm each share is mounted:
```bash
for share in arr_data gramps_data immich_data paperless_data pbs_backup youtube_downloads; do
for share in arr_data gramps_data immich_data paperless_data pbs_backup; do
findmnt /mnt/unas/$share || echo "MISSING: $share"
done
```
All six NFS shares must show a source line. A `MISSING` line means the share
All five NFS shares must show a source line. A `MISSING` line means the share
is not mounted; check `/etc/fstab` for a typo in the export path or mountpoint,
then confirm the UNAS IP is reachable.
Confirm the SMB-backed `mobile_photos` mount separately:
Confirm the SMB-backed mounts separately:
```bash
findmnt /mnt/unas/mobile_photos
findmnt /mnt/unas/youtube_downloads
```
Quick write test for each share:
```bash
for share in arr_data gramps_data immich_data paperless_data pbs_backup youtube_downloads; do
for share in arr_data gramps_data immich_data paperless_data pbs_backup; do
touch /mnt/unas/$share/.mount-test && rm /mnt/unas/$share/.mount-test \
&& echo "OK: $share" || echo "WRITE FAIL: $share"
done
@ -194,6 +206,13 @@ done
`mobile_photos` is read-only on the Proxmox host, so no write test is needed
for that mount.
Verify that the Youtarr SMB mount is writable:
```bash
touch /mnt/unas/youtube_downloads/.mount-test
rm /mnt/unas/youtube_downloads/.mount-test
```
## 7. Bind Mounts into LXCs
Stop each LXC before adding mountpoints. Replace the VMID placeholders with