Pregunta el tamaño del bloque físico es 2048 bytes, pero Linux dice que es 512


Sé que este mensaje de error inquieta a tantas personas que intentan formatear una unidad USB. Pero cuando lo busco, todo lo que obtengo es "instrucciones". Pero realmente quiero entender los antecedentes técnicos sobre este asunto.

He leído mucho sobre sectores, cilindros, bloques, etcétera ... Lo he entendido todo, así que creo que ahora tengo una sólida formación.

En todos los tutoriales que he leído, nadie mencionó el "tamaño de bloque físico". Pero desde mi punto de vista hasta ahora lo traduciría en "tamaño de sector en el dispositivo". ¿Correcto?

Creo (no encontré confirmación en ninguna parte) que el "controlador" almacena el "descriptor del dispositivo USB" en alguna parte. No es parte del chip flash NAND. Me imagino que funciona así: mi sistema operativo envía algún tipo de solicitud GET al chip controlador del USB. El chip del controlador devuelve el "descriptor del dispositivo". Ese "descriptor de dispositivo" contiene información como el tamaño del proveedor Y del sector (= tamaño del bloque físico ??).

Así es como mi sistema operativo sabe sobre el tamaño del bloque físico. ¿Pero cómo diablos "Linux alegaría que es 512" ??? ¿Dónde se almacena esa información? ¿Cómo llega Linux a esa afirmación?


0


origen


¿Palabras de 512 x 32 bit?
uhm, discúlpeme? - user3182532
tal vez se trate de cuatro sectores de 512 bytes en un clúster de 2048 bytes (grupo de 4 sectores) - jsotola
No creo que la información esté expuesta de manera oficial y estándar por el firmware de la memoria flash. Algunos fabricantes pueden proporcionar comandos no estándar para llegar allí. Pero no es confiable. Las unidades de memoria flash USB se desgastan y han "convergido" en el "tamaño de bloque" de 512 bytes, independientemente de su sectorización física real. (Sin embargo, puede haber algunos programas que pueden intentar algunos medios no estándar para obtener esta información. Un controlador de Linux no se va a preocupar por eso. Por lo tanto, informará sobre lo que informa el dispositivo. Y eso, en general, NO será su sectorización física). - jonk
Podrías mostrar el resultado de hdparm -I /dev/sdX | grep -i physical - Alex


Respuestas:


Creo que confundes las características físicas del chip flash con la configuración del sistema operativo y el sistema de archivos.

El chip flash tendrá un tamaño de bloque o sector, que es la unidad de memoria más pequeña que se puede borrar y escribir eléctricamente. Un tamaño de bloque de 2048 bytes no es infrecuente. Nuevamente, esta es una característica física del circuito de flash ... similar a los sectores de un disco rígido magnético rotativo.

El tamaño del bloque del sistema de archivos es la unidad de memoria más pequeña que el sistema operativo usará para almacenar un archivo o parte de un archivo. Esto generalmente se especifica cuando se formatea por primera vez el medio (por ejemplo, unidad flash) y solo se puede cambiar si vuelve a formatear el medio de almacenamiento. Si elige un tamaño de bloque pequeño (y 512 bytes es un tamaño de bloque pequeño), se desperdiciará menos memoria al almacenar archivos. Por otro lado, elegir un tamaño de bloque grande significa que hay menos fragmentación de un archivo grande cuando se almacena. Por lo general, se usa un tamaño de bloque mayor (digamos 4096 bytes) cuando el volumen tiene una capacidad mayor.


0



gracias pero ya sé todo esto, ¿pueden responder mis últimas 2 preguntas? tal vez tenga que reformular: si el tamaño del sector ES (¡hecho físico!) 2048 bytes, ¿por qué Linux dice "no, no es, es 512". ¿Qué proceso lleva al sistema operativo a esa conclusión? ¿Qué archivo se leyó, qué información se obtuvo de dónde, qué interpolación se hizo, para llegar a ese resultado? ¿Por qué Linux dice algo que no es verdad? - user3182532
Debe proporcionar más información. En exactamente ¿En qué contexto "dice" Linux que el tamaño del sector es de 512 bytes? Cómo saber que el tamaño del sector real es 2048 bytes? Debe ser mucho más específico que "el sistema operativo lo dice".


Visión general rápida (si realmente desea comprender todos los detalles, deberá leer los estándares, que están disponibles en línea):

El protocolo USB para dispositivos de almacenamiento es más o menos idéntico a los comandos que se usaron para SCSI dispositivos. Así que tienes comandos para leer y escribir bloques, y un montón de otros comandos. Entre ellos está READ CAPACITY(16) (el 16 significa que el comando tiene 16 bytes de longitud, una variante anterior tenía solo 10 bytes de longitud), que devuelve, entre otra información, tanto el tamaño de los bloques lógicos como la cantidad de bloques lógicos que hay por bloque físico.

Entonces, así es como el sistema operativo sabe sobre el tamaño de bloque lógico y físico. La información de respuesta se almacena en el firmware del controlador, no en el medio de almacenamiento.

Ahora puede suceder que para los discos duros USB, que consisten en un disco SATA y un puente USB-a-SATA, este chip puente tenga errores y no envíe correctamente la respuesta del READ CAPACITY comando (tengo un disco con ese chip, y confirmé una respuesta diferente a través de SATA para el mismo disco). En ese caso, incluso si el disco duro afirma correctamente tener un tamaño de bloque físico de 2048, el chip del puente manipulará esta respuesta para que el sistema operativo recupere un tamaño de bloque físico y lógico idéntico. Esa es la razón habitual de la situación cuando el tamaño de bloque informado es incorrecto.

Para las memorias flash USB, la situación es diferente: no hay unidades SATA detrás de un puente, el controlador y la ROM flash de la memoria USB forman una unidad ajustada, y si el controlador está mintiendo sobre el tamaño del bloque físico, entonces está mintiendo al respecto - nada que uno pueda hacer. En realidad, ni siquiera ahora está mintiendo, porque aunque la ROM flash tiene bloques de borrado que justificarían un "tamaño de bloque físico", no conoce su tamaño.

No quedó claro por su pregunta si está hablando de discos duros USB o ROM flash USB: para los discos duros modernos uno puede suponer que tienen un tamaño de bloque físico de 2048, para los ROM flash no se puede asumir nada, por lo que su reclamo "el tamaño del bloque físico es 2048" en ese caso es un poco cuestionable, a menos que pueda explicar cómo lo sabe.

Y finalmente: un "descriptor de dispositivo USB" es parte del protocolo USB en sí, y una cosa completamente diferente.


0