Watch at EaseHistorias. Respuestas. Perspectiva.

Tecnología · GUÍA PRÁCTICA

¿cp dice “preserving times … Operation not permitted”? Demuestra primero el contrato de metadatos

Los datos pueden haberse copiado aunque fallara una actualización de metadatos. Conserva el binario, el objeto destino y el primer atributo rechazado; decide después si tiempos, dueño, modo, ACL o xattr son obligatorios.

Diagrama que separa la copia de bytes de la fidelidad de metadatos.
Ilustración original de Watch at Ease: declara y prueba cada atributo requerido. Watch at Ease

Los datos pueden haberse copiado aunque fallara una actualización de metadatos. Conserva el binario, el objeto destino y el primer atributo rechazado; decide después si tiempos, dueño, modo, ACL o xattr son obligatorios.

Escribir los datos no demuestra que se conservaran tiempos, dueño, modo, ACL, contexto de seguridad o atributos extendidos.

1. Fija la copia y el destino exactos

Guarda comando, ejecutable y versión de cp, usuario efectivo, origen, destino, estado de salida y primer diagnóstico sin filtrar. Anota si el destino ya existía y quién era su dueño.

No repitas enseguida con sudo, no sobrescribas la única copia ni descartes stderr: ocultarías si falló tiempo, dueño, modo, contexto o xattr.

2. Compara bytes y atributos por separado

Compara hash o bytes de una muestra no sensible y registra tipo, tamaño, dueño, grupo, modo, atime y mtime con zona y precisión. Revisa ACL, xattr y etiquetas solo si el uso los exige.

Haz una matriz de requerido, soportado y observado. Un hash correcto con mtime nuevo sirve para transferencia, pero puede fallar para copia incremental, compilación reproducible o archivo legal.

3. Distingue autoridad de soporte

Identifica la implementación porque BusyBox y GNU difieren. Resuelve sistema de archivos y opciones de montaje; repite con un archivo desechable propiedad del usuario.

Si un destino nuevo conserva tiempos pero uno existente no, investiga dueño o inmutabilidad. Si ambos fallan, prueba soporte, solo lectura, mapeo de ID o política. Que sudo funcione es una pista, no una autorización.

4. Elige una corrección mínima declarada

Si los tiempos son obligatorios y compatibles, escribe un objeto nuevo del usuario o prepara autoridad revisada. Si un atributo es irrelevante e incompatible, omite solo ese y registra la pérdida. Usa un archivo contenedor o herramienta nativa si deben sobrevivir varios atributos.

No hagas chmod/chown amplios, cambios globales de seguridad ni sudo recursivo por un diagnóstico sin explicar. Que lleguen nombre y bytes no demuestra propiedad Unix en FAT.

5. Verifica según el uso real

Repite el flujo real con una muestra representativa. Tras cerrar y reabrir el destino, verifica contenido y cada atributo exigido, incluida zona y precisión temporal.

Acepta solo si pasa la matriz, la política de salida distingue pérdidas permitidas de fallos nuevos y existe reversión. Si el destino no cumple el contrato, cambia el contenedor o el destino.

Puertas para objeto, autoridad del proceso y soporte del sistema de archivos.
Ilustración original de Watch at Ease: localiza la mutación rechazada antes de corregir. Watch at Ease