{ "meta": { "title": "Puntos de montaje LXC (host ↔ contenedor) | ProxMenux Documentation", "description": "El LXC Mount Manager — bind mount de cualquier directorio del host en uno o más contenedores LXC vía pct set -mpN. Gestiona las particularidades de permisos de los contenedores unprivileged, repara montajes CIFS / NFS existentes en el lado del host y nunca modifica nada dentro del contenedor.", "ogTitle": "Puntos de montaje LXC (host ↔ contenedor) | ProxMenux Documentation", "ogDescription": "Bind mount de directorios del host en contenedores LXC. Gestiona el mapeo de UIDs unprivileged de forma pragmática, repara el acceso CIFS / NFS en el lado del host." }, "header": { "title": "Puntos de montaje LXC (host ↔ contenedor)", "description": "La herramienta principal para compartir carpetas entre el host Proxmox y los contenedores LXC. Bind mount de cualquier directorio del host en uno o más contenedores usando la sintaxis nativa pct set -mpN de Proxmox. La parte inteligente: resuelve los quebraderos de cabeza de permisos de los contenedores unprivileged en el lado del host — nunca modifica nada dentro del contenedor.", "section": "Almacenamiento y compartición · LXC" }, "intro": { "title": "Qué hace", "body": "Coge un directorio que vive en el host Proxmox (una carpeta local, un share NAS montado, un almacenamiento gestionado por Proxmox…) y haz que aparezca dentro de un contenedor LXC en una ruta que tú elijas, con permisos que funcionan incluso para contenedores unprivileged — sin tocar nada dentro del contenedor." }, "bigPicture": { "heading": "Cómo funciona (visión general)", "intro": "Un bind mount es exactamente lo que el nombre dice: Proxmox le dice al kernel \"el directorio del host X también debería aparecer en la ruta Y dentro de este contenedor\". No hay copia, ni sync, ni red — ambos lados ven los mismos archivos a la vez.", "sourceLabel": "Host Proxmox", "sourceDetail": "/mnt/data\n(tu carpeta)", "targetLabel": "Contenedor LXC", "targetDetail": "/mnt/data\n(aparece aquí)", "arrowLabel": "bind mount", "outro": "La ruta del host a la izquierda y la ruta del contenedor a la derecha pueden ser diferentes — por ejemplo, /mnt/nas-films en el host puede convertirse en /media/films dentro del contenedor. El script añade la entrada a la config del contenedor (/etc/pve/lxc/<ctid>.conf) usando el siguiente índice mpN libre, con dos valores por defecto seguros incorporados:", "items": [ "shared=1 — le dice a Proxmox que los datos son almacenamiento compartido, así que no intenta migrar el disco al migrar el contenedor.", "backup=0 — excluye el bind mount de los backups vzdump (los datos viven en el host, los respaldas por separado)." ] }, "perms": { "heading": "Gestión de permisos — la parte inteligente", "intro": "Los bind mounts son fáciles en principio. La parte difícil son los permisos: un contenedor LXC unprivileged desplaza cada UID en +100000, así que un archivo creado dentro del contenedor por el usuario 1000 aparece en el host como UID 101000 — un UID que nadie en el host posee. Para que esto funcione sin alinear UIDs entre hosts y contenedores, ProxMenux aplica el truco adecuado de \"abrir permisos\" en el lado del host, dependiendo del tipo de directorio que elegiste:", "headerType": "Tipo de directorio del host", "headerAction": "Qué ofrece hacer el script", "localType": "Carpeta local", "localTypeSub": "p. ej. /mnt/data", "localActionRich": "chmod o+rwx + setfacl o::rwx en el directorio del host. Solo se ofrece si el CT es unprivileged y los permisos actuales son insuficientes.", "cifsType": "CIFS / SMB montado", "cifsTypeSub": "p. ej. /mnt/pve/cifs-…", "cifsActionRich": "Remontar con uid=0, gid=0, file_mode=0777, dir_mode=0777 para que el CT (cualquier UID) pueda leer y escribir el share. /etc/fstab se actualiza.", "nfsType": "NFS montado", "nfsTypeSub": "p. ej. /mnt/pve/nfs-…", "nfsActionRich": "chmod 1777 + setfacl o::rwx en el montaje NFS. No puede anular el squash del lado del servidor — si ni siquiera el root del host puede escribir, se te guía a arreglar el export en el servidor NFS.", "privTitle": "Los contenedores privileged no necesitan nada de esto", "privBody": "Para contenedores privileged, el UID 0 en el CT es el UID 0 en el host — root dentro del CT puede leer y escribir el directorio del host directamente sin trucos de permisos. El script detecta esto y se salta el paso de \"abrir permisos\" por completo.", "noCtTitle": "El script nunca modifica nada dentro del contenedor", "noCtBody": "Todos los ajustes de permisos ocurren en el sistema de archivos del host. Sin chowns por pct exec, sin grupos creados en el CT, sin fstab dentro del contenedor. Si reutilizas el directorio bind-mounted en un CT distinto después, se aplican los mismos permisos automáticamente — sin setup por contenedor." }, "writes": { "heading": "Qué escribe ProxMenux — y qué no", "intro": "Una confusión común al hacer bind mount en un CT unprivileged: la gente asume que ProxMenux debe estar escribiendo entradas lxc.idmap en /etc/pve/lxc/<CTID>.conf. No lo hace. Solo se añade una línea a ese archivo — el propio bind mount:", "outro": "La línea de salida que ves al final de la ejecución, \"Unprivileged container — UID offset: 100000\", es puramente informativa — solo te dice que el CT está usando el mapeo unprivileged por defecto de Proxmox (root en CT = UID 100000 en host). El script no configura nada a su alrededor.", "twoWaysHeading": "Las dos formas de hacer que los permisos funcionen — y por qué ProxMenux elige una", "headerApproach": "Enfoque", "headerChanges": "Qué cambia", "headerWhen": "Cuándo encaja", "hostType": "Permisos del lado del host", "hostTypeSub": "(lo que hace este script)", "hostChangesRich": "chmod o+rwx + setfacl o::rwx en el directorio del host. Los UIDs mapeados del CT (100000+) caen en el cubo \"others\", así que abrir others es suficiente.", "hostWhen": "Acceso genérico a carpeta compartida desde cualquier CT. Varios CTs compartiendo el mismo directorio del host. Sencillo y reutilizable.", "idmapTypeRich": "lxc.idmap", "idmapTypeSub": "(este script no lo usa)", "idmapChangesRich": "Mapeo personalizado de UID/GID en /etc/pve/lxc/<CTID>.conf más entradas correspondientes en /etc/subuid + /etc/subgid en el host. El CT debe reiniciarse en cada cambio.", "idmapWhenRich": "Necesitas que un UID específico dentro del CT mapee a un UID específico en el host (p. ej. media:1000 en el CT debe poseer archivos como media:1000 en el host para que NFS no aplique squash). Un setup más rígido, normalmente solo merece la pena para ese escenario exacto.", "idmapTipTitle": "Cuándo necesitas lxc.idmap de verdad", "idmapTipBody": "Si el LXC Mount Manager no cubre tu caso — típicamente porque necesitas que los archivos escritos desde dentro del CT aterricen en el host como un UID/GID específico (exports NFS con all_squash, shares Samba con propiedad estricta, compartir un directorio con un usuario del host que tiene el mismo nombre que alguien dentro del CT) — ese es el momento de añadir entradas lxc.idmap a mano. El Mount Manager no te peleará: la línea de bind mount que escribió es independiente de cualquier configuración idmap que añadas después." }, "opening": { "heading": "Abrir la herramienta", "body": "Desde el menú principal de ProxMenux, abre Storage & Share Manager → Configure LXC Mount Points (Host ↔ Container). Verás este submenú con tres opciones:", "imageAlt": "Menú LXC Mount Manager — Add / View / Remove" }, "addFlow": { "heading": "Añadir un montaje — flujo completo", "intro": "La vista técnica, para cuando quieras saber exactamente qué hace cada diálogo:" }, "sources": { "heading": "Qué puedes elegir como directorio del host", "intro": "El selector de directorio del host es el más exhaustivo de la sección de Almacenamiento y compartición. Escanea cuatro fuentes y presenta una lista deduplicada:", "headerSource": "Fuente", "headerWhere": "De dónde viene", "headerLabel": "Etiqueta en el menú", "rows": [ { "source": "Montajes de red activos", "whereRich": "Shares CIFS / NFS montados actualmente, parseados de /proc/mounts.", "labelRich": "NFS [used/size] o CIFS/SMB [used/size]" }, { "source": "Montajes fstab inactivos", "whereRich": "Definidos en /etc/fstab pero no montados actualmente.", "labelRich": "fstab(off)-NFS / fstab(off)-CIFS/SMB" }, { "source": "Directorios locales", "whereRich": "Subdirectorios bajo /mnt que no son montajes de red.", "labelRich": "Local [size]" }, { "source": "Almacenamientos Proxmox", "whereRich": "Rutas de almacenamiento bajo /mnt/pve/* (NFS / CIFS registrados vía pvesm).", "labelRich": "PVE-NFS / PVE-CIFS/SMB / Proxmox-Storage" }, { "source": "Entrada manual", "where": "Cualquier otra cosa — escribe la ruta absoluta tú mismo.", "labelRich": "Introducir ruta manualmente" } ], "tipTitle": "Las rutas internas de Proxmox quedan filtradas", "tipBody": "El selector se salta explícitamente las rutas internas de Proxmox (/mnt/pve/local, /mnt/pve/local-lvm, /mnt/pve/backup, …) — están reservadas para internos de Proxmox y no deberías hacerles bind mount. Solo aparecen los almacenamientos añadidos por el usuario." }, "manual": { "heading": "Equivalente manual", "privIntro": "Para un contenedor privileged — el caso más simple, sin trucos de permisos:", "unprivLocalIntro": "Para un contenedor unprivileged con un directorio local del host — abre los permisos en el host primero:", "unprivCifsIntro": "Para un contenedor unprivileged con un share CIFS ya montado en el host:" }, "view": { "heading": "Ver puntos de montaje", "body": "Lista cada entrada mpN de cada contenedor en este host Proxmox, agrupado por id de CT y mostrando ruta del host → ruta del contenedor más cualquier opción extra. Solo lectura — útil como comprobación antes de añadir o eliminar nada." }, "remove": { "heading": "Eliminar un punto de montaje", "body": "Elige el contenedor, elige la entrada mpN, confirma. El script ejecuta pct set --delete mpN para quitar la entrada de la config del CT y ofrece reiniciar el contenedor si está corriendo. El directorio del host y su contenido no se tocan — puedes volver a añadir el montaje después (o adjuntar el mismo directorio a un CT distinto).", "warnTitle": "Los contenedores en ejecución necesitan un reinicio para que los cambios surtan efecto", "warnBody": "Tanto añadir como eliminar puntos de montaje solo se hacen visibles dentro del contenedor tras un reinicio. El script ofrece un pct reboot de un clic al final de cada operación; puedes declinar y reiniciar manualmente después." }, "troubleshoot": { "heading": "Solución de problemas", "noMountTitle": "El montaje aparece en la config del pct pero no dentro del contenedor", "noMountBody": "Los bind mounts solo se adjuntan cuando el contenedor arranca. Si añadiste el montaje mientras el CT estaba corriendo, reinícialo (pct reboot <ctid>). Si ya está reiniciado y sigue faltando, comprueba pct config <ctid> para confirmar que la entrada existe y que la ruta del host realmente contiene un directorio.", "noWriteTitle": "El contenedor puede ver el directorio pero no puede escribir", "noWriteBody": "Casi siempre un problema de permisos. Para contenedores unprivileged, ejecuta de nuevo el fix de permisos del script — las ACLs del directorio del host pueden haber sido reseteadas por otra herramienta (rsync, restore desde backup, chmod manual). Para CIFS, revisa las opciones de montaje en el host: findmnt /mnt/pve/cifs-…, busca valores uid= / gid= / file_mode=.", "alreadyTitle": "\"This path is already used as a mount point in this container\"", "alreadyBody": "Elegiste la misma ruta del contenedor que ya está cableada a un directorio del host distinto. O elige una ruta del contenedor diferente, o elimina el punto de montaje existente primero.", "nfsTitle": "El acceso NFS sigue bloqueado tras aplicar el fix del host", "nfsIntro": "Tu servidor NFS está aplicando squash a root o a todas las conexiones. El script puede detectar esto (intenta escribir un archivo de prueba desde el host) y muestra guía del lado del servidor. Dos arreglos comunes del lado del servidor para el export:", "nfsItems": [ "no_root_squash — los CTs privileged pueden escribir directamente.", "all_squash,anonuid=65534,anongid=65534 — para CTs unprivileged." ], "nfsOutro": "Estos cambios ocurren en el servidor NFS (TrueNAS, Synology, tu export personalizado, …), no en Proxmox.", "fstabOffTitle": "Montar entradas \"fstab(off)\" no hace nada", "fstabOffBody": "El selector muestra entradas fstab(off)- cuando un montaje de red está definido en fstab pero no está montado actualmente. El script te deja hacer bind mount de la ruta, pero el directorio estará vacío hasta que realmente montes el share (mount <path> en el host). Móntalo primero, luego bind en el CT." }, "related": { "heading": "Relacionado", "items": [ { "href": "/docs/storage-share/host-local-shared", "label": "Añadir directorio compartido en el host", "tailRich": " — primer paso típico: prepara un /mnt/shared en el host antes de hacerle bind mount en uno o más CTs aquí." }, { "href": "/docs/storage-share/host-nfs", "label": "Añadir share NFS como almacenamiento de Proxmox", "extraHref": "/docs/storage-share/host-samba", "extraLabel": "Añadir share Samba como almacenamiento de Proxmox", "joiner": " / ", "tailRich": " — registra un share externo en Proxmox primero, luego haz bind mount de su ruta /mnt/pve/<id> en el CT aquí." }, { "href": "/docs/storage-share/lxc-nfs-client", "label": "Cliente NFS en LXC", "extraHref": "/docs/storage-share/lxc-samba-client", "extraLabel": "Cliente Samba en LXC", "joiner": " / ", "tail": " — la alternativa cuando quieres que el propio CT monte el share (requiere un contenedor privileged)." } ] } }