Hay una serie de cosas que suceden aquí.
Primero, todas las tecnologías de disco modernas están optimizadas para transferencias masivas. Si necesita mover 100 MB de datos, lo harán mucho más rápido si están en un bloque contiguo en lugar de estar dispersos por todo el lugar. Las SSD ayudan mucho aquí, pero incluso prefieren los datos en bloques contiguos.
En segundo lugar, la recuperación es bastante óptima en lo que respecta a las operaciones de disco. Lees una gran cantidad de datos contiguos de un disco, haces algunas operaciones rápidas de la CPU y luego la reescribes en otra gran porción contigua a otro disco. Si la energía falla a la mitad, no es gran cosa: simplemente ignorará cualquier dato con sumas de verificación incorrectas y continuará como de costumbre.
Tercero, eliminar un archivo es realmente lento . ZFS es particularmente malo, pero prácticamente todos los sistemas de archivos tardan en eliminarse. Deben modificar una gran cantidad de diferentes fragmentos de datos en el disco y cronometrarlos correctamente (es decir, esperar) para que el sistema de archivos no se dañe si falla la alimentación.
¿Cómo es posible que la recuperación de toda la matriz demore una hora, pero la eliminación del disco demore 4 días?
La recuperación es algo en lo que los discos son realmente rápidos, y la eliminación es algo en lo que los discos son lentos. Por megabyte de disco, solo tiene que hacer un poco de recuperación. Es posible que tenga mil archivos en ese espacio que deben eliminarse.
70 eliminaciones / segundo parece muy, muy mal rendimiento
Depende. No me sorprendería esto. No ha mencionado qué tipo de SSD está usando. Los SSD modernos de Intel y Samsung son bastante buenos en este tipo de operación (lectura-modificación-escritura) y funcionarán mejor. Las SSD más baratas / antiguas (por ejemplo, Corsair) serán lentas. El número de operaciones de E / S por segundo (IOPS) es el factor determinante aquí.
ZFS es particularmente lento para eliminar cosas. Normalmente, realizará eliminaciones en segundo plano para que no vea el retraso. Si está haciendo una gran cantidad de ellos, no puede ocultarlo y debe retrasarlo.
Apéndice: ¿por qué las eliminaciones son lentas?
- Eliminar un archivo requiere varios pasos. Los metadatos del archivo deben marcarse como 'eliminados' y, finalmente, deben recuperarse para que el espacio pueda reutilizarse. ZFS es un 'sistema de archivos estructurado de registro' que funciona mejor si solo crea cosas, nunca las elimina. La estructura de registro significa que si elimina algo, hay un espacio en el registro y, por lo tanto, se deben reorganizar (desfragmentar) otros datos para llenar el espacio. Esto es invisible para el usuario pero generalmente lento.
- Los cambios deben hacerse de tal manera que si la energía fallara a mitad de camino, el sistema de archivos permanece consistente. A menudo, esto significa esperar hasta que el disco confirme que los datos realmente están en los medios; para un SSD, eso puede llevar mucho tiempo (cientos de milisegundos). El efecto neto de esto es que hay mucha más contabilidad (es decir, operaciones de E / S de disco).
- Todos los cambios son pequeños. En lugar de leer, escribir y borrar bloques flash completos (o cilindros para un disco magnético), necesita modificar un poco de uno. Para hacer esto, el hardware debe leer en un bloque o cilindro completo, modificarlo en la memoria y luego volver a escribirlo en los medios. Esto lleva mucho tiempo.