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?
fuente
mv
tendrían que cooperar, mezclando en gran medida las capas de abstracción.mv
realidad 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.)Change Drive Letter and Paths
cuando se refiere a una partición / volumen.Respuestas:
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).
fuente
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.
fuente