o que são nós /dev/sdxx?

o que são nós /dev/sdxx?

Esta imagem do TLDP é incrível. Ele mostra que antes de fornecer ao espaço do usuário acesso real de leitura, gravação e abertura ao sistema de arquivos, os blocos são mapeados no sistema de arquivos virtual.

insira a descrição da imagem aqui

eWikipédiadiz que existem 3 versões de sistemas de arquivos em camadas diferentes.

Então, os padrões (nós SD) são referentes ao físico ou, após oLVMsistema de arquivos virtual mapeado?

Ou eles estão se referindo apenas à partição? (o que significaria que escrever diretamente na partição também ignoraria o driver do sistema de arquivos, sem o qual você não poderia nem interagir com os arquivos em si)

Se for esse o caso, quais dispositivos representam os drivers do sistema de arquivos/ou sistemas de arquivos ou.... Eu simplesmente não sei... alguém poderia me vincular algo onde o uso do disco pelo kernel é explicado?

Responder1

dr.: /dev/sdaXrepresenta uma partição. Acho que um equívoco fundamental que você tem é a diferença entre sistemas de arquivos e partições. Uma partição é realmente simples - basicamente é apenas uma seção do disco definida em uma tabela de partição no início do disco. Um sistema de arquivos, entretanto, é algo muito mais avançado. Um sistema de arquivos é essencialmente uma estrutura de dados usada para rastrear arquivos que o kernel (especificamente, um driver de sistema de arquivos) é capaz de ler e gravar. Essa estrutura de dados pode tecnicamente ser colocada em qualquer lugar do disco, mas espera-se que o início da estrutura de dados fs seja igual ao início de uma partição.

Você mencionou o LVM em sua pergunta - vamos esquecer isso por enquanto, já que é um tópico mais avançado (explicarei o LVM no final).

Digamos que você tenha um único disco rígido de 100 GB com nada além de zeros. Nesse caso, você terá um /dev/sdaarquivo do qual poderá ter 100 GB (embora, por exemplo, duo reporte como comprimento zero porque é um bloco especial) e contém nada além de zeros. /dev/sdaé o método pelo qual o kernel expõe o conteúdo bruto do dispositivo ao espaço do usuário para leitura e gravação. É por isso que ele tem a mesma quantidade de dados que o seu disco e o mesmo conteúdo do seu disco. Se você ativar o quinto bit /dev/sdapara ser um em vez de zero, o kernel irá inverter o quinto bit na unidade física para corresponder. No diagrama que você forneceu, essa gravação passaria pela interface de chamada do sistema para o kernel, depois pelo driver de disco rígido IDE e, finalmente, para o próprio disco rígido.


Agora digamos que você queira fazer algo útil com essa unidade, como armazenar arquivos nela. Agora você precisa de um sistema de arquivos. Existem vários sistemas de arquivos ridículos disponíveis para você no kernel do Linux. Cada um deles usa uma estrutura de dados diferente no disco para controlar os arquivos, e também podem modificar suas estruturas de dados de maneiras diferentes, por exemplo, para fornecergravação atômicagarantias (ou seja, as gravações são bem-sucedidas ou não; nunca pode haver dados escritos pela metade, mesmo se a máquina travar). Isso é o que as pessoas querem dizer quando falam sobre um "driver de sistema de arquivos": um driver de sistema de arquivos é um trecho de código que entende como ler e gravar estruturas de dados de um sistema de arquivos específico no disco. Os exemplos incluem ext4, btrfs, XFS, etc.

Então você deseja armazenar arquivos. Digamos que você escolha o ext4 como sistema de arquivos. O que você precisa fazer agora é formatar o disco para que as estruturas de dados de um sistema de arquivos vazio existam no disco. Para fazer isso, você usa mkfs.ext4e diz para ele escrever em /dev/sda. mkfs.ext4irá então escrever um sistema de arquivos ext4 vazio começando no início de /dev/sda. O kernel então fará as gravações /dev/sdae as aplicará no início do disco físico. Agora que o disco contém as estruturas de dados de um sistema de arquivos, você pode, por exemplo, mount /dev/sda /mntmontar o novo sistema de arquivos, mover arquivos para ele, etc. Qualquer gravação em arquivos /mntpassaria pela interface de chamada do sistema e depois para o driver do sistema de arquivos ext4 ( que sabe como transformar o mais abstrato "gravar esses dados em tal e tal arquivo" nas mudanças concretas que precisam ser feitas nas estruturas de dados fs no disco), depois no driver de disco rígido IDE e, finalmente, no a própria unidade.


Agora, o que foi dito acima funcionará, mas normalmente não é assim que as pessoas fazem as coisas. Geralmente eles usampartiçõesna unidade. Uma partição é basicamente apenas uma seção específica da unidade. Ao usar partições, você tem umtabela de partiçãono início da unidade que indica onde, fisicamente, cada partição está localizada. As partições são legais porque permitem dividir uma unidade em várias seções que podem ser usadas para diferentes propósitos.

Digamos que você queira criardoissistemas de arquivos na unidade, ambos ~ 50 GB (ou seja, meio a meio). Primeiro você teria que particionar a unidade. Para fazer isso, você usaria uma ferramenta como fdiskou gdisk, ambas criando diferentes tipos de tabelas de partição, e você diria à sua ferramenta para gravar em /dev/sda. Quando você terminar o particionamento, você terá /dev/sda, /dev/sda1, e /dev/sda2. /dev/sda1e /dev/sda2são a forma do kernel representar as diferentes partições do disco. Se você escrever no início de /dev/sda2, ele escreverá no início da segunda partição, que está emno meio do disco.

Outra maneira de explicar isso é falando sobre o conteúdo de /dev/sda. Lembre-se de que isto /dev/sdaé, bit a bit, o conteúdo do disco rígido físico. E /dev/sda1é, pouco a pouco, o conteúdo da primeira partição do disco rígido. Isso significa que /dev/sdahá um pouco de dados - o cabeçalho da partição - seguido pelo conteúdo exato de /dev/sda1, então /dev/sda2. /dev/sda1e /dev/sda2são mapeados para regiões específicas do disco, que são partições que você configurou.

A partir daqui podemos usar mkfs.ext4novamente para criar um sistema de arquivos on /dev/sda1, que gravará no disco começando diretamente após o cabeçalho da partição. Se usarmos mkfs.ext4on /dev/sda2, ele escreve começando no início da partição, que está no meio do disco (e portanto no meio do /dev/sdaconteúdo de ').

Agora você pode fazer, por exemplo mount /dev/sda2 /mnt. Isto diz ao kernel para ler os dados do sistema de arquivos começando no início da segunda partição e expô-los a você de uma forma mais útil - ou seja, arquivos e diretórios no local /mnt. Novamente, o kernel usa um driver de sistema de arquivos para realizar esse mapeamento.


Agora vamos falar brevemente sobre o LVM. LVM é basicamente apenas uma abstração sobre partições. As partições são mapeadas muito diretamente para locais físicos no disco. No exemplo de duas partições acima, digamos que você queira excluir a primeira partição e expandir a segunda para o espaço recém-liberado. Como as partições são mapeadas diretamente para regiões do disco, a única maneira de fazer isso é mover fisicamente todos os 50 GB de dados da partição para o início do disco e, em seguida, expandir a partição até o fim.

O LVM foi projetado para tornar isso menos doloroso. Basicamente, você fornece ao LVM um monte de armazenamento bruto e depois diz como usar esse armazenamento. O LVM fornece um “disco” virtual que pode ser dividido como partições, mas cujo armazenamento subjacente pode estar em qualquer lugar do pool de armazenamento bruto que você alocou para ele. Para usar o exemplo acima, se você der ao LVM todo o disco para usar e depois dividi-lo em dois, você poderá excluir a primeira "partição" e expandir a segunda "partição" para preencher esse espaço instantaneamente, porque o LVM é capaz de rastrear de onde os dados estão no disco sem exigir que estejam estritamente "em ordem".

Para obter mais detalhes sobre como o LVM funciona, consulte esta resposta:https://unix.stackexchange.com/a/106871/29146

Responder2

/dev/sdaé uma interface para todo o disco rígido. Se você tiver permissão, poderá pesquisar diretamente em qualquer lugar da unidade. /dev/sda1é a primeira partição na unidade. Ainda não há sistema de arquivos envolvido nesse ponto. Dentro da partição, pode haver um sistema de arquivos diretamente ou pode ser um contêiner LVM.

informação relacionada