Um sistema de arquivos “vê” o dispositivo de armazenamento como uma matriz de bytes (muito grande)?

12

Quero saber como um sistema de arquivos grava e lê em um dispositivo de armazenamento.

Eu acho que é assim que funciona:

Um sistema de arquivos não acessa o dispositivo de armazenamento diretamente, mas o dispositivo de armazenamento é apresentado (pelo driver do dispositivo de armazenamento) ao sistema de arquivos como uma matriz de bytes (muito grande).

Por exemplo, se o sistema de arquivos quiser acessar um disco rígido, ele simplesmente acessará a matriz de bytes que representa o disco rígido.

Dessa forma, um sistema de arquivos pode funcionar com qualquer tipo de dispositivo de armazenamento (disco rígido tradicional, SSD, unidade flash USB etc.), e apenas o driver do dispositivo de armazenamento é alterado.

Esta imagem mostra o que acabei de explicar:

insira a descrição da imagem aqui

Estou correto no meu entendimento?

joseph_m
fonte

Respostas:

15

No Linux (e nos Unixes da década de 1980), um dispositivo de armazenamento (geralmente uma partição de disco em algum disco rígido ou em algum SSD ) é um dispositivo de bloco (veja isso ), assim como uma [sub-] sequência de blocos (que é o unidade básica de E / S física ). O tamanho do bloco físico depende do hardware (discos IDE antigos tinham um tamanho de bloco de 512 bytes, novos discos SATA grandes têm um tamanho de bloco de 4Kbytes, leia a wiki Advanced Format ) e quando você cria um sistema de arquivos (por exemplo mkfs, consulte mke2fs (8)), você pode especificar um tamanho de bloco lógico que é múltiplo (geralmente uma pequena potência de dois, incluindo 1) desse tamanho de bloco físico. Leia também sobre o endereçamento de bloco lógico .

No passado (pense nas estações de trabalho Sun3 da década de 1990), o disco era feito de cilindros com cabeças organizadas em setores (leia a CHS wikipage), com um setor contendo um bloco. Hoje, eles ainda permanecem, mas são um artefato artificial fornecido pelo controlador do disco rígido (o circuito no próprio disco). Em alguns sistemas operacionais, o driver do dispositivo de bloco reagendou e reordenou as solicitações de E / S para minimizar o movimento da cabeça do disco e a latência rotacional .

Dessa forma, um sistema de arquivos pode funcionar com qualquer tipo de dispositivo de armazenamento (disco rígido tradicional, SSD, unidade flash USB etc.), e apenas o driver do dispositivo de armazenamento é alterado.

Sim, mas o mal está nos detalhes (por exemplo, leia sobre TRIM e Write Amplification , específico para SSDs). E os detalhes são importantes, portanto, a implementação real é menos simples que a sua figura. Leia mais sobre sistemas de arquivos (e pense em sistemas de arquivos remotos e em cluster , incluindo SMB e NFS ; leia também sobre o Logical Volume Manager ).

Leia Sistemas operacionais: três peças fáceis (e sua parte de persistência ).

Notar que dispositivos de bloco foram desativados no FreeBSD (na verdade fornecendo uma abstração comum para os caracteres e os dispositivos de bloco). Eu suspeito que, mesmo no Windows, o sistema operacional saiba sobre partições, tamanho do bloco, etc. (mas você deve verificar).

Basile Starynkevitch
fonte
O Windows também lida com partições em discos e cada partição pode usar um sistema de arquivos diferente (talvez o FAT-32 em um e NTFS no outro). O sistema de arquivos pode acessar as partições no nível do bloco ou os blocos podem ser combinados em "clusters". Em qualquer partição, o tamanho do cluster seria corrigido.
Simon B
Eu meio que sabia disso, porque o MSDOS sabia.
Basile Starynkevitch
Na verdade, o FreeBSD ainda usa o que você chama de "dispositivos de bloco". Não há como acessar um disco rígido além de uma grande variedade de blocos. Eles são chamados de dispositivos personagem / raw no FreeBSD. Eles ainda acessam o dispositivo como uma grande variedade de blocos. A única coisa que falta no FreeBSD é o cache no nível do dispositivo, o que não é necessário, pois o sistema de arquivos já fornece o cache.
21717 juhist
3

Tudo o que Basile Starynkevitch diz está correto. Vou adicionar um pouco mais. De fato, as unidades de disco eram unidades de "bloco", mas os dispositivos de bloco (e muitos outros dispositivos) eram apresentados de duas formas: "bruta" e "cozida". Os dispositivos brutos podem ser endereçados apenas em blocos com múltiplos de seu tamanho de bloco de armazenamento nativo. Portanto, um dispositivo de disco bruto pode ser lido ou gravado apenas um ou muitos blocos de cada vez, não apenas um byte ou dois. Os dispositivos cozidos adicionaram uma camada que permitiria operações menores, além de vários outros recursos.

Os sistemas de arquivos funcionavam com dispositivos brutos e, portanto, os viam não como uma grande variedade de bytes, mas como uma grande variedade de blocos, como explicava BS.

Topher
fonte