Unidades de disco e dispositivos semelhantes a unidades de disco são "burros". Você solicita um LBA, devolve os 512, 2048 ou 4096 bytes que ele contém; vice-versa para escrever.
Uma camada do sistema de arquivos permite que você diga "Eu quero c: \ users \ public \ documents \ Whatever.doc" e realize operações de streaming nisso (abra, leia, escreva, busque, feche) - traduz de locais endereçáveis a nomes a uma série de solicitações para leitura / gravação de LBAs.
Portanto, a camada do sistema de arquivos tem dois lados, o lado que se comunica com o dispositivo (ou bloco) do tipo unidade de disco e o outro lado que fala com o sistema operacional. É aqui que a especificidade do sistema operacional entra em jogo. Normalmente, o lado do dispositivo de bloco do sistema de arquivos é um driver de dispositivo e o lado do sistema operacional é uma API utilizável pelos aplicativos. Mas essas são apenas interfaces e não precisam realmente afetar a operação subjacente da camada do sistema de arquivos.
Todos os sistemas de arquivos fazem com que dados adicionais sejam gravados e lidos fora dos dados do arquivo, a fim de acompanhar as informações sobre os arquivos, ou seja, gravar permissões, atributos, etc.
Há um pouco de problema com a inicialização - como os arquivos do sistema operacional são armazenados no sistema de arquivos, mas como eles são carregados se a camada do sistema de arquivos ainda não está ativa? O Linux resolve esse problema com um disco ram inicial ou com a criação do código do sistema de arquivos como parte do kernel. O Windows resolve esse problema, oferecendo ao carregador de inicialização do Windows a capacidade de ler partições FAT e NTFS. Os gerenciadores de inicialização podem ser burros, como a maioria dos gerenciadores de inicialização clássicos da BIOS, que apenas carregam o LBA 0 e o executam e esperam que o código seja coletado posteriormente, ou razoavelmente inteligente e com pequenas camadas de sistema de arquivos próprias, como UEFI, U-boot, etc.
LVM não é um sistema de arquivos. Ele pega um ou mais dispositivos de bloco e o abstrai em outro dispositivo de bloco "virtual" (em /dev/mapper- qualquer coisa em /dev/mapperé um dispositivo de bloco virtual). Você coloca um sistema de arquivos "em cima de" um LVM da mesma maneira que colocaria um sistema de arquivos "em cima de" uma partição. O LVM é outra camada entre um ou mais drivers de dispositivo e o sistema de arquivos, convertendo leituras e gravações em LBAs no dispositivo de bloco virtual para um ou mais outros dispositivos de bloco. Sim, um LVM pode ser um dispositivo de bloco virtual e você pode ter uma cascata deles.