Questão tamanho de bloco físico é 2048 bytes, mas o Linux diz que é 512


Eu sei que esta mensagem de erro está assombrando tantas pessoas que tentam formatar uma unidade USB. Mas quando eu procuro, tudo o que eu recebo são "instruções". Mas eu realmente quero Compreendo a formação técnica sobre este assunto.

Eu li muito sobre setores, cilindros, blocos, etc. Eu entendi tudo isso, então acho que tenho um sólido background agora.

Em todos os tutoriais que li, ninguém mencionou "tamanho de bloco físico". Mas pelo que eu entendi até agora eu iria traduzi-lo em "tamanho de setor no dispositivo". Corrigir?

Eu acho (eu não encontrei confirmação em lugar algum para isso) que o "descritor de dispositivo USB" é armazenado em algum lugar pelo "controlador". Não faz parte do chip flash NAND. Eu imagino que funciona assim: meu sistema operacional envia algum tipo de solicitação GET para o chip controlador do USB. O chip controlador retorna o "descritor do dispositivo". Esse "descritor de dispositivo" contém informações como tamanho do setor E do fornecedor (= tamanho do bloco físico).

É assim que meu sistema operacional sabe sobre o tamanho do bloco físico. Mas como na terra seria "o Linux afirma que é 512" ??? Onde essas informações são armazenadas, como o Linux chega a essa afirmação?


0


origem


Palavras de 512 x 32 bits?
uhm, desculpe-me? - user3182532
talvez sejam quatro setores de 512 bytes em um cluster de 2048 bytes (cluster de 4 setores) - jsotola
Eu não acho que a informação seja exposta de maneira oficial e padrão pelo firmware da memória flash. Alguns fabricantes podem fornecer comandos não padrão para chegar lá. Mas não é confiável. As unidades de memória flash USB usam nivelamento de desgaste e "convergiram" no "tamanho de bloco" de 512 bytes, independentemente de seu setor físico real. (Pode haver alguns programas que podem tentar alguns meios não-padrão para obter essa informação, no entanto. Um driver Linux não vai se preocupar com isso. Então, ele irá relatar o que o dispositivo reporta. E isso em geral NÃO será setorização física.) - jonk
Você poderia mostrar o resultado de hdparm -I /dev/sdX | grep -i physical - Alex


Respostas:


Eu acho que você está confundindo as características físicas do chip flash com as configurações do sistema operacional e do sistema de arquivos.

O chip flash terá algum tamanho de bloco ou setor, que é a menor unidade de memória que pode ser apagada e gravada eletricamente. Um tamanho de bloco de 2048 bytes não é incomum. Mais uma vez, esta é uma característica física do circuito flash ... semelhante aos setores de um disco rígido magnético rotativo.

O tamanho do bloco do sistema de arquivos é a menor unidade de memória que o sistema operacional usará para armazenar um arquivo ou parte de um arquivo. Isso geralmente é especificado quando a mídia (por exemplo, unidade flash) é formatada primeiro e só pode ser alterada se você reformatar a mídia de armazenamento. Se você escolher um tamanho de bloco pequeno (e 512 bytes é um tamanho de bloco pequeno), menos memória será desperdiçada ao armazenar arquivos. Por outro lado, escolher um tamanho de bloco grande significa que há menos fragmentação de um arquivo grande quando ele é armazenado. Geralmente, um tamanho de bloco maior (digamos 4096 bytes) é usado quando o volume tem uma capacidade maior.


0



obrigado, mas eu já sei de tudo isso, você pode responder minhas duas últimas perguntas? talvez eu tenha que reescrever: se o tamanho do setor é (fato físico!) 2048 bytes, por que o Linux diria "não, não é, é 512". Qual processo leva o SO a essa conclusão? Qual arquivo leu, quais informações foram recuperadas de onde, qual interpolação foi feita, para chegar a esse resultado? Por que o Linux diz algo que não é verdade? - user3182532
Você precisa fornecer mais informações. Dentro exatamente Que contexto o Linux "diz" que o tamanho do setor é de 512 bytes? Como você conhecer que o tamanho real do setor é 2048 bytes? Você precisa ser muito mais específico do que "o SO diz".


Visão geral rápida (se você realmente quiser entender todos os detalhes, terá que ler os padrões, que estão disponíveis on-line):

O protocolo USB para dispositivos de armazenamento é mais ou menos idêntico aos comandos usados ​​para SCSI dispositivos. Então você tem comandos para ler e escrever blocos e um monte de outros comandos. Entre esses é READ CAPACITY(16) (o 16 significa que o comando tem 16 bytes de comprimento, uma variante anterior tinha apenas 10 bytes), que retorna, entre outras informações, tanto o tamanho dos blocos lógicos quanto quantos blocos lógicos existem por bloco físico.

Então é assim que o sistema operacional sabe sobre o tamanho do bloco lógico e físico. As informações de resposta são armazenadas no firmware do controlador, não no meio de armazenamento.

Agora pode acontecer que para discos rígidos USB, que consistem em uma unidade SATA e um chip ponte USB-para-SATA, que este chip de ponte tenha bugs e não direcione corretamente a resposta READ CAPACITY comando (eu tenho uma unidade com um tal chip, e confirmei uma resposta diferente via SATA para o mesmo disco). Nesse caso, mesmo que o disco rígido afirme corretamente ter um tamanho de bloco físico igual a 2048, o chip da ponte manipulará essa resposta para que o sistema operacional recupere um tamanho idêntico de bloco físico e lógico. Então essa é a razão usual para a situação quando o tamanho do bloco reportado está errado.

Para pen drives USB, a situação é novamente diferente: não há uma unidade SATA atrás de uma ponte, o controlador e a ROM flash do pen drive formam uma unidade compacta e, se o controlador está mentindo sobre o tamanho do bloco físico, ele está sobre isso - nada que se possa fazer. Na verdade, você nem estará mentindo agora, porque enquanto a ROM flash possui blocos de apagamento que justificam um "tamanho de bloco físico", você não sabe o tamanho deles.

Não ficou claro na sua pergunta se você está falando sobre discos rígidos USB ou flash ROMs USB - para os discos rígidos modernos pode-se supor que eles têm um tamanho de bloco físico de 2048, para ROMs não se pode supor nada. "o tamanho do bloco físico é 2048" nesse caso é um pouco questionável, a menos que você possa explicar como você sabe disso.

E finalmente: Um "descritor de dispositivo USB" faz parte do próprio protocolo USB e é uma coisa completamente diferente.


0