Watch at EaseHistorias. Respuestas. Perspectiva.

Tecnología · GUÍA PRÁCTICA

¿«Invalid cross-device link»? Demuestra la syscall antes de copiar o borrar

EXDEV puede ser un rename entre montajes o un rechazo de política de rutas. Conserva caller, syscall y mount IDs, y mantén el origen hasta verificar el destino.

¿«Invalid cross-device link»? Demuestra la syscall antes de copiar o borrar
Ilustración original: Registra programa, argumentos, cwd, namespace, rutas dadas y resueltas, errno y horas; conserva el primer fallo antes de reintentos. Watch at Ease

“Invalid cross-device link” nombra el errno EXDEV, no un diagnóstico completo. rename() lo devuelve entre sistemas montados distintos y openat2() puede devolverlo por una política de contención.

Un movimiento entre filesystems suele ser copia y eliminación, no un rename atómico. Esa diferencia debe quedar visible.

Fija el límite exacto del fallo

Registra programa, argumentos, cwd, namespace, rutas dadas y resueltas, errno y horas; conserva el primer fallo antes de reintentos.

Traza solo hasta identificar syscall y rutas. El mismo mensaje no autoriza la misma reparación.

Compara identidad de montaje y resolución de rutas

Compara mount IDs visibles para el proceso real, no nombres de unidades del host. Bind mounts y contenedores cambian el dominio de rename.

Comprueba aparte padre del destino, tipo, permisos, espacio y política de colisión.

No confundas rename con la política de openat2

Para rename(), EXDEV indica mount points distintos. Para openat2(), revisa flags y si una ruta absoluta, enlace, .. o cruce viola la contención.

No desactives un límite de seguridad para silenciar el errno; corrige el contrato de ruta o usa un destino permitido.

Diseña un fallback seguro entre filesystems

Si cruza filesystems, crea un temporal en el filesystem de destino, copia datos y metadatos, aplica el flush requerido y renómbralo allí.

Resuelve colisiones; si copia o verificación falla, conserva el origen y elimina o aísla el destino parcial.

Verifica el destino antes de borrar el origen

Compara tamaño y digest apropiado, además de owner, mode, tiempos, links, ACL o xattr requeridos. Para árboles usa un manifest completo.

Elimina el origen solo tras aceptar el destino y registra si fue rename o copy-and-remove.

¿«Invalid cross-device link»? Demuestra la syscall antes de copiar o borrar
Ilustración original: Elimina el origen solo tras aceptar el destino y registra si fue rename o copy-and-remove. Watch at Ease