Mover un archivo entre dos unidades en un SSD: ¿se copiará?

18

Al mover un archivo dentro de una unidad, el archivo no se copia ni se elimina. La tabla que hace referencia a los archivos se acaba de actualizar. Y hasta donde yo sé, ese no es el caso en 2 unidades en un HDD. Pero los SSD son diferentes, no hay espacio físico dedicado a cada unidad. ( fuente )

Entonces, mi pregunta es ¿qué sucede cuando un archivo se mueve de una unidad a otra en el mismo SSD, se copian los bytes y se borra el original, o se actualiza alguna tabla, agotando menos el SSD?

Ya hay una pregunta duplicada aquí . Pero ambas respuestas afirman:

cada partición tendrá su propia área física del disco para sí misma

y

Particionar un disco duro en realidad designa regiones físicas para cada partición. [y en un comentario:] SSD sigue siendo un disco duro, simplemente no tiene un disco.

Por lo que sé, eso está mal. Ver aquí .

Entonces, ¿alguien que sepa más sobre SSD me dirá si está en lo correcto en su evaluación a pesar de su error?

ispiro
fuente
14
La respuesta aceptada allí es correcta: cada partición tiene su propio sistema de archivos independiente. Cada sistema de archivos decide por sí mismo cómo utiliza los bloques asignados a él. Para hacer lo que propone, el firmware de SSD, los sistemas de archivos y las herramientas de usuario como Linux mvtendrían que cooperar, mezclando en gran medida las capas de abstracción.
Kamil Maciorowski
2
@Kamil: Si el SO lo implementara, en mvrealidad necesitaría hacer menos de lo que hace actualmente, sospecho. (Es decir, el sistema operativo solo necesitaría asegurarse de que un cambio de nombre de sistema cruzado () tenga éxito en lugar de fallar como sucede actualmente.)
user1686
16
"2 unidades en [una SSD / HDD]" - Creo que quiere decir 2 sistemas de archivos o 2 particiones en una SSD / HDD. Recuerde que la última "D" en ambos acrónimos es "Unidad", por lo que está diciendo 2 unidades en 1 unidad, lo que no tiene sentido.
JoL
1
Tomemos, por ejemplo, el cuadro de diálogo Administración de discos. Dice Change Drive Letter and Pathscuando se refiere a una partición / volumen.
ispiro
44
@ispiro ¿Eso es en Windows? Parece una forma horrible de confundir a los usuarios. Solo puedo adivinar que se les ocurrió el término "Letra de unidad" antes de que las particiones de unidad se implementaran, y luego terminaron representando las particiones de unidad como "unidades" independientes. Así que ahora puede tener múltiples "unidades" de Windows que representan particiones de una unidad de hardware ...
JoL

Respuestas:

38

Por lo que sé, eso está mal

La descripción citada es mitad correcta, mitad incorrecta. Pero también es medio incorrecto para los discos duros.

Particionar una unidad designa regiones lógicas para cada partición. El sistema operativo no se preocupa por las ubicaciones físicas en absoluto: solo le pide a la unidad que "lea el bloque lógico # 31415926" y la unidad misma decide dónde se ubican los datos. Esto funciona de la misma manera para la memoria magnética y flash.

En realidad, es lo mismo que con los discos duros de los últimos 20-25 años: aunque los primeros sistemas operativos usaban ubicaciones físicas de cilindro / cabeza / sector, eso ya se ha ido. No sabe con precisión dónde se guarda el plato LBA # 1234. Los discos duros incluso reasignan automáticamente los sectores físicos defectuosos, por lo que el mismo LBA se puede leer de repente desde un área física completamente diferente, al igual que con los SSD.

Entonces, tanto con HDD como con SSD, el sistema operativo solo tiene un rango de LBA (por ejemplo, 0–999999) para leer y escribir datos. El propósito de la partición es asignar subrangos en ella, por ejemplo, la partición A obtiene 10–499999, la partición B obtiene 500000–999999. Cada partición tiene un sistema de archivos independiente, y los sistemas de archivos dentro de cada partición no pueden hacer referencia a datos externos , no pueden cruzar los límites de la partición. (Por ejemplo, la partición A no puede tener un archivo cuyos datos se guarden en el sector # 600000).

Como resultado, todos los archivos que se mueven de uno a otro deben copiarse por completo.

(Dicho esto, en teoría, el sistema operativo puede solicitarle al disco que duplique datos de un área a otra (por ejemplo, "copiar LBA # 1234 a # 567890"), sin tener que copiarlo en la memoria principal y luego volver, y, por supuesto, esto pasaría completamente por alto los límites de partición. Esto podría hacer uso de la "capa de traducción flash" del SSD, por ejemplo. Pero en la práctica, hasta donde yo sé, esto no se hace).

usuario1686
fuente
Asumo que tienes razón. Sin embargo, tenga en cuenta que hay otra opción. La unidad podría decidir que el sector # 001 en la unidad # 1 ahora cambiaría con el sector # 123 en la unidad # 2 (es decir, el sector # 001 en la unidad # 1 ahora se referirá a los datos físicos que solían denominarse sector # 123 en unidad # 2) moviendo así el archivo sin tener que copiar los bytes. Por lo tanto, mover una TB de datos puede ser, en principio, casi instantáneo.
ispiro
15
La unidad no conoce archivos o sistemas de archivos y, por lo tanto, no puede tomar tales decisiones por sí misma. Necesita recibir una solicitud del sistema operativo para que esto suceda. Como ya mencioné en el último párrafo, ciertamente es técnicamente posible, pero los sistemas operativos generalmente no se molestan con esto para las copias del sistema de archivos cruzados, y dudo que lo hagan para las copias del mismo sistema de archivos (más comúnmente se hace a nivel FS).
user1686
66
Ciertos SSD implementan la desduplicación a nivel de bloque. Por ejemplo, Sandforce ( en.wikipedia.org/wiki/SandForce#Technology ) fue uno de los primeros en implementar esto y sus controladores llegaron a múltiples productos de fabricantes de SSD. Los controladores Sandforce tenían un factor de "amplificación de escritura" de menos de uno, lo que significa que escribieron menos datos en el almacenamiento flash que lo que el sistema operativo envió al disco. Como comparación, los SSD generalmente tienen un factor de amplificación de escritura mayor que uno.
hojusaram
2
@hojusaram: Cierto, pero sigue siendo deduplicación post-factum, lo que reduce las escrituras flash, pero los datos aún se leen, se copian del disco a la memoria del sistema operativo y luego de vuelta al controlador de disco. Lo que significa ispiro creo que es el equivalente SSD de "reflink" o "copy on write" (por ejemplo, cp --reflink) que el sistema operativo podría pedir explícitamente al disco que realice por sí mismo.
user1686
1
Sería interesante descubrir cómo APFS se ocupa de esto, ya que los límites de la partición ya no son fijos, son mutables sin la intervención del usuario.
Tetsujin
9

Lo que sucede cuando los datos se escriben en un disco de estado sólido es digno de varios artículos (buen resumen aquí ), porque es muy complicado y depende de la tecnología subyacente. La historia corta es que los SSD en general no pueden escribir cero bits en la memoria. En cambio, tienen que poner a cero (borrar) una sección completa de la memoria, y luego pueden almacenar datos después de eso simplemente escribiendo los que están en ella. Por lo general, en estos días escriben bloques de 512 bytes pero borran una página de 8 bloques que es 4096. Esto, y el hecho de que cada ciclo de escritura / borrado causa cierto desgaste físico de la memoria y la memoria finalmente se desgasta, hace que los SSD sean muy diferentes que girar discos duros magnéticos.

Dejando eso de lado, las unidades SATA (y las unidades AFAIK SAS) no implementan un comando nativo para copiar datos de un sector a otro. (O al menos nada en la especificación SATA o SAS lo requiere, por lo que el sistema operativo no puede contar con que dicho comando esté disponible). Por lo tanto, una copia de archivo en una partición implicará leer los datos de un sector de unidad en la memoria del host y luego escribir vuelve a la unidad en un sector diferente.

Esto se debe a que, en lo que respecta al sistema operativo, una unidad es un conjunto de sectores lógicos numerados, y todo lo que puede hacer es leer de los sectores y escribir en los sectores. El sistema operativo no puede indicarle a la unidad que reasigne sectores.

Además, el sistema de archivos (HFS +, NTFS, ext3, etc.) es un conjunto de estructuras de datos que imponen orden en un conjunto de bloques lógicos. Esas estructuras de datos implementan "archivos", "nombres de archivo", "directorios", "permisos", etc. Entonces, sí, cuando mueve un archivo de un directorio a otro, no se copia; solo se actualizan los datos del sistema de archivos que indican en qué directorio se encuentra el archivo.

El concepto de una partición es que es un conjunto de sectores lógicos en la unidad reclamada por un único sistema de archivos. El corolario de eso es que un sistema de archivos no puede acceder a sectores fuera de su partición. En gran parte, esta es una característica de seguridad, pero también se deriva del hecho de que las estructuras de datos del sistema de archivos están construidas alrededor de la contabilidad de cada sector de la unidad bajo la propiedad del sistema de archivos, y no es trivial agregar o eliminar sectores a esas estructuras. Es por eso que debe ejecutar rutinas especiales para ajustar el tamaño de una partición y también por qué los sistemas de archivos insisten en ejecutarse en un conjunto contiguo de sectores.

Por lo tanto, no es práctico y peligroso implementar una copia de archivo simplemente transfiriendo sectores de un sistema de archivos a otro. En un disco magnético giratorio, también sería una pesadilla de rendimiento, porque aunque el disco hará excepciones para sectores defectuosos, en general se encarga de que los sectores se ubiquen físicamente de manera que se optimice la velocidad de lectura y escritura de números consecutivos sectores.

Además, 2 sistemas de archivos pueden no almacenar datos de archivos de la misma manera en el disco, lo que significa que el intercambio de sectores no funcionaría incluso si fuera práctico. Incluso si son exactamente los mismos tipos de sistemas de archivos, digamos NTFS, uno puede estar usando cifrado o compresión y el otro no, o ambos pueden cifrar los datos, pero con diferentes claves. No es un requisito que los datos en el archivo sean exactamente lo que está almacenado en el disco, todo lo que tiene que almacenarse es una transformación reversible de los datos, para que el sistema de archivos pueda obtener los datos del archivo haciendo algo con Los datos en el disco. Entonces, a menos que ambos sistemas de archivos estén usando exactamente la misma transformación, simplemente intercambiar sectores no lograría el objetivo de transferir los datos del archivo.

Por todas estas razones, es demasiado trabajo para muy poca ganancia para los escritores del sistema operativo y los escritores del sistema de archivos implementar una característica que optimice los movimientos a través de particiones para SSD. Por lo tanto, cualquier movimiento de partición cruzada será una lectura y una escritura.

Dentro del SSD, es una historia ligeramente diferente. Aunque el sistema operativo no le dijo a la unidad que está copiando datos de un lugar a otro, las escrituras en SSD son tan caras (y complicadas) que los controladores SSD hacen mucho trabajo para minimizar las escrituras. Algunos SSD llegan a intentar detectar cuándo un sector que se está escribiendo en el almacenamiento coincide con un sector ya almacenado y marcan esa pieza física de memoria como ahora asignada a 2 sectores lógicos diferentes en lugar de copiarla, haciendo en el nivel de la unidad interna lo que el El sistema operativo no pudo.

Pero no cuentes con eso.

Viejo pro
fuente
1
¿Su último párrafo no implica que el sistema de archivos debe ser el mismo? Supongo que el SSD no sabe qué sistema de archivos se ejecuta en la parte superior. Si, por ejemplo, una partición usa compresión y la otra no, una copia del SSD posiblemente corrompería el archivo.
blablabla
@blablabla El último párrafo asumió que ambos sistemas de archivos almacenan el contenido real del archivo en el disco sin alteración. Lo hice explícito ahora.
Old Pro