Acerca de...
El equipo
Encuestas
Política de privacidad
WinTablets

Encuesta

¿Cual crees que triunfará?

Ver Resultados

Cargando ... Cargando ...

últimas entradas importantes

Categorías

Archivos

11
Abr 2016
HardwareImportantePrácticos

Discos usb, flash, y por qué a veces van tan lentos

copiar-archivos-rapidoEn esta entrada os voy a contar algunas cosas sobre la copia de ficheros entre diferentes dispositivos, y por qué una veces copian rápido y otras extremadamente lento.

Vamos allá.

 

 

A fecha de hoy hay dos tipos de discos independientemente de la tecnología que utilicen. En primer lugar están los tradicionales, que consisten en una serie de discos magnéticos sobre los que se desplaza una cabeza que lee y escribe. A estos los llamamos discos mecánicos porque en sus tripas hay partes que se mueven.

Luego están los dispositivos de tipo flash que, como su nombre indica, en su interior contienen chips con esta tecnología. O tecnologías, porque hay varias. La ventaja de estos discos es que si se caen al suelo, pues los recoges y no pasa nada, mientras que con los mecánicos lo habitual es tener que ir a la tienda a por otro.

Y no debemos engañarnos, tanto las tarjetas SD como microSD, los pinchos USB, e incluso los SSD, ya sea internos o externos, son dispositivos flash y, aunque la tecnología interna varíe, el funcionamiento es idéntico en todos.

emmc

No vamos a entrar en detalles respecto al formato físico. Basta con saber que un disco se puede ver como una gran superficie blanca sobre la que escribir en cualquier lado.

Transacciones en los ficheros

Para evitar la pérdida de datos, todos los sistemas operativos, o más bien los sistemas de ficheros, definen el concepto de transacción.

NTFS, HFS+, ext2, ext3,… la mayoría soportan este concepto, y en los que no, como FAT, es el sistema operativo el que intenta implementarlo.

¿En qué consiste?

Básicamente en que la operación de copia de un fichero se concibe como una única unidad que o bien está hecha o no está hecha.

Por lo tanto, cuando tu inicias la copia de un fichero, el sistema operativo abre una transacción de disco. Primero copia el contenido del fichero a su destino, y luego actualiza el índice, que viene a decir que el fichero tal y pascual está en tal y pascual sitio del disco. Luego cierra la transacción.

Y si durante ese proceso, por algún motivo, la operación falla (porque por ejemplo desconectamos el disco, o se va la corriente), se da como no realizada.

Al volver a conectar, el sistema mira el estado de la transacción y revierte los pasos realizados (o los continua).

ntfs_recovery_algorithm

Os veo la pregunta. Sí, la transacción también se anota en disco. El proceso sería algo así:

  1. Abro transacción de copiar esto en aquello
  2. Copio el contenido del ficheros y anoto en la transacción que estoy copiando.
  3. Actualizo el índice y anoto en la transacción que estoy actualizando el índice.
  4. Anoto en la transacción que he actualizado el índice.
  5. Cierro la transacción.

Si algo falla antes del paso 1, no hay que hacer nada. Si entre el 1 y el 2, anoto en el log del sistema el fallo de la transacción y borro el inicio de la misma.

Si algo falla entre 2 y 3, hago lo mismo que antes. Nada se ha perdido, solo que he escrito algunos sectores que no voy a usar.

Si falla entre el 3 y el 4, ya depende. Si el índice está actualizado, continuo, si no, retrocedo.

Fichero copiado. A por el siguiente.

La copia de muchos ficheros pequeños es muy lenta

Una vez que conocemos el concepto de transacción en una operación de disco, llega el momento de explicar la copia de un fichero.

external_copy

Cuando uno copia un fichero más o menos grande, el proceso de copiar los datos se lleva la mayor parte, y encima se hace de forma continua. En general esta operación copia x sectores de un punto a otro del disco, y es una operación que puede realizar la controladora casi de forma independiente al sistema operativo.

Luego viene el acto de actualizar el índice y cerrar la transacción.

En general, tanto el lugar donde se graba la transacción y el índice están en otra parte del disco, por lo que se requiere que la controladora interrumpasu flujo de datos para actualizar otra parte.

En los discos mecánicos supone que las cabezas han de recorrer parte del disco para ir a un nuevo sitio y, aunque en los flash eso no ocurre, la operación de cierre también es más costosa.

Si sois viejunos como yo, recordaréis las disqueteras, y el escándalo que montaban cuando copiabas un fichero, sobre todo si era sobre el propio disquete. Si recordáis, de vez en cuando sonaba un screeeeeeeeec extraño: actualizando el índice.

floppy-drives

Vale. ¿Y las flash?

El concepto de escritura en modo ráfaga

Los chips flash suelen tener un modo de escritura que yo llamo modo ráfagaporque no recuerdo el real, pero el concepto es el mismo.

Estos chips suelen ser de acceso serie (aunque a veces con más de un canal, pero nunca los 32, 64, 128 o más de un disco duro).

Escribir en una flash consiste en una secuencia de operaciones similar a primero abrir el chip, informar que se va a escribir en él, y luego iniciar la escritura para, al terminar, cerrar la operación.

Para todos y cada uno de los chips y para todas y cada una de las celdas. Si nuestra operación de copia implica cuatro chips a la vez, para más inri, hay que hacerlo para los cuatro. (Puede implicar cuatro, por ejemplo, para escribir 2 bits en cada chip, por poner un ejemplo).

Pero existe otro modo de escribir, que es idéntico pero al decirle que vamos a escribir, le decimos que será en modo ráfaga, por lo que luego, cada paquete de datos que enviemos, irá automáticamente en la siguiente celda (dirección) disponible.

chips

Y ahora es cuando, durante la copia, si en un disco mecánico tenemos que mover las cabezas, en uno flash hay que combinar todas esas operaciones para terminar de copiar el cuerpo del fichero y pasar al índice y a la transacción, lo que, no os extrañéis, a veces tarda más que la operación mecánica.

La velocidad de copia de mi disco flash se va degradando poco a poco

En un disco mecánico, escribir encima de lo ya escrito es tan fácil como que la cabeza pase y magnetice con otra pauta la zona.

En una flash eso no es así. Si una flash tiene una celda escrita, primero hay que borrarla con un comando de borrado.

Suponiendo que estemos escribiendo en un solo sector, la operación de escritura que hemos descrito antes se podría ampliar de la siguiente manera:

  1. Abrir el chip
  2. Preguntar si la celda está borrada
  3. Borrarla si no lo está
  4. Escribir
  5. Cerrar

Y la operación de borrado es lenta. Asquerosamente lenta, y es la que realmente puede romper la celda. En una escritura en modo ráfaga quizás el chip escriba automáticamente hasta que se encuentre con una celda sucia, y en ese momento devuelva un error que debe ser manejado por la controladora.

Un pequeño interludio: una memoria flash tiene un número limitado de escrituras, digo borrados. Dependiendo del modelo de chip y fabricante, puede empezar con tan solo 10.000, aunque lo habitual es que el número empiece en el millón y subiendo.

flash

De todos modos el hecho está en que borrar una celda solo se puede borrar un limitado número de veces.

Volviendo al tema que nos ocupa, cojamos un pincho USB nuevo recién comprado. De fábrica viene con todas las celdas borradas, por lo que copiar cualquier cosa a ella será lo más rápido posible.

Luego empezaremos a borrar ficheros, dejando huecos de celdas suciasentre huecos de celdas nuevas. Iniciemos más copia de ficheros. El sistema se encontrará celdas limpias, pero también sucias y tendrá que borrarlas, hasta que llegue el momento en el que se hayan usado todas las celdas y entonces cada operación requerirá un borrado previo sí o sí.

Y es entonces cuando nuestro USB estará en todo su esplendor de bajo rendimiento, para ese momento y para siempre jamás hasta que se rompa…

¿O no? Pues no, porque podemos formatearlo. Pero no el formato rápido del sistema operativo, sino el lento, que lo que hace es borrar todas y cada una de las celdas del disco.

¿Habéis hecho alguno? ¿Os habéis dado lo que tarda? Dividid el tempo total entre los Gigabyes, Megabytes o Kilobytes totales de la unidad y tendréis una unidad de tiempo razonable de lo que se tarda a borrar una celda, luego lo sumáis al tiempo normal de escritura.

De todos modos mi consejo es que no hagáis este tipo de formato, porque envejecen bastante el dispositivo.

Businesswoman with too much work to do

En esta sección he hablado de un pincho USB, pero todo lo descrito aquí es extensible a cualquier dispositivo flash, discos duros SSD incluidos.

El trim, idiota, el trim

¿Por qué los discos duros SDD no suelen ralentizarse? Por el TRIM. Y bueno, eso de que no se ralentizan… pero vayamos por partes.

TRIM es un comando que se puede enviar a una celda flash. No todos los SSD lo soportan, y es posible que algunos pinchos USB o tarjetas SD sí, pero en general la respuesta es no. Dependerá del fabricante y del firmware del dispositivo (y es por eso por lo que a los pinchos USB y a las SD no se les envía el comando).

Por ejemplo, hace unos años compré unos discos SSD que no disponían de ese comando, justo unos días después de que el fabricante sacara una actualización del firmware del disco para habilitarlo. De ese modo me ahorré unos (bastantes) euros comprando unos discos antiguos que iban a funcionar como los nuevos.

TRIM es el comando que el sistema operativo envía al disco para que borre una celda o celdas cuando por ejemplo borramos un fichero para dejar el espacio limpio y preparado para la siguiente escritura.

En general, todos los sistemas operativos son capaces de hacerlo siempre que sepan que el disco es SSD.

El truco de la no pérdida de rendimiento está en que ese comando no se ejecuta cuando se envía, sino que se encola y el disco ya lo ejecutará en sus propios tiempos muertos.

trim

Hasta Apple lo ha incorporado para cualquier disco SSD. Antes de El Capitán solo los discos originales de Apple recibían el comando TRIM desde el sistema operativo, lo que llevó a fabricantes de discos SSD a implementar firmwares con auto-TRIM y a otros programadores a forzar el TRIM en OS X.

No obstante, el que el sistema operativo envíe el comando TRIM al disco no garantiza que la celda se vaya a borrar. Bueno, sí, pero podría ocurrir que el sistema enviara el TRIM para el primer sector, dejando los otros tres sin borrar.

Explico: normalmente los discos duros se organizan por sectores de 512 bytes, pero el sistema operativo los controla como poco de 8 en 8 (4096 bytes) por un tema de eficiencia, y no es la primera vez que se descubre que el driver ha enviado el TRIM al primer sector y no a los 7 restantes.

Es ahí donde entra el firmware del disco, para enterarse de eso y corregir la situación, y es por eso por que un poco más arriba he dicho que a veces sí se ralentizan porque si el sistema operativo falla, y el disco no se entera, al final, siete de cada ocho sectores necesitarán un borrado antes de volver a ser escritos.

¿Cómo puede saber eso el firmware del disco (y de paso corregirlo)? Pues sabiendo el sistema operativo sobre el que se ejecutan y el tamaño lógico de sector y qué le está enviando.

En el caso de OS X existen incluso discos SSD que conocen el formato de Apple, y toman nota de la estructura de ficheros que almacenan y son más eficientes (porque están a más bajo nivel) que el propio sistema operativo a la hora de mantenerse limpios. Es el caso del disco SSD que tengo instalado en mi iMAC, que ya tiene unos años y tiene el mismo rendimiento que el primer día en que lo puse. Y sin activar el TRIM de OS X, ni antes ni después de El Capitán.

mac-os-x-trim-support

Ya para terminar, ¿qué pasa cuando se rompe una celda? Creo que hasta un número determinado de celdas rotas, el firmware del disco las cierra para que no se usen y sigue funcionando como si tal cosa, pero a partir de un determinado número de fallos, se pone en modo lectura y ya no deja escribir.

Y de repente un disco tuyo se pone así, ¡¡¡corre, maldito!!! Haz copia de seguridad del mismo porque estás a un pelo de que reviente del todo y te deje tirado. Pero verifica antes que no se te ha activado sin querer la pestaña de solo lectura que traen algunos discos.

Use-Time-Machine

Por RFOG | 12 Comentarios | Enlaza esta entrada
contacto@wintablet.info tema WinTablet.info por Ángel García (Hal9000)