Computación · GUÍA PRÁCTICA
¿Linux muestra “Invalid cross-device link”? Demuestra el límite de montaje antes de renombrar, copiar o publicar
EXDEV es una advertencia contractual, no un acertijo de rutas. Mapea ambos extremos en el espacio de nombres de montaje del proceso, decide si necesitas un rename atómico y, si debes copiar entre sistemas de archivos, prepara y verifica el destino antes de borrar el origen.

Linux devuelve EXDEV —a menudo mostrado como “Invalid cross-device link”— cuando rename no puede realizar el movimiento dentro de un solo sistema de archivos montado. Los directorios pueden parecer relacionados, pero un bind mount, un volumen de contenedor, tmpfs, una capa overlay o sistemas separados pueden asignar identidades de montaje distintas. Examina las rutas desde el mismo espacio de nombres de montaje que el proceso que falla antes de cambiar código o permisos.
Una alternativa entre sistemas de archivos no es un rename disfrazado. Es una copia, una verificación y, únicamente después del éxito, la eliminación del origen. Si los lectores nunca deben ver un destino parcial, escribe un objeto temporal en el sistema de archivos de destino, vacíalo y verifícalo, y luego renómbralo localmente al nombre final. Conserva solo los metadatos que admiten la herramienta y el destino, y declara que el movimiento completo entre montajes no es atómico.
1. Captura la operación fallida y su espacio de nombres
Registra origen, destino, identidad del proceso, contexto de contenedor o servicio y error exacto del llamador real. No reproduzcas solo desde el shell del host si el fallo ocurre en un contenedor o espacio privado: la misma cadena puede resolver contra otra tabla de montajes.
Anota también si es un traslado simple, la sustitución de un nombre existente o una publicación que promete a los lectores un resultado de todo o nada. Ese requisito decide si copiar y borrar es aceptable.
2. Asigna ambas rutas a identidades de montaje
Ejecuta findmnt --target para el origen y el directorio de destino desde el espacio de nombres del llamador. Para otro proceso, usa findmnt --task PID o /proc/PID/mountinfo cuando los permisos lo permitan. Compara ID, raíces, puntos de montaje, tipos y orígenes, no prefijos de directorio.
Si el archivo final aún no existe, resuelve su directorio padre. Un bind mount puede mostrar el mismo dispositivo subyacente con otra identidad; rename(2) advierte que puede rechazarse un rename entre montajes aunque el mismo sistema de archivos aparezca en ambos lugares.
3. Decide qué garantía necesita la operación
Si la operación debe ser un único cambio atómico de nombres, coloca el nombre temporal y el final en el mismo montaje y usa rename allí. Reconfigura el directorio temporal, espacio de trabajo, volumen o área de publicación en vez de añadir una copia ciega.
Si se permite duplicación temporal y un traslado global no atómico, el flujo de copia puede ser correcto, pero debe declarar sus garantías. Considera el origen autoritativo hasta que el destino supere la verificación.
4. Prepara y verifica en el sistema de archivos de destino
Crea un nombre temporal único en el directorio de destino, copia los datos, cierra y vacía según la política de durabilidad y verifica tamaño o resumen criptográfico. Revisa los metadatos necesarios: modo, propietario, fechas, ACL, atributos extendidos, identidad de enlaces y asignación dispersa no sobreviven a todos los métodos.
Tras verificar, renombra el objeto temporal del destino al nombre final. Ese último rename puede ser atómico porque ambos nombres están en un montaje. Confirma el objeto final y su política de acceso antes de borrar el original.
5. Prueba los límites de fallo en vez de ocultar EXDEV
Prueba interrupciones antes de terminar la copia, después de verificar, después del rename local y antes de borrar el origen. La recuperación debe reconocer con seguridad un temporal abandonado, un destino final completo con origen no borrado y un reintento tras un fallo.
No “arregles” EXDEV cambiando permisos, repitiendo el mismo rename u ocultando el error. Consérvalo como prueba de que el contrato atómico solicitado cruza un límite de montaje y elige un flujo con garantías documentadas.
