Tengo tres copias de la misma carpeta pero los tamaños de estas son diferentes. ¿Por qué?
Tengo una carpeta "Documentos" que copié de un lvm cifrado en el disco duro de mi escritorio a una partición luks cifrada en un disco externo. Luego copié esta carpeta del disco externo a un lvm cifrado en el disco duro de mi computadora portátil.
Entonces tengo tres copias de la misma carpeta:
- Escritorio
- unidad externa
- Computadora portátil
Lo he usado diff
entre computadora de escritorio y disco externo -> sin diferencias.
Lo he usado diff
entre una computadora portátil y un disco externo -> sin diferencias.
Pero tengo diferentes tamaños de carpetas para los tres casos.
He usado
du -bs --apparent-size Documents
Para medir las tallas. Aquí están los resultados:
- Escritorio: 1735750760
- Unidad externa: 1735742568
- Computadora portátil: 1735746664
Entonces, notamos que hay una ligera diferencia entre las tallas. Pequeña diferencia pero sigue ahí. Me preguntaba por qué fue así. ¿Tienes una explicación?
Respuesta1
Es posible que hayas notado que la diferencia entre las diferentes carpetas es la siguiente:
Desktop: 1735750760
- 8192
External drive: 1735742568
+ 4096
Laptop: 1735746664
Según mi experiencia, estas diferencias en los bloques de 4K suelen deberse a cambios en el tamaño de los directorios. Si compara los tamaños de los directorios (en sistemas de archivos ext, generalmente múltiplos de 4K), es posible que encuentre la diferencia.
(por ejemplo, los directorios a veces se vuelven más pequeños cuando se reestructuran durante una operación de copia y, por lo tanto, las entradas eliminadas se eliminan)
Para encontrar directorios que difieran en tamaño, deberá comparar los directorios entre sí. El siguiente script podría ayudarle con eso:
#!/bin/bash
DIR1="${1%/}/"
DIR2="${2%/}/"
diff \
<(find $DIR1 -type d -printf "%k %p\n" | sed -e "s|$DIR1||" | sort -k2) \
<(find $DIR2 -type d -printf "%k %p\n" | sed -e "s|$DIR2||" | sort -k2)
Copie el código en un archivo nuevo (por ejemplo, dircomp.sh) y hágalo ejecutable chmod +x dircomp.sh
. Entonces llámalo así ./dircomp.sh /home/lemenhir/ /media/lemenhir/ExternalDrive/
.
El resultado ahora debería enumerar solo directorios con diferentes tamaños y podría verse así:
< 4 Documents/Appartement/Bail
> 8 Documents/Appartement/Bail
donde las líneas que comienzan con <
enumeran directorios ubicados en el directorio dado como primer parámetro (por ejemplo, /home/lemenhir/) y las líneas que comienzan con >
enumeran directorios ubicados en el directorio dado como segundo parámetro (por ejemplo, /media/lemenhir/ExternalDrive/) .
Si aparecen líneas individuales, entonces el directorio no existe en el directorio opuesto.
Espero que esto ayude.