Tengo una LUKS
partición con la /dev/sda1
que luksOpen with --allow-discards
:
cryptsetup --allow-discards luksOpen /dev/sda1 root
Luego monte el ext4
sistema de archivos con la discard
opción:
grep /dev/mapper/root /proc/mounts
/dev/mapper/root / ext4 ro,relatime,block_validity,discard,delalloc,barrier,user_xattr,acl 0 0
Luego recorto espacio libre en la partición montada:
fstrim -v /
con df
, veo que /
tiene 80% de espacio libre. Eso significa que el /dev/sda1
80% del disco son ceros binarios.
Si clono la imagen con cat
cat /dev/sda1 > sda1.img
y comprimir la imagen con xz
, esperaría que se comprimen todos los ceros en el disco. Como el 20% de los datos en el disco está encriptado, debe parecer aleatorio y no comprimible. Por lo tanto, la imagen comprimida xz debe ser de aprox. 20% del tamaño bruto.
Sin embargo, la imagen comprimida xz resultante tiene aproximadamente el mismo tamaño que el original sin procesar.
¿Es correcto mi razonamiento?
¿Por qué mi teoría no se traduce en práctica?
dmsetup table | grep allow_discards
Respuestas:
Tu lógica no es incorrecta. Pero solo es válido si se cumplen algunas condiciones.
El comando TRIM , como se especifica en el conjunto de comandos ATA , puede o no poner a cero los sectores contra los que se emite.
En realidad, el estándar se centra en qué datos deben devolverse después de que se haya emitido TRIM 1 :
Por lo tanto, lo que devuelve su dispositivo
fstrim
depende de las características que implementa. A menos que sea compatible con RZAT, la suposición de que los datos leídos desde un dispositivo recortado serán solo ceros no es válida.Puede usar
hdparm
para verificar esto:Realicé algunas pruebas usando dos SSD
sda
ysdb
. Mismo fabricante, diferentes modelos, con diferente conformidad ATA:Los dos SSD tienen soporte diferente para TRIM:
Puedo confirmar que, después de emitir
fstrim
, la unidad que admite "CERO de lectura determinista después de TRIM" (RZAT) parece haber puesto a cero la partición en cuestión casi por completo. Por el contrario, la otra unidad parece haber puesto a cero (o de lo contrario reemplazado por algún patrón altamente compresible) solo una parte menor del espacio liberado.1 Fuente en línea: INCITS 529: Tecnología de la información - Conjunto de comandos ATA / ATAPI - 4 (ACS-4)
Nota sobre las pruebas:
Como señaló frostschutz en los comentarios, una lectura posterior
fstrim
puede devolver datos del caché del sistema operativo y no del dispositivo recortado. Es, por ejemplo, lo que sucedió en esta pregunta .(También señalaría esta respuesta a la misma pregunta para un método alternativo para probar TRIM).
Entre
fstrim
y una lectura posterior, es posible que deba soltar el caché, por ejemplo, con:Dependiendo del tamaño de la partición con la que está jugando, no soltar el caché puede ser suficiente para que sus pruebas fallen.
Nota sobre su configuración:
La
discard
opción de montaje habilita el ajuste continuo, es decir, cada vez que se eliminan los archivos. No es requerido porfstrim
. De hecho, TRIM a pedido y TRIM continuo son dos formas distintas de gestionar las operaciones TRIM. Para obtener más información, quisiera señalar la unidad de estado sólido en Arch Linux Wiki, que tiene una cobertura detallada de este asunto.fuente
¿El SSD tiene una capa de cifrado de hardware incorporada? Si tiene uno, entonces los bloques TRIMmed pueden ser todos ceros (o posiblemente todos) en el nivel de hardware en bruto, pero dado que la computadora los ve a través de la capa de cifrado, aparecerán como galimatías pseudoaleatoria después de pasar todo -Ceroes bloque sin procesar a través del proceso de descifrado.
Tal capa de cifrado de hardware tendría algunas ventajas:
fuente
Descartar no es lo mismo que Cero.
Si desea poner a cero con cryptsetup, puede reducir fs, luego el bloque de cripta y luego dd el espacio de volumen no utilizado.
Si desea saber si el ajuste funcionó, hacer una prueba de velocidad debería ser un indicador después de un uso intensivo.
https://linux.die.net/man/8/fstrim https://en.m.wikipedia.org/wiki/Trim_(computing)
fuente
df
informar espacio libre no implica espacio cero.trim
le dice al dispositivo de almacenamiento que los bloques no se usan. No creo que esto los ponga a cero.fuente