Tipos de sistemas de arquivos Linux e seus recursos. Arquivo e quebra o sistema de arquivos do sistema de arquivos ext2 3

Agora descrevemos o sistema de arquivos do disco mais popular Linux - ext2. A primeira versão do Linux usou o sistema de arquivos Minix 1, que tinha nomes de arquivos curtos e o tamanho máximo de arquivo 64 MB. O sistema de arquivos Minix 1 foi eventualmente substituído pelo primeiro sistema de arquivos extended ext, que permitiu usar nomes de arquivos mais longos e tamanhos de arquivos maiores. Devido à sua baixa eficiência (no sentido de desempenho), o sistema EXT foi substituído por sua sequência EXT2, que ainda é amplamente utilizada.

A partição de disco com ext2 contém o sistema de arquivos com mostrado na Fig. 10.17 Layout. O bloco 0 não é usado pelo sistema Linux e contém um código de carga do computador. Após o bloco 0, a partição de disco é dividida em blocos de blocos (excluindo os limites dos cilindros de disco). Cada grupo é organizado da seguinte forma.


O primeiro bloco é superbloco (superbloco), que armazena informações sobre o layout do sistema de arquivos, incluindo o número de nós i-nós, o número de blocos de disco, o início da lista de blocos de disco gratuitos (geralmente é geralmente várias centenas de elementos ). Em seguida, segue o descritor de grupo contendo informações sobre a localização das matrizes de bits, o número de blocos gratuitos e nós i-nós no grupo, bem como o número de diretórios do grupo. Essas informações são importantes, uma vez que o sistema de arquivos Ext2 tenta distribuir os diretórios uniformemente em todo o disco.

Em matrizes de dois bits, blocos gratuitos e nós gratuitos são gravados (isso também é herdado do sistema de arquivos Minix 1 e distingue-o da maioria dos sistemas de arquivos UNIX, no qual a lista é usada para blocos gratuitos). O tamanho de cada matriz de bit é igual a um bloco. Com o tamanho do bloco 1 KB, este esquema limita o tamanho dos blocos blocos 8192 blocos e 8192 i-nós. O primeiro número é uma limitação real, e o segundo é praticamente não. Com blocos de 4 kb de números quatro vezes mais.

Então os próprios i-nós estão localizados. Eles são numerados de 1 para algum máximo. O tamanho de cada i-nó é de 128 bytes e descreve exatamente um arquivo. O i-nó contém informações da conta (incluindo toda a chamada de retorno, que simplesmente leva-a do i-nó), bem como uma quantidade suficiente de informações para determinar o local de todos os blocos de disco que contêm os dados do arquivo.

Seguindo os i-nós são blocos de dados. Todos os arquivos e diretórios são armazenados aqui. Se o arquivo ou diretório consistir em mais de um bloco, esses blocos não precisam ser contínuos no disco. Na verdade, os blocos de um arquivo grande são mais prováveis \u200b\u200bespalhados pelo disco.

Os i-nós correspondentes de catálogos estão espalhados por todos os grupos de blocos de disco. O EXT2 está tentando organizar arquivos comuns no mesmo bloco de blocos que o diretório pai e os arquivos de dados estão no mesmo bloco que o código-fonte i-nó (desde que haja espaço suficiente). Essa ideia foi emprestada do sistema de arquivos do sistema Berkeley Fast File (McKusick et al., 1984). Matrizes de bits são usados \u200b\u200bpara tomar decisões rápidas sobre a seleção

lugares para novos dados do sistema de arquivos.

Quando novos blocos de arquivo são destacados, o ext2 também faz com que uma seleção de preferência (preallocates) de vários blocos adicionais (oito) para o mesmo arquivo (para minimizar a fragmentação de arquivos devido a futuras operações de registro). Este esquema distribui o sistema de arquivos em todo o disco. Também tem bom desempenho (devido à sua tendência para localização relacionada e redução de fragmentação).

Para acessar o arquivo, você deve primeiro usar uma das chamadas do sistema Linux (como aberta) para a qual você deseja especificar o caminho para o arquivo. Este caminho desmontou, e os componentes de seus catálogos são extraídos dele. Se o caminho relativo for especificado, a pesquisa começa a partir do catálogo atual do processo, caso contrário - do diretório raiz. Em qualquer caso, o i-nó para o primeiro diretório é fácil de encontrar: No descritor de processo há um ponteiro para ele ou (no caso de um diretório raiz), ele é armazenado em um disco específico no disco.

O diretório permite que você use nomes de arquivos até 255 caracteres (Fig. 10.18). Cada diretório consiste em um determinado número de blocos de disco (para que o diretório possa ser gravado no disco Atomino). No diretório, elementos para arquivos e diretórios estão em uma ordem não fortificada (cada item segue diretamente o anterior). Os elementos não podem cruzar os limites dos blocos, portanto, no final de cada bloco de disco, geralmente há um número de bytes não utilizados.


Cada entrada de diretório na Fig. 10.18 consiste em quatro campos de comprimento fixo e um campo de comprimento variável. O primeiro campo é um número i-nó 19 para o arquivo colossal, 42 para o arquivo voluminoso e 88 para o diretório bigdir. A seguir, o campo Rec_len, que relata o tamanho de toda a entrada de diretório em bytes (possivelmente, juntamente com espaços reservados adicionais após o nome). Este campo é necessário para encontrar a próxima entrada (no caso quando o nome do arquivo for complementado por um número desconhecido de bytes). Na figura, este campo é indicado pela seta. Em seguida, há um campo de tipo de campo, um diretório, etc. O último campo de comprimento fixo contém o comprimento do nome do arquivo em bytes (8, 10 e 6 para este exemplo). Finalmente, o nome do arquivo vem no próprio byte zero e complementado a uma borda de 32 bits. Bytes adicionais de caixa de correio podem seguir.

Na Fig. 10.18, B é mostrado o mesmo diretório após o elemento para o voluminoso foi removido. Tudo o que é feito no catálogo - aumenta o número no tamanho de gravação do arquivo colossal anterior e os bytes de entrada do diretório para o arquivo volumoso remoto são transformados nos primeiros enchimentos de registro. Posteriormente, esses bytes podem ser usados \u200b\u200bpara gravar ao criar um novo arquivo.

Como a pesquisa em diretórios é feita linearmente, a busca de um registro que está no final de um diretório grande pode demorar muito tempo. Portanto, o sistema suporta diretórios de cache para os quais o acesso foi feito recentemente. A pesquisa no cache é feita pelo nome do arquivo e, se for encontrada, então a pesquisa linear cara não é mais necessária. O objeto de dentry é inserido no cache dos elementos de diretório para cada um dos componentes do caminho e (através de seu i-node) é pesquisar no diretório dos itens de caminhos subseqüentes (até que o arquivo I-nó real seja encontrado).

Por exemplo, para encontrar o arquivo especificado pelo caminho absoluto (como / USR / AST / FILE), as etapas a seguir devem ser executadas. Primeiro de tudo, o sistema encontra o diretório raiz, que geralmente usa um i-nó com o número 2 (especialmente quando o i-nó com o número 1 é reservado para trabalhar com blocos ruins). Coloca o elemento correspondente no cache dos itens do diretório (para pesquisas futuras de catálogo raiz). Ele é então procurando por uma string "USR" no diretório raiz para obter o número do i-nó para o diretório / usr (que também é inserido no cache dos elementos do diretório). Este i-nó é então lido e blocos de disco são recuperados dele, para que você possa ler o diretório / usr e pesquisar a linha AST nela. Depois que o elemento correspondente for encontrado, você pode definir o número do i-nó para o / USR / AST. Tendo este número i-nó, você pode lê-lo e encontrar os blocos de diretório. Finalmente, estamos procurando por "Arquivo" e encontrar o número de seu nó i. Assim, o uso de um caminho relativo não é apenas mais conveniente para o usuário, mas também reduz a quantidade de operação para o sistema.

Se o arquivo estiver disponível, o sistema recuperará o número do i-nó e usá-lo como um índice da tabela i-nó (no disco) para procurar o i-nó correspondente e lê-lo na memória. Este i-nó é colocado na tabela I-Nó (tabela I-Nó) - a estrutura de dados do kernel, que contém todos os i-nós para os arquivos e diretórios atualmente abertos. O formato de i-nós deve conter (no mínimo) todos os campos que retornam a chamada de chamada do sistema para que a chamada Stat possa funcionar (consulte a Tabela 10.10). Na guia. 10.13 Mostra alguns dos campos de estrutura do i-nó suportados no sistema de arquivos Linux. A estrutura real do i-nó contém muito mais campos, já que a mesma estrutura é usada para representar diretórios, dispositivos e outros arquivos especiais. A estrutura do i-nó também contém também reservada para uso futuro do campo. A história mostrou que os bits não utilizados permanecem longos sem assuntos.

Agora vamos ver como o sistema lê o arquivo. Você se lembra de que a chamada típica para o procedimento da biblioteca inicia a chamada do sistema lê da seguinte forma:

n \u003d leitura (fd, buffer, nbytes);


Quando o kernel recebe controle, então tudo o que ele pode iniciar - esses três parâmetros e informações em suas tabelas internas (relacionadas ao usuário). Um dos elementos dessas tabelas internas é uma matriz de descritores de arquivos. É indexado por descritores de arquivos e contém um elemento para cada arquivo aberto (para algum valor máximo, o padrão é geralmente 32).

A ideia é começar com este descritor de arquivo e terminar a bolha correspondente. Vamos olhar para um esquema completamente possível: Vamos colocar o ponteiro Pozel para a tabela de descritores de arquivo. Apesar da simplicidade, este método (infelizmente) não funciona. O problema é o seguinte. Com cada descritor de arquivo, um ponteiro deve ser conectado no arquivo que define o byte no arquivo da qual a próxima operação de leitura ou gravação começará. Onde este ponteiro deve ser armazenado? Uma opção é colocá-la na tabela de ônibus. No entanto, essa abordagem não poderá funcionar se vários processos que não estiverem conectados simultaneamente abrirão o mesmo arquivo, uma vez que cada processo deve ter seu próprio ponteiro.

A segunda solução da solução é colocar o ponteiro nos descritores de tabela. Nesse caso, cada arquivo que abre o processo tem sua própria posição no arquivo. Infelizmente, esse esquema também não funciona, mas a causa de fracasso neste caso não é tão óbvia e está relacionada à natureza do compartilhamento de arquivos no sistema Linux. Considere o script 5, consistindo de dois comandos (P1 e P2), que devem ser executados por sua vez. Se o script for chamado pela linha de comando

espera-se que o comando P1 escreva sua saída para o arquivo X e, em seguida, o comando P2 também irá escrever sua saída para o arquivo X, a partir do local onde o comando P1 parou.

Quando o shell inicia o processo P1, o arquivo X será primeiro vazio, então o comando P1 simplesmente começa a escrever ao arquivo na posição 0. No entanto, quando P1 terminar seu trabalho, um determinado mecanismo precisará que garanta que o processo P2 Veja como uma posição inicial não 0 (e é assim que acontecerá se a posição nos descritores de arquivos no arquivo estiver na tabela), e o valor no qual o PI parou.

A maneira como é feita é mostrada na Fig. 10.19. O foco é para inserir a nova tabela - a tabela de descrição de arquivo aberto (Abrir a tabela Descrição do arquivo) - entre a tabela de descritores de arquivos e a tabela I-nós e armazenar o ponteiro no arquivo (bem como o bocado de leitura / gravação) . Na figura, o processo pai é o shell, e a filha é primeiro o processo PI e, em seguida, o processo P2. Quando o shell cria o processo PI, sua estrutura de usuário (incluindo a tabela de descritores de arquivo) é uma cópia exata da mesma estrutura de membrana, de modo que ambos contenham os ponteiros à mesma tabela de descrição de arquivos abertos. Quando o processo conclui seu trabalho, o descritor do arquivo shell continua especificando a tabela de descrição de arquivos abertos, que contém a posição de posição P1 no arquivo. Quando o shell cria o processo P2, o novo processo filho herda automaticamente a posição no arquivo, enquanto não é um novo processo, nem o shell é obrigado a conhecer o valor atual dessa posição.


Se algum processo estranho abre o arquivo, ele receberá sua própria entrada na tabela Descrição da tabela com sua posição no arquivo, ou seja, é necessário. Assim, a tarefa da tabela de descrição de arquivo aberto é permitir que os processos pai e filho compartilhem um ponteiro no arquivo, mas para processos estrangeiros alocar ponteiros pessoais.

Então (retornando ao problema de ler a leitura de leitura), mostramos como a posição no arquivo e no nó I são determinadas. O i-nó contém endereços de disco dos primeiros 12 blocos de arquivos. Se a posição no arquivo cair em seus primeiros 12 blocos, o bloco de arquivos desejado é lido e os dados serão copiados para o usuário. Para arquivos, o comprimento de que excede 12 blocos, o i-nó contém um endereço de disco do bloco indireto único (bloco indireto único) (Fig. 10.19). Este bloco contém endereços de disco de blocos de disco adicionais. Por exemplo, se o tamanho do bloco for de 1 kb, e o endereço de disco levar 4 bytes, a unidade indireta única pode armazenar até 256 endereços de disco. Este esquema permite suportar arquivos de até 268 KB.

ext2. (também chamado como ext2fs.) - Segundo sistema de arquivos estendidos(O segundo sistema de arquivos estendido) é um sistema de arquivos construído no kernel Linux. O criador e o desenvolvedor EXT2 é o cartão Remy. O sistema de arquivos ext2 foi construído por ele em troca do antigo, a versão anterior - ext.

De acordo com esses indicadores como velocidade e desempenho, este sistema de arquivos pode servir como referência. Isso é informado sobre os resultados dos testes de desempenho do sistema de arquivos. Por exemplo, em testes para a velocidade de leitura e escrita consistentes, que conduziu o Centro Técnico da Dell, o sistema de arquivos EXT2 excede o ext3 e é inferior na velocidade de leitura apenas mais moderno ext4.

A principal desvantagem do EXT2 é que não é um sistema de arquivos de diário. No entanto, essa desvantagem foi eliminada no próximo sistema de arquivos - ext3.

o EXT2 é usado em cartões flash e drives de estado sólido (SSD), uma vez que a falta de registro no diário é uma vantagem ao trabalhar com unidades com restrições sobre o número de ciclos de gravação.

A história da criação de ext2.

No momento do desenvolvimento rápido do sistema Linux, ele usou o sistema de arquivos Minix. Foi bastante alta estabilidade, mas foi de 16 bits. Como resultado, existia uma limitação estrita em 64 MB à seção. Além disso, houve um limite no comprimento máximo do nome do arquivo, que foi de 14 caracteres.

Essas restrições no agregado foram a razão para o desenvolvimento de um "sistema de arquivos aprimorado" (daí o termo " Sistema de Arquivo Estendido »). Ela tinha uma tarefa para resolver dois problemas importantes do Minix. O novo sistema de arquivos foi publicado em abril de 1992. Foi ext, expandiu o limite no tamanho do arquivo para 2 gigabytes e instalou o comprimento do limite do nome do arquivo em 255 caracteres.

No entanto, apesar do sucesso de um novo sistema de arquivos, no entanto, permaneceu bastante de problemas não resolvidos. Por exemplo, não houve suporte para acesso separado, não havia carimbos de tempo de modificação de dados. A necessidade de resolver essas tarefas e serviu como o motivo para criar a próxima versão do sistema de arquivos extensa ext2 (" Segundo sistema de arquivos estendidos »). O EXT2 foi desenvolvido em janeiro de 1993, também implementa as correspondentes listas de controle de acesso ACL e os atributos estendidos do arquivo.

Organização lógica ext2.

O gráfico de hierarquia de diretório EXT2 é apresentado na forma de uma rede. Isso se deve ao fato de que um arquivo pode inserir vários diretórios imediatamente.

Todos os tipos de arquivos têm nomes simbólicos. Em sistemas de arquivos organizados hierarquicamente, três tipos de nomes são usados: simples, composto e relativo. Então, em ext2. No caso de um nome simples, a restrição é que seu comprimento não deve exceder 255 caracteres, além disso, o símbolo nulo e a barra devem estar presentes no nome.

Quanto ao símbolo nulo, as restrições estão associadas à representação de linhas na linguagem SI, no caso de um símbolo de barra, tudo é que é usado como um caractere divisível entre diretórios.

O nome completo é uma cadeia de nomes simbólicos simples de todos os diretórios através dos quais o caminho da raiz está sendo executado para este arquivo. No ext2, o arquivo pode inserir vários diretórios, isso significa que ele pode ter vários nomes completos (um arquivo é alguns nomes completos). Mas de qualquer maneira, o nome completo define o arquivo.

ATRIBUTOS EXT2:

  • digite e direitos de acesso ao arquivo,
  • proprietário, grupo de acesso,
  • informações sobre operações permitidas,
  • tempo de criação, última data de acesso, data de última alteração e último tempo de remoção,
  • tamanho atual do arquivo
  • especificação de arquivo:
    • arquivo regular
    • catálogo,
    • o dispositivo orientado a bytes do dispositivo,
    • dispositivo orientado para o bloco de arquivos,
    • canal nomeado
    • link simbólico
  • número de blocos ocupados,
  • outras

Os atributos de arquivo estão contidos em tabelas especiais e não em diretórios, pois podem ser em sistemas de arquivos simples. Como resultado, o diretório tem uma estrutura muito simples que consiste em duas partes: o número do descritor de índice e o nome.

Organização física ext2.

Estrutura da seção de disco

Como parte do EXT2, o seguinte pode ser distinguido:

  • blocos e blocos de blocos;
  • descritor de índice;
  • superbloco.

Todo o espaço de partição de disco é dividido em blocos fixos, bloqueia o tamanho múltiplo do setor (1024, 2048, 4096 ou 8192 bytes). O tamanho do bloco é especificado ao criar um sistema de arquivos na seção do disco. Todos os blocos são atribuídos números de sequência. Para reduzir a fragmentação e o número de movimentos das cabeças do disco rígido, ao ler matrizes de dados grandes, os blocos são combinados em grupos.

O conceito básico do sistema de arquivos é um descritor de índice (também chamado inode. - nó de informação.). Esta é uma estrutura especial contendo informações sobre atributos e localização do arquivo físico. Os descapstrutores de índice são combinados em uma tabela contida no início de cada bloco de blocos. O Superblock é o elemento principal do sistema de arquivos EXT2. Ele contém informações gerais sobre o sistema de arquivos. O Superblock está localizado em 1024 bytes desde o início da seção. A integridade do superbloco determina a funcionalidade do sistema de arquivos. O sistema operacional cria várias cópias de backup do superbloco - em caso de danos à partição. No bloco seguinte depois de um superbloco há uma tabela de descritor global - uma descrição de grupos de blocos na forma de uma matriz com informações gerais sobre todos os grupos de blocos.

Blok Group.

Todos os blocos de blocos EXT2 são divididos em grupos. Para cada grupo, uma entrada separada é criada na tabela de descritor global. Esta entrada armazena os parâmetros principais, assim: o número do bloco em bitmaps e tabelas, o número de blocos gratuitos no grupo, o número de descritores de índice contendo diretórios.

Bit Bit Blok. - Este é um sistema no qual cada bit informa se o arquivo correspondente a ele tem um arquivo. Se o bit for 1, o bloco está ocupado. Uma função semelhante é realizada por um bitmap de descritores de índice: mostra quais descritores de índice estão ocupados e quais não são. O kernel do Linux tenta distribuir uniformemente o diretório de inode em grupos e arquivos inode - mover para um grupo com um catálogo de pais. O local restante aparece na tabela enquanto os dados são atribuídos a armazenar arquivos.

Sistema de endereçamento de dados.

O sistema de endereçamento de dados é um dos componentes mais sérios e principais do sistema de arquivos. Graças a ele, o arquivo desejado está entre os muitos blocos vazios ou ocupados no disco.

o EXT2 aplica o seguinte esquema de endereçamento de bloco de arquivos. Para armazenar o endereço do arquivo, 15 campos são isolados, cada um deles consiste em 4 bytes. Se o arquivo se encaixa em 12 blocos, os números dos respectivos clusters estão listados nos primeiros doze endereços. Se o tamanho do arquivo exceder a 12 blocos, o campo a seguir contiverá o endereço de cluster no qual os números dos seguintes blocos de arquivo podem ser localizados. Então, o décimo terceiro campo é usado para endereçamento indireto.

Com o tamanho máximo do bloco em 4096 bytes, o cluster correspondente ao 13º campo pode conter até 1024 números dos seguintes blocos de arquivos. Se o tamanho do arquivo exceder 12 blocos de 1224, o 14º campo será usado, no qual o endereço de cluster que contém 1024 números de cluster está localizado, cada um dos quais se refere ao bloco de arquivos 1024. Já existe um abordagem indireta dupla. E se o arquivo incluir mais de 12 blocos + 1024 + 1048576, o último campo da 15ª para endereçamento de indireto triplo é aplicado.

Esse sistema de endereçamento permite que você tenha arquivos, mais de 2 TB com um tamanho máximo de bloco em 4096 bytes.

Se você tiver dois sistemas operacionais, o Windows e o Linux estão instalados, provavelmente gostaria de estar contido nas seções do sistema operacional gratuito diretamente no Windows sem recarregar o computador.

Infelizmente, o suporte das seções do sistema operacional Linux no Windows não é fornecido. E em vão. Parece-me que pode ser um belo gesto da Microsoft.

A essência do problema é que o Windows usa o sistema de arquivos NTFS, e o Linux tem sua própria maneira de organizar arquivos, sistema de arquivos estendido, a versão mais recente, cuja seqüência número 4.

O Linux é mais amigável para seus usuários, em vez de sua irmã comercial: no Linux, o padrão é suportado pelo sistema de arquivos do Windows NTFS. Claro, você não poderá instalar o Linux na seção NTFS, mas pode ler e gravar dados disso.

Ext2 se.

O EXT2 IFS suporta versões do Windows NT4.0 / 2000 / XP / 2003 / VISTA / 2008 de X86 e X64 e permite que você visualize o conteúdo das seções do Linux EXT2 e também pode gravar nelas. O utilitário define o driver do sistema EXT2FS.SYS, que expande os recursos do Windows e inclui suporte completo para ext2: As partições EXT2 são atribuídas as letras de discos e os arquivos e pastas são exibidos neles nas diálogas de todos os aplicativos, por exemplo, , no explorador.

Ext2 fsd.

EXT2 FSD é um driver gratuito para sistemas Windows (2K / XP / Vista / 7 versões x86 e x64). Como o utilitário anterior, que, em sua essência, também é o driver, inclui suporte total para o sistema de arquivos EXT2 no Windows.

LTOOLS - Um kit de utilitário de linha de comando que permite ler e gravar dados em / para Linux EXT2, EXT3 e REISERF (Sistemas de Arquivos Linux padrão) do DOS ou Windows.

Há uma versão do programa com uma concha gráfica (escrita em Java) - LToolsgui, bem como uma versão com uma casca gráfica escrita.

Ext2read.

Para a sobremesa como sempre o mais delicioso.

Ext2read é um utilitário com base em um arquivo gerente, que permite visualizar e gravar nas seções EXT2 / EXT3 / EXT4. Suporta LVM2 e que o distingue de outros programas desta revisão, o sistema de arquivos EXT4. Suporte incorporado para diretórios de cópia recursivos.

E aqui está a segunda sobremesa. Inicialmente, foi dito que um bom gesto da Microsoft seria incluído suporte para seções do Linux no Windows por padrão.

O gesto ainda era feito no 20º aniversário do Linux. Veja você mesmo.

Isso é tudo. Obrigado por atenção. Eu vou lutar de volta dos besouros. Sua primavera é muuuito muito. 🙂.

Vladimir Miskov.

Arquitetura do sistema de arquivos ext2

O artigo discute a estrutura lógica do sistema de arquivos EXT2 do sistema operacional Linux.

Componentes básicos do sistema de arquivos EXT2

Como em qualquer sistema de arquivos UNIX, os seguintes componentes podem ser distinguidos como parte do sistema de arquivos EXT2:

  • blocos e blocos de blocos;
  • nó de informação;
  • superbloco.

Blocos e blocos de blocos

Todo o espaço de partição de disco é dividido em blocos de tamanho fixo, tamanho do setor múltiplo - 1024, 2048 e 4096 bytes. O tamanho do bloco é indicado ao criar um sistema de arquivos na seção Disco Rígido. Um tamanho menor de bloco economiza espaço em um disco rígido, mas também limita o tamanho máximo do sistema de arquivos. Todos os blocos têm números de sequência. Para reduzir a fragmentação e o número de movimentos das cabeças do disco rígido, ao ler grandes matrizes de dados, os blocos são combinados em grupos.

Nó de informação

O conceito básico do sistema de arquivos é o nó de informação, nó de informação ou inode. Esta é uma estrutura especial que contém informações sobre atributos e localização do arquivo físico. Os atributos do arquivo são seu tipo (arquivo normal, diretório, etc.), direitos de acesso, identificador de proprietário, tamanho, tempo de criação. Informações sobre o local físico é uma seqüência de números de bloco absolutos contendo dados de arquivos.

Superbloco

O Superblock é o elemento principal do sistema de arquivos EXT2. Ele contém as seguintes informações do sistema de arquivos (lista incompleta):

  • o número total de blocos e inode no sistema de arquivos;
  • o número de blocos gratuitos e inode no sistema de arquivos;
  • tamanho do bloco do sistema de arquivos;
  • número de blocos e inode no grupo;
  • inode de tamanho;
  • identificador de sistema de arquivos;
  • número do primeiro bloco de dados.

Em outras palavras, este é um número de bloco contendo superbloco. Esse número é sempre igual a 0 se o tamanho do bloco do sistema de arquivos for maior que 1024 bytes e 1, se o tamanho do bloco for 1024 bytes.

A funcionalidade do sistema de arquivos depende diretamente da integridade do superbloco. O sistema operacional cria várias cópias de backup do superbloco para poder restaurá-lo em caso de dano. A cópia principal está localizada no deslocamento de 1024 bytes desde o início da seção no qual o sistema de arquivos é criado (os primeiros 1024 bytes são reservados para o bootloader do sistema operacional).

As primeiras versões do sistema de arquivos EXT2 criou cópias do superbloco no início de cada bloco de blocos. Isso levou a uma grande perda de espaço em disco, então mais tarde, o número de cópias de backup do superbloco foi reduzido, e grupos de blocos de 0, 1, 3, 5 e 7 foram alocados para sua colocação.

Formato do Grupo Blok.

O diagrama estrutural generalizado do sistema de arquivos EXT2 é apresentado na FIG. 1.

Quase todos os grupos de blocos têm o mesmo formato. Em cada grupo, além dos blocos de informação, informações sobre o emprego de blocos e grupos de inode na forma de um bitmap são armazenados. O bloco de blocos 0 também inclui superblocks e descritores de tabela dos grupos que consideraremos abaixo.

O mapa de blocos de emprego geralmente está localizado no primeiro bloco do grupo. Se uma cópia de backup estiver presente no grupo, o bitmap está localizado no segundo bloco do grupo. O tamanho do bitmap é um bloco. Cada bit deste cartão indica o estado do bloco. Se o bit estiver definido (1), o bloco estiver ocupado se o bloco for redefinido (0) - o bloco é gratuito. O primeiro bloco do grupo corresponde ao bit zero do cartão, o segundo bloco - o primeiro bit, etc.

Inode, localizado dentro do mesmo grupo, são coletados na tabela. No grupo de inode do mapa de emprego de mordida, cada bit caracteriza o status do elemento na tabela de grupo INODE.

Cada bloco de blocos é descrito usando o descritor de grupo de blocos. Um identificador de grupo é uma estrutura que contém informações sobre os endereços do bitmap dos blocos dos blocos, o bitmap Occupado de inode e a tabela de inode do grupo correspondente. Todos os descritores de grupo são coletados na tabela de descritores de grupo, que é armazenado em um grupo de blocos 0. Apenas como para um superbloco, o sistema operacional cria cópias de backup dos descritores de tabela.

Algoritmo de leitura de arquivos

Cada inode, assim como o bloco, tem um número de seqüência, exclusivo dentro do sistema de arquivos e contém informações somente sobre o arquivo único. Assim, para acessar o conteúdo do arquivo, você precisa saber o número da seqüência do inode correspondente correspondente a ele.

Como mencionado acima, informações sobre o local do arquivo físico estão contidas no inode. Esta informação é uma sequência de números de bloco de 32 bits contendo dados de arquivo (Fig. 1). Os primeiros 12 números são links diretos para blocos de informações (número de blocos diretos). O número 13 é um link indireto (número de blocos indiretos). Ele contém o endereço do bloco no qual os endereços de blocos de informação são armazenados. O 14º quarto é um link indireto duplo (número de blocos duplos), o 15º número é um link indireto triplo (número de blocos triplos).

O nome do arquivo no inode não está incluído, definindo a conformidade entre os nomes de arquivos e os números de sequência de inode são realizados através dos diretórios.

Catálogos.

Arquivos em sistemas UNIX e POSIX são armazenados em um sistema de arquivos hierárquicos da árvore. A raiz do sistema de arquivos é o diretório raiz indicado pelo símbolo "/". Cada nó intermediário na árvore do sistema de arquivos é um diretório. Os vértices finais da árvore do sistema de arquivos são diretórios ou arquivos vazios. O nome do caminho absoluto do arquivo consiste nos nomes de todos os diretórios que levam ao arquivo especificado, começando com o diretório raiz. Assim, o nome da faixa /home/test.file significa que o arquivo test.file está localizado no diretório inicial, que, por sua vez, está localizado no catálogo raiz "/".

Catálogo, bem como o arquivo, é descrito usando inode. O conteúdo do diretório é uma matriz de registros, cada um deles contém informações sobre o arquivo que está "dentro" do diretório atual.

O registro do diretório tem o seguinte formato:

  • arquivo de inode numérico de sequência;
  • comprimento de gravação em bytes;
  • nome do arquivo;
  • o comprimento do nome do arquivo.

A pesquisa por um arquivo inode sempre inicia com o diretório raiz. Por exemplo, para obter o número de sequência de inode no diretório raiz, o sistema operacional deve obter o conteúdo do diretório raiz, encontrá-lo nele com o nome desse arquivo e remover o número do arquivo de inode deste registro.

Os vários números de inode são reservados pelo sistema de arquivos, sua lista está contida no arquivo de cabeçalho:

* Números especiais de inode

#Define ext2_bad_ino 1 / * blocos ruins inode * /

#Define ext2_root_in 2 / * root inode * /

#Define ext2_acl_idx_in 3 / * ACL Inode * /

#Define ext2_acl_data_ino 4 / * ACL Inode * /

#Define ext2_boot_loader_ino 5 / * boot loader inode * /

#Define ext2_undel_dir_ino 6 / * diretório undelete inode * /

Para gravar o diretório raiz, o INODE é reservado no número 2 (Inode raiz). Este inode está no bloco de blocos 0 e leva a segunda posição na tabela de inode deste grupo. O número do primeiro inode não-surpreendente é armazenado no superbloco.

Depois de determinar o número de sequência de inode, o kernel calcula o número do grupo em que este inode está localizado e sua posição na tabela de grupo Inode. Considerando inode a partir desta posição, o sistema operacional recebe informações completas do arquivo, incluindo endereços de bloco no qual o conteúdo do arquivo é armazenado.

O número do bloco no qual está localizado a inode é calculado pela fórmula:

grupo \u003d (inode_num - 1) / inodes_per_group

onde:

  • grupo.- o número desejado do bloco de bloco;
  • inode_num. - o número de seqüência inode definindo o arquivo;
  • inodes_per_group - O número de inode no grupo (esta informação está no superbloco).

A posição inode na tabela de grupo Inode é determinada pela fórmula:

index \u003d (inode_num - 1)% inodes_per_gupa

onde o índice é uma posição inode na tabela.

Considere um exemplo de obtenção do conteúdo do arquivo test.file localizado no diretório raiz. Para ler o arquivo /test.file:

  • na matriz dos registros do diretório raiz, encontre uma entrada sobre este arquivo;
  • extraia o número de seqüência do arquivo INODE, calcule o número do grupo em que esse inode está localizado;
  • a partir do descritor deste grupo, você extraia o endereço da tabela de grupo INODE;
  • calcule a posição de inode nesta tabela;
  • leia o arquivo inode;
  • de inode para extrair os endereços de bloco de endereços e ler as informações nesses blocos.

Na Fig. 2 Detalhes Mostrar as leituras do arquivo / teste. Arquivo.

    Etapas 1-6 - lendo o catálogo de raiz:

  1. Do grupo de blocos 0, os descritores de tabela são lidos.
  2. Na tabela de descritores de tabela, o grupo de blocos 1 é recuperado e o endereço do grupo INODE é lido a partir dele.
  3. Do grupo de blocos 0 lê a tabela de inode.
  4. O número de sequência de inode do diretório raiz é fixo e igual a 2, portanto, o segundo elemento é lido no grupo INODE 0, que contém o endereço do bloco com o conteúdo do diretório raiz. Suponha que esta unidade esteja localizada no bloco de A. Blocks.
  5. Do grupo de blocos A é lido por um bloco contendo os registros do diretório raiz.
  6. Um registro da entrada denominada "Test.File" é pesquisada. Se tal registro for encontrado, o arquivo Inode Series "Test.file" será recuperado a partir dele.
  7. Ao definir o número de inode, você pode acessar os blocos de informações do arquivo (etapas 7-11):

  8. O número do grupo é calculado em que este inode está localizado e sua posição na tabela de grupo INODE (suponha que o número do grupo seja igual a B e a posição na tabela - x).
  9. Na tabela de descritores de grupo, remova o descritor de grupo de porções B e o endereço da tabela de inode deste bloco de blocos é lido a partir dele.
  10. A tabela de inode é lida do grupo B Block.
  11. Na tabela de inode dos blocos de blocos B lê inode, localizado na posição X.
  12. A partir do inode de leitura, os endereços de bloco com o arquivo de conteúdo / TEST.File são recuperados e as informações são lidas a partir do bloco com o endereço especificado.

Implementação de software do algoritmo de leitura de arquivos

Dados de origem: Há uma partição do disco rígido no qual o sistema de arquivos EXT2 é criado. Esta seção corresponde ao arquivo dispositivo / dev / hDA3. No diretório raiz da seção, o subdiretório doméstico é criado e contém o arquivo test.file do seguinte conteúdo:

Chotrus viveria no sul?

Sim, mas um exemplo falso!

1234567890-=

Não pense ruim, não é absurdo, mas um exercício de teste do curso de treinamento de telegrafistas nas tropas da comunicação da antiga URSS!

Atenção! Um ponto importante deve ser levado em conta. O arquivo criado não será imediatamente gravado no disco e primeiro cair no buffer de disco. A tentativa de obter imediatamente o conteúdo do arquivo de acordo com o algoritmo acima não levará a nada, uma vez que as informações sobre este arquivo não estão fisicamente no disco. É necessário "forçar" o sistema a gravar o buffer de disco no disco. A maneira mais fácil de fazer isso é realizar uma operação de reinicialização. Portanto, após o arquivo ser criado, reinicie o sistema.

Nossa tarefa está usando o arquivo dispositivo / dev / hDA3, para ler o arquivo /home/test.file usando o método de acesso direto aos seus blocos de informação.

Considere a implementação do programa do módulo que executa esta operação.

Arquivos de cabeçalho:

#Incluir.

#Incluir.

#Incluir.

#Incluir.

#Incluir.

#Incluir.

O arquivo de cabeçalho define os tipos estruturais que descrevem os componentes principais do sistema de arquivos ext2 - superbloco, o descritor de grupo de blocos, o nó de informação, a entrada de diretório.

Considere brevemente os campos incluídos em cada uma dessas estruturas:

  1. Estrutura ext2_super_block Superblock:
    • __U32 s_inodes_count.- o número total de inode no sistema de arquivos;
    • __U32 s_blocks_count.- o número total de blocos no sistema de arquivos;
    • __U32 s_free_blocks_count.- o número de blocos gratuitos;
    • __U32 s_free_inodes_count.- o número de inode grátis;
    • __U32 s_first_data_block.- Número do primeiro bloco de dados (o número do bloco em que o superbloco está localizado);
    • __U32 s_log_block_size. - Este valor é usado para calcular o tamanho do bloco. O tamanho do bloco é determinado pela fórmula: tamanho do bloco \u003d 1024<< s_log_block_size;
    • __U32 s_blocks_per_group - o número de blocos no grupo;
    • __U32 s_inodes_per_group - o número de inode no grupo;
    • __U16 s_magic. - Identificador do sistema de arquivos ext2 (assinatura 0xef53);
    • __U16 s_inode_size. - o tamanho do nó de informação (inode);
    • __U32 s_first_ino. - Número do primeiro inode não pesquisado.
  2. Estrutura ext2_group_desc Group Descriptor Design Estrutura:
    • __U32 bg_block_bitmap.- Bitmap de emprego dos blocos do grupo;
    • __U32 bg_inode_bitmap.- Mapa de Jornal de Emprego Inode Group;
    • __U32 bg_inode_table. - Endereço da tabela de inode.
  3. Estrutura EXT2_INODE Informação da estrutura do nó:
    • __U16 I_mode é o tipo de arquivo e direitos de acesso a ele. Tipo de arquivo Definir bits 12-15 deste campo:
      • 0xa000.- link simbólico;
      • 0x8000.- Arquivo normal;
      • 0x6000.- Bloquear o dispositivo de bloco;
      • 0x4000.- Catálogo;
      • 0x2000.- Arquivo de dispositivo simbólico;
      • 0x1000.- Canal FIFO.
    • __U32 I_size. - tamanho em bytes;
    • __U32 I_atime.- o último tempo de acesso ao arquivo;
    • __U32 i_ctime. - Tempo de criação de arquivos;
    • __U32 i_mtime.- o tempo da última modificação;
    • __U32 i_blocks. - o número de blocos ocupados pelo arquivo;
    • __U32 i_block. - Endereços de blocos de informação (incluindo todos os links indiretos).
  4. O valor EXT2_N_BLOCKS é definido no arquivo:

    * Constantes em relação aos blocos de dados

    #Define ext2_ndir_blocks 12.

    #Define ext2_ind_block ext2_ndir_blocks.

    #define ext2_dind_block (ext2_ind_block + 1)

    #Define ext2_tind_block (ext2_dind_block + 1)

    #Define ext2_n_blocks (ext2_tind_block + 1)

  5. Estrutura ext2_dir_entry_2 Estrutura de entrada de diretório:
  6. #Define ext2_name_len 255.

  • __U32 Inode. - Arquivo de número inode;
  • __U16 rec_len. - Comprimento de gravação do diretório;
  • __U8 Name_Len.- o comprimento do nome do arquivo;
  • nome do personagem.nome do arquivo.

Definimos o nome da seção na qual o sistema de arquivos é criado, estruturas globais e variáveis.

#Define part_name "/ dev / hda3"

estrutura ext2_super_block sb;

/ * buffer para armazenar descritores de tabela * /

char não assinado Buff_Grp;

lustre de char não assinado; / * Buffer de informações * /

int indev; / * Punho de arquivo de dispositivo * /

int blksize; / * Tamanho do bloco do sistema de arquivos * /

Definimos várias funções que precisamos trabalhar:

Função de leitura superbloco:

void read_sb ()

Memset (& sb, 0,1024);

Somos deslocados por 1024 bytes desde o início da seção e ler o superbloco para a estrutura da estrutura ext2_super_block sb:

If (Lseek (Indev, 1024.0)< 0) {

Perror ("lseek");

Saída (-1);

Se (Leia (Indev, Char * & SB, SizeOf (SB))< 0) {

Perror ("lido");

Saída (-1);

Verifique o identificador do sistema de arquivos:

If (sb.s_magic! \u003d Ext2_super_magic) (

Printf ("tipo de sistema de arquivo desconhecido!");

Saída (-1);

O valor de ext2_super_magic é definido no arquivo de cabeçalho.

Exibe informações sobre o sistema de arquivos, que está localizado no superbloco:

printf ("Superblock Informações -----------");

Printf ("inodes contagem -% u", sb.s_inodes_count);

Printf ("blocks contagem -% u", sb.s_blocks_count);

Printf ("tamanho de bloco -% u", 1024<< sb.s_log_block_size);

Printf ("primeiro inode -% d", sb.s_first_ino);

Printf ("magia - 0x% x", sb.s_magic);

Printf ("tamanho inode -% d", sb.s_inode_size);

Printf ("inodes por grupo -% u", sb.s_inodes_per_group);

Printf ("Blosks por grupo -% u", sb.s_blocks_per_group);

Printf ("primeiro bloco de dados -% u", sb.s_first_data_block);

Retornar;

Descritores de tabela de leitura de função:

vazio read_gdt ()

Calcule o tamanho do bloco do sistema de arquivos:

Blksize \u003d 1024.<< sb.s_log_block_size

A tabela de descritores de grupo está localizada em um bloco, que está localizada imediatamente atrás do primeiro bloco de dados (para superbloco).

Leia a tabela:

If (lseek (Indev, (sb.s_first_data_block + 1) * blksize, 0)< 0) {

Perror ("lseek");

Saída (-1);

Se (leia (Indev, Buff_Grp, blksize)< 0) {

Perror ("lido");

Saída (-1);

Retornar;

Inode conteúdo recurso pelo seu número:

vOID GET_INODE (int inode_num, struct ext2_inode * in)

Recursos de entrada da função - o número da sequência de inode e a estrutura do struct ext2_inode.

Estrutura ext2_group_desc d'd;

Grupo U64, Índice, POS;

Calcule o número do grupo de blocos no qual o inode está localizado com o número de seqüência INODE_NUM:

Grupo \u003d (inode_num - 1) / sb.s_inodes_per_group;

A partir dos descritores da tabela, remova o descritor de grupo e copie-o para a estrutura Struct Etur2_group_desc GD:

Memset ((void *) & gd, 0, sizeof (gd));

Memcpy ((void *) & gd, buff_grp + (grupo * (SizeOf (GD))), SizeOf (GD));

Calcule a posição de inode com o número de seqüência INODE_NUM na tabela de inode do grupo do grupo e leia este inode na estrutura do struct ext2_inode:

index \u003d (inode_num - 1)% sb.s_inodes_per_group;

Pos \u003d ((__U64) gd.bg_inode_table) * blksize + (index * sb.s_inode_size);

Pread64 (Indev, em, sb.s_inode_size, pos);

Retornar;

Função de leitura do bloco de dados:

void Read_Iblock (estrutura ext2_inode * in, int blk_num)

U64 POS;

Parâmetros de função de entrada - Estrutura de inode e número de bloco (significado número da sequência do bloco de endereços localizada em inode).

Calcule o deslocamento para o bloco de informações na seção e leia esta unidade para o lustre do buffer global:

Pos \u003d ((__u64) em-\u003e i_block) * blksize;

Pread64 (Indev, Buff, Blksize, Pos);

Retornar;

Função para receber o conteúdo do catálogo raiz:

void get_root_dentry ()

Estrutura ext2_inode em;

O número de sequência de inode do diretório raiz é conhecido, portanto, obtemos o conteúdo do inode do diretório raiz e leia seu conteúdo no buffer:

get_inode (ext2_root_ino, & in);

Read_iblock (& \u200b\u200bem, 0);

O buffer buff conterá o conteúdo do diretório raiz.

Retornar;

A função de receber o número de inode por nome do arquivo:

int get_i_num (nome do char *)

Parâmetros de função de entrada - Nome do arquivo. Valor de retorno - o arquivo de inode numérico de seqüência.

Int I \u003d 0, rec_len \u003d 0;

Estrutura ext2_dir_entry_2 dente;

Em Buff Buffer, há uma matriz de entradas de diretório. Para determinar o número de seqüência do arquivo INODE, você deve encontrar nesta matriz com o nome deste arquivo:

Para (; eu< 700; i++) {

Memcpy ((void *) e dente, (buff + rec_len), sizeof (dente));

If (! Memcmp (dent.name, nome, dent.name_len))

Rec_len + \u003d dent.rec_len;

Return Dent.INode;

E agora escrevemos a principal função:

int main ()

Variáveis \u200b\u200be estruturas:

estrutura ext2_inode em;

// nome de arquivo de viagem absoluto

Char não assinado * full_path \u003d "/home/test.file";

Buff1 de Char não assinado1;

INT INT I \u003d 1;

Int n, i_num, outf, tipo;

O primeiro caractere no nome do caminho absoluto do arquivo deve ser uma barra direta (/). Confira:

If (full_path! \u003d "/") (

Perror ("slash");

Saída (-1);

Abra o arquivo do dispositivo, leia superblocks e descritores de tabela:

Indev \u003d Open (Part_Name, O_rdonly);

Se (Indev.< 0) {

Perror ("aberto");

Saída (-1);

Read_sb ();

Read_gdt ();

Recebemos o conteúdo do catálogo raiz:

get_root_dentry ();

Agora, o buffer de buff contém todos os registros do diretório raiz (se desejar, você pode salvá-los em um arquivo separado). Agora, tendo os registros do diretório raiz, podemos chegar ao conteúdo do arquivo test.file usando o algoritmo de leitura do arquivo acima. Para este propósito, organizamos um ciclo. No corpo do ciclo, analisaremos o nome do caminho absoluto do arquivo, destacando seus elementos - subdiretórios (é um, em casa) e o nome do arquivo de pesquisa (teste.file). Para cada elemento, definimos o número de sequência do inode, consideramos este inode e, em seguida, obtemos o conteúdo do bloco zero (da seqüência de blocos de endereços localizados em inode):

enquanto (1) (

Memset (Buff1.0, sizeOf (Buff1));

Para (n \u003d 0; n< EXT2_NAME_LEN; n++, i++) {

Buff1 [n] \u003d full_path [i];

If (((buff1 [n] \u003d\u003d "/") || (BUFF1 [n] \u003d\u003d "?")) ()) ()

I ++;

Pausa;

buff1 [n] \u003d "?";

Para cada elemento do nome do caminho absoluto do arquivo, determinamos o número de sequência de inode, leia este inode na memória e, em seguida, obtenha o conteúdo do bloco zero:

I_num \u003d get_i_num (BUFF1);

Get_inode (i_num, & in);

Read_iblock (& \u200b\u200bem, 0);

Exibe as informações do arquivo (nome, número de inode, tamanho do arquivo e seu tipo):

Printf ("inode number -% u", i_num);

Printf ("nome do arquivo -% s", buff1);

Printf ("tamanho do arquivo -% u", in.i_size);

O tipo de arquivo é determinado pelos quatro bits mais antigos da estrutura do campo I_MODE EXT2_INODE:

tipo \u003d ((in.i_mode & 0xf000) \u003e\u003e 12);

Printf ("tipo -% d", tipo);

Interruptor (tipo) (

Caso (0x04):

Printf ("(catálogo)");

Pausa;

Caso (0x08):

Printf ("(arquivo normal)");

Pausa;

Caso (0x06):

Printf ("(unidade de bloco)");

Pausa;

Caso (0x02):

Printf ("(dispositivo simbólico)");

Pausa;

Padrão:

Printf ("(tipo desconhecido)");

Pausa;

Verifique o tipo de arquivo. Se este é um arquivo regular - interromper o ciclo:

If (tipo & 0x08) (

O buffer de buff será a informação lida a partir dos blocos de informações do arquivo /home/test.file. Escrevemos essas informações para o arquivo:

Outf \u003d aberto ("out", O_creat | O_rdwr, 0600);

Escreva (Outf, Buff, SizeOf (Buff));

Fechar (Outf);

Pausa;

Nós saímos:

Fechar (Indev);

Return 0;

Sobre esta consideração da estrutura lógica do sistema de arquivos EXT2.

(Segundo sistema de arquivos estendidos).

· Florestas de sistemas de arquivos Linux

· Estrutura de partição de disco em ext2fs

·

· Catálogos.

· Dispositivos de arquivos

·

·

· Library ext2fs.

· Seção do sistema EXT2FS

· Cálculo da privacidade

Matfak.

Prog.

2º curso 5º gramas.

Chichirov Andrey.

Falomethem. Ext2fs (segundo sistema de arquivos estendidos).

Expirações de sistemas de arquivos Linux

As variáveis \u200b\u200bdo Linux foram baseadas no sistema operativo do Minix. Seria um discos nomeados entre dois sistemas do que ter um novo sistema de arquivos, então Linus TorValds seguiu a subseção no sistema de arquivos do Linux Minix. Embora este sistema de arquivos fosse bastante eficaz com uma quantidade relativamente pequena de erros.

No entanto, os flashes associados ao sistema de arquivos Minix são bastante altos, então eles começaram a pensar sobre o novo sistema de arquivos para o Linux.

Para controlar a implementação do novo sistema de arquivos no Linux Poison, um sistema de arquivos virtual (VFS) foi usado. O VFS foi escrito por Chris Provenzano, e então o Linus Torvalds passou em integração em veneno.

Depois de instalar no VFS Poison, o novo sistema FAL Sistema FAL (sistema de arquivos estendido) foi fácil e adicionado ao Linux 0.96c Vexa. No novo sistema de arquivos, dois sistemas substanciais de minix foram removidos: Seu volume máximo pode atingir 2 gigabytes, e o nome máximo do arquivo é de 255 caracteres. Foi uma conquista com o sistema de arquivos Minix, embora alguns dos aparentes simplesmente ainda estão digitando. Não houve acesso subdependente, modificação do índice descippet e modificar as células da mudança de arquivo. Esse sistema de arquivos usou listas relacionadas a abrir com blocos gratuitos e descres de índice, que influenciou grandemente o sistema do sistema: com as listas das listas não serem especificadas e afundadas, que usadas para registrar um sistema de arquivos.

A decisão dessas sondas foi a liberação de dois novos sistemas de arquivos em janeiro de 1993: XIA e EXT2FS (segundo sistema de arquivos estendidos). Na maior parte, o sistema de arquivos XIA foi baseado no Minix com a adição de vários novos recursos. Basicamente, foi a possibilidade de praticar com nomes de arquivos longos, a aprovação dos discos do volume maior e a tensão das células do arquivo mudanças. Com pedras finas, o ext2fs foi baseado em exfs com muitas melhorias e adições. Ela também teve a oportunidade para o futuro.

Quando esses dois sistemas de arquivo foram liberados, eles estavam funcionalmente se emburrualmente. O sistema XIA era mais confiável do que o EXT2F, devido à sua minimização. Erros no sistema EXT2FS não foram compensados \u200b\u200bem sua aplicação mais silenciosa, e um grande número de novos recursos e melhorias foram adicionados. O atual sistema de arquivos ext2fs é muito confiável e tornou-se um sistema de arquivos de fato Linux.

A tabela a seguir fornece informações comuns sobre a funcionalidade de recursos funcionais fornecidos com sistemas de arquivos tracejados.

Minix FS.

Ext fs.

Ext2 fs.

Xia fs.

Sistema de arquivos máximos.

Comprimento máximo de arquivo

Comprimento máximo do nome do arquivo

Subsecção da Torre das Mudanças de Mudanças de Arquivo

Capacidade de andar

Pazmp Bloka mutável

Proteção de infrogent

Se você precisar do comprimento do nome do arquivo em EXT 2. Pode ser aumentado para 1012.

Ext2fs penetrará alguns blocos para o usuário raiz. Normalmente, é 5% do total, o que permite que a administração do sistema evite a falta de um escopo de disco rígido de seu preenchê-lo com o uso de usuários de usuários de dpuugi.

Estrutura de partição de disco em ext2fs

Os fabricantes de disco rígido geralmente fornecem seus produtos formatados em um nível baixo. Tanto quanto eu sei, isso significa que todo espaço em disco com a ajuda de etiquetas especiais é quebrado pelos "setores", o tamanho de 512 bytes. Esse disco (ou seção de disco) deve ser preparado para uso em um sistema operacional específico. Em MS-DOS ou Windows, o procedimento de preparação é chamado de formatação e no Linux - criando um sistema de arquivos. Criando um sistema de arquivos ext2fs. É criar na seção de disco de uma estrutura lógica específica. Esta estrutura é construída da seguinte forma. Primeiro, a área de inicialização é alocada no disco. A área de inicialização é criada em qualquer sistema de arquivos. Na partição primária, ele contém uma entrada de inicialização - um fragmento de código que inicia o processo de carregamento do sistema operacional na inicialização. Em outras seções, esta área não é usada. Todo o resto do espaço em disco é dividido em blocos. A unidade pode ser tamanho de 1, 2 ou 4 kilobytes. O bloco é endereçável por uma unidade de espaço em disco. A seleção de arquivos de localização é realizada para fora blocos inteiros, então ao escolher o tamanho do bloco, você tem que comprometer. O tamanho grande do bloco, como regra, reduz o número de recursos ao disco ao ler ou escrever um arquivo, mas aumenta a proporção de um espaço com pouca freqüência, especialmente se houver um grande número de arquivos pequenos.

Blocos, em sua área são combinados em grupos de blocos. Grupos de blocos no sistema de arquivos e blocos dentro do grupo são numerados sequencialmente, começando com 1. O primeiro bloco no disco tem o número 1 e pertence ao grupo com o número 1. O número total de blocos no disco (no disco seção) é um divisor de volume de disco expresso em setores. E o número de grupos de blocos não é necessário para dividir o número de blocos, porque o último grupo de blocos pode não estar completo. O começo de cada bloco de blocos tem um endereço que pode ser obtido como ((número do grupo - 1) * (número de blocos no grupo)).

Cada grupo de blocos tem a mesma estrutura. Sua estrutura é apresentada no seguinte tablet.

Estrutura do grupo de blocos de partição de disco em ext2fs.

O primeiro elemento desta estrutura (superbloco) é o mesmo para todos os grupos, e todos os outros são individuais para cada grupo. O superbloco é armazenado no primeiro bloco de cada grupo de blocos (com exceção do grupo 1, no qual o registro de carregamento está localizado na primeira unidade). Superbloco É o ponto de partida do sistema de arquivos. Tem um tamanho de 1024 bytes e sempre localizado no deslocamento de 1024 bytes desde o início do sistema de arquivos. A presença de várias cópias do superbloco é devido à extrema importância desse elemento do sistema de arquivos. As duplicatas do Superblock são usadas ao restaurar o sistema de arquivos após falhas.

As informações armazenadas no superbloco são usadas para organizar o acesso aos outros dados no disco. O superbloco define o tamanho do sistema de arquivos, o número máximo de arquivos na seção, a quantidade de espaço livre e contém informações sobre onde procurar áreas desocupadas. Quando você inicia o sistema operacional, o superbloco é lido para a memória e todas as alterações no sistema de arquivos primeiro encontrar a exibição na cópia do superbloco localizado no OP e são registrados apenas periodicamente. Isso permite que você aumente o desempenho do sistema, quantos usuários e processos atualizam arquivos constantemente. Por outro lado, quando o superbloco estiver desligado, ele deve ser gravado no disco, o que não permite que você desligue o computador simplesmente desligue a energia. Caso contrário, com a próxima carga, as informações registradas no superbloco não serão adequadas para o estado real do sistema de arquivos.

Superblock tem a seguinte estrutura

Nome do campo

Um tipo

Comente

s_inodes_count.

Ulong.

Número de descritores de índice no sistema de arquivos

s_blocks_count.

Ulong.

Número de blocos no sistema de arquivos

s_r_blocks_count.

Ulong.

Número de blocos reservados para superusuário

s_free_blocks_count.

Ulong.

O número de blocos livres

s_free_inodes_count.

Ulong.

Contador do número de descritores de índice gratuitos

s_first_data_block.

Ulong.

O primeiro bloco que contém dados. Dependendo do tamanho da unidade, este campo pode ser igual a 0 ou 1.

s_log_block_size.

Ulong.

Indicador de tamanho de bloco lógico: 0 \u003d 1 KB; 1 \u003d 2 KB; 2 \u003d 4 KB.

s_log_frag_size.

Longo.

Indicador de tamanho de fragmento (parece, o conceito de um fragmento não é usado atualmente)

s_blocks_per_group.

Ulong.

Número de blocos em cada bloco de blocos

s_frags_per_group.

Ulong.

O número de fragmentos em cada bloco de blocos

s_inodes_per_group

Ulong.

Número de descritores de índice (inodes) em cada bloco de bloco

s_mtime.

Ulong.

O tempo em que o sistema de arquivos foi montado pela última vez.

s_wtime.

Ulong.

Tempo quando a última vez foi gravada no sistema de arquivos

s_mnt_count.

USHORT.

Medidor do sistema de arquivos de montagem. Se este contador atingir o valor especificado no próximo campo (s_max_mnt_count), o sistema de arquivos deve ser verificado (isso será feito quando reiniciado) e o contador é redefinido.

s_max_mnt_count.

Baixo

O número que determina quantas vezes o sistema de arquivos pode ser montado

s_magic.

USHORT.

"Número mágico" (0xef53), indicando que o sistema de arquivos pertence ao tipo EX2FS

s_state.

USHORT.

Bandeiras indicando o status atual do sistema de arquivos (se ele está limpo (limpo), etc.)

s_errors.

USHORT.

Bandeiras que especificam procedimentos de mensagens de erro (o que fazer se os erros forem encontrados).

s_pad.

USHORT.

O preenchimento

s_lastcheck.

Ulong.

A hora da última verificação do sistema de arquivos

s_checkinterval.

Ulong.

Período máximo de tempo entre as verificações do sistema de arquivos

s_creator_os.

Ulong.

Especificando no tipo de sistema operacional no qual o sistema de arquivos é criado

s_rev_level.

Ulong.

Sistema de arquivos de nível de revisão.

s_rerved.

Ulong.

Preenchendo até 1024 bytes

Após o superbloco, uma descrição do grupo de blocos (descritores de grupo) está localizada. Esta descrição é uma matriz tendo a seguinte estrutura.

Nome do campo

Um tipo

Objetivo

bg_block_bitmap.

Ulong.

O endereço do bloco contendo os blocos de cartão de bits (Bitmap de bloco) deste grupo

bg_inode_bitmap.

Ulong.

O endereço do bloco contendo o bitmap de descritores de índice (inode bitmap) deste grupo

bg_inode_table.

Ulong.

O endereço do bloco contendo uma tabela de descritores de índice (Inode Table) deste grupo

bg_free_blocks_count.

USHORT.

Contador do número de blocos gratuitos neste grupo

bg_free_inodes_count.

USHORT.

O número de descritores de índice gratuitos neste grupo

bg_used_dirs_count.

USHORT.

O número de descritores de índice neste grupo, que são catálogos

bg_pad.

USHORT.

O preenchimento

bg_reserved.

Ulong.

O preenchimento

O tamanho da descrição do bloco do bloco pode ser calculado como (size_group_blok_v_ext2 * number_groups) / tamanho_block (Se necessário, arredondado).

As informações armazenadas na descrição do grupo são usadas para encontrar cartões de bit de blocos e descritores de índice, bem como uma tabela de descritores de índice. Não esqueça que blocos e blocos de blocos são numerados de 1.

Bloco de mapa de bits (Bitmap de bloco) é uma estrutura, cada um dos quais indica se o bloco correspondente é atribuído a ele. Se o bit for 1, o bloco está ocupado. Este cartão serve para procurar blocos gratuitos nos casos em que é necessário destacar o local sob o arquivo, o bitmap de blocos ocupa o número de blocos iguais a (Number_block_v_group / 8) / tamanho_block (Se necessário, arredondado).

O bitmap de descritores de índice realiza uma função semelhante em relação à tabela de descritores de índice: mostra quais descritores estão ocupados.

A área a seguir na estrutura da estrutura do bloco serve para armazenar a tabela de descritores de arquivos de índice. A estrutura do próprio descritor de índice é considerada na seguinte subseção.

Bem, finalmente, o lugar restante no grupo de blocos é alocado para armazenar arquivos na verdade.

Sistema de arquivoExt. 2 é caracterizado por:

  • estrutura hierárquica
  • processamento acordado de matrizes de dados,
  • extensão de arquivo dinâmico,
  • segurança da informação em arquivos
  • interpretação de dispositivos periféricos (como terminais e dispositivos de fita) como arquivos.

Visão interna de arquivos

Cada arquivo no sistema EXT 2 possui um índice exclusivo. O índice contém informações necessárias para qualquer processo para se referir ao arquivo. Os processos referem-se a arquivos usando um conjunto claramente definido de chamadas do sistema e identificando o arquivo de cadeia de arquivos que atuam como um nome de arquivo composto. Cada nome composto definitivamente determina o arquivo, para que o kernel do sistema converte esse nome no índice de arquivo. O índice inclui uma tabela de localização do endereço das informações do arquivo no disco. Como cada bloco no disco é endereçado ao seu número, esta tabela armazena o conjunto de números de bloco de disco. Para aumentar a flexibilidade, o kernel anexa ao arquivo um por um bloco, permitindo que as informações do arquivo sejam espalhadas por todo o sistema de arquivos. Mas esse esquema de colocação complica a tarefa de pesquisa de dados. A tabela de endereços contém uma lista de números de bloco contendo o arquivo de propriedade do arquivo, no entanto, os cálculos simples mostram que uma lista linear de blocos de arquivos no índice é difícil de controlar. Para que uma pequena estrutura de índice funcione com arquivos grandes, a tabela de endereços de bloco de disco é trazida com a estrutura mostrada na Figura 1

A maioria dos arquivos no sistema EXT 2 tem um tamanho que não excede 10 kb e até 1 kb! Como o arquivo de 10 kb está localizado nos blocos de endereçamento direto, na maior parte dos dados armazenados em arquivos, o acesso pode ser feito em um apelo para o disco. Portanto, em contraste com o acesso a arquivos grandes, trabalhar com arquivos de tamanho padrão prossegue rapidamente.

Descritores de arquivos de índice.

Cada arquivo no disco corresponde a um e apenas um identificador de arquivo de índice que é identificado por seu número de seqüência - o índice de arquivo. Isso significa que o número de arquivos que podem ser criados no sistema de arquivos são limitados pelo número de descritores de índice, o que é simplesmente definido ao criar um sistema de arquivos ou é calculado com base no volume físico da partição de disco. Descpports indianos existem no disco em forma estática e o kernel lê-los na memória antes de começar com eles para trabalhar.

O identificador de arquivo de índice tem a seguinte estrutura:

Nome do campo

Um tipo

Descrição

I_mode.

USHORT.

Digite e direitos de acesso a este arquivo.

I_uid.

USHORT.

Identificador do proprietário do arquivo (proprietário UID).

I_size.

Ulong.

Tamanho do arquivo em bytes.

I_atime.

Ulong.

A hora do último acesso ao arquivo (tempo de acesso).

I_CTime.

Ulong.

Tempo de criação de arquivos.

I_mtime.

Ulong.

O tempo da última modificação do arquivo.

I_dtime.

Ulong.

Tempo de exclusão de arquivos.

I_gid.

USHORT.

Identificador de grupo (GID).

I_links_count.

USHORT.

Contador de relações (contagem de links).

I_blocks.

Ulong.

O número de blocos ocupados pelo arquivo.

I_flags.

Ulong.

Arquivo flags. Bandeiras de arquivo)

I_rerved1.

Ulong.

Reservado para o sistema operacional

I_block.

Ulong.

Ponteiros para bloqueios nos quais os dados do arquivo são registrados (um exemplo de endereçamento direto e indireto na Fig. 1)

I_version.

Ulong.

Versão do arquivo (para NFS)

I_file_acl.

Ulong.

Arquivo ACL.

I_dir_acl.

Ulong.

Catálogo da ACL.

I_faddr.

Ulong.

Endereço de fragmento (endereço de fragmento)

I_frag.

Uchar.

Número de fragmento (número de fragmento)

I_fsize.

Uchar.

Tamanho do fragmento (tamanho do fragmento)

I_pad1.

USHORT.

O preenchimento

I_rerved2.

Ulong.

Reservado

O campo Tipo e os direitos de acesso ao arquivo é uma palavra de dois bytes, cada bit do qual serve como um sinalizador indicando a taxa de arquivo para um tipo específico ou instalação de um determinado direito de arquivo.

Identificador

Valor

Bandeira de compromisso (campos)

S_ifmt.

F000.

Máscara de tipo de arquivo

S_ifsock.

A000.

Ninho de domínio (soquete)

S_iflnk.

C000.

S_ifreg.

8000

Arquivo normal (regular)

S_ifblk.

6000

Dispositivo orientado para o bloco

S_ifdir.

4000

Catálogo

S_ifchr.

2000

Dispositivo orientado para o byte (simbólico)

S_ififo.

1000

Channel nomeado (FIFO)

S_isuid.

0800

Proprietário de turnos suados

S_isgid.

0400

Sgid - Bits de mudança de grupo

S_isvtx.

0200

Bit de conservação de tarefas (bit pegajoso)

S_irwxu.

01c0.

Máscara de direitos do proprietário do arquivo

S_irusr.

0100

Direito de ler

S_iwusr.

0080

Direito de escrever

S_ixusr.

0040

Direito de executar

S_irwxg.

0038

Grupo de máscara de grupo

S_irgrp.

0020

Direito de ler

S_iwgrp.

0010

Direito de escrever

S_ixgrp.

0008

Direito de executar

S_irwxo.

0007

Máscara dos direitos de outros usuários

S_IROTH.

0004

Direito de ler

S_iwoth.

0002

Direito de escrever

S_ixoth.

0001

Direito de executar

Entre os descritores de índice, existem vários descritores reservados para fins especiais e desempenham um papel especial no sistema de arquivos. Estes são os seguintes descritores

Identificador

Valor

Descrição

Ext2_bad_ino.

O descritor de índice em que os endereços de blocos defeituosos no disco são listados (blocos ruins inode)

Ext2_root_ino.

Descritor de índice de diretório de raiz do sistema de arquivos (inode raiz)

Ext2_acl_idx_ino.

ACL Inode.

Ext2_acl_data_ino.

ACL Inode.

Ext2_boot_loader_ino.

Descritor de índice de carregador (inicialização de inicialização inode)

Ext2_undel_dir_ino.

Diretório undelete inode.

Ext2_first_ino.

O primeiro descritor não-Pro-Pro-Índice

O identificador mais importante nesta lista é o descritor de diretório raiz. Esse descritor para o diretório raiz, que, como todos os diretórios, consiste em registros da seguinte estrutura:

Nome do campo

Um tipo

Descrição

Inode.

Ulong.

número do descritor de índice de arquivo (índice)

rec_len.

USHORT.

Comprimento deste registro

name_len.

USHORT.

Comprimento do nome do arquivo

Nome.

Caracteres.

Nome do arquivo

Uma entrada separada no catálogo não pode cruzar a borda do bloco (ou seja, ela deve ser localizada inteiramente dentro de um bloco). Portanto, se a próxima entrada não se encaixa inteiramente nesse bloco, ela será transferida para o próximo bloco, e o registro anterior continua de forma que preencha o bloco até o final.

Figura 1 blocos de endereçamento direto e indireto no índice

Figura 2 Volume do arquivo em bytes no tamanho do bloco 1 KB

Figura 3. Exemplo de índice de disco

A Figura 3 mostra o índice de disco de um determinado arquivo. Este índice pertence ao arquivo usual, cujo proprietário é "MJB" e o tamanho do qual é 6030 bytes. O sistema permite ao usuário "MJB" ler, gravar e executar o arquivo; Os membros do grupo "OS" e todos os outros usuários são permitidos apenas para ler ou executar o arquivo, mas não registrar dados nele. A última vez que o arquivo foi lido em 23 de outubro de 1984 às 13:45, o registro foi a última vez foi feito em 22 de outubro de 1984 às 10:30. O índice mudou pela última vez em 23 de outubro de 1984 às 13:30, embora nenhuma informação tenha sido gravada neste tempo. O kernel codifica todos os dados acima no índice. Preste atenção à diferença no registro do conteúdo do índice e do conteúdo do arquivo. O conteúdo do arquivo muda apenas quando o arquivo é gravado. O conteúdo do índice está mudando tanto ao alterar o conteúdo do arquivo e ao alterar o proprietário do arquivo, os direitos de acesso e os conjuntos de ponteiros. Alterar o conteúdo do arquivo automaticamente faz com que a correção de índice, mas a correção do índice não significa alterar o conteúdo do arquivo.

Catálogos.

Catálogos são arquivos dos quais a estrutura hierárquica do sistema de arquivos está sendo construída; Eles desempenham um papel importante na transformação do nome do arquivo para o número do índice. O diretório é um arquivo contendo que é um conjunto de registros que consistem no número do índice e do nome do arquivo incluído no diretório. O nome composto é uma série de símbolos, concluída por um símbolo vazio e a linha inclinada compartilhada ("/") em vários componentes. Cada componente, além disso, deve ser um nome de diretório, mas o último componente pode ser um arquivo que não é um diretório. Na versão V do sistema UNIX, o comprimento de cada componente é limitado a 14 caracteres; Assim, juntamente com 2 bytes, alocados para o número do índice, o tamanho de gravação do diretório é de 16 bytes.

Deslocamento em bytes.
Catálogo interno

Número do índice
(2 byte)

Nomearquivo

1798

iniciar

1276

fsck.

clri

1268

motd.

1799

montar

mknod.

2114

passwd.

1717

umount.

1851

lista de controle.

fsdbld.

config.

1432

getty.

batida.

mKFS.

Figura 4 Formato de catálogo / etc

A Figura 4 mostra o formato do diretório "etc". Cada diretório tem arquivos, pois os nomes são indicados pontos e dois pontos ("." E "..") e números de índice que correspondem aos números de índice deste catálogo e do catálogo pai, respectivamente. Número de índice para arquivo "." O diretório "/ etc" tem um endereço com deslocamento 0 e valor 83. O número do índice para o arquivo ".." tem um endereço com deslocamento 16 desde o início do diretório e o valor 2. As entradas no diretório podem ser vazias , e o número do índice é 0. Por exemplo, a gravação com o endereço 224 no diretório "/ etc" está vazia, apesar do fato de que uma vez continha o ponto de entrada para o arquivo chamado "Crash". O programa MKFS inicializa o sistema de arquivos de forma que os números de índice para arquivos "." E ".." O diretório raiz coincide com o número do índice raiz do sistema de arquivos.

O kernel armazena os dados no diretório da mesma maneira que faz no arquivo de tipo normal usando a estrutura do índice e bloqueia com os níveis de endereçamento direto e indireto. Os processos podem ler dados de diretórios da mesma forma que leram arquivos regulares, mas o direito de entrada exclusiva para o diretório é reservado pelo núcleo, o que garante a correção da estrutura do diretório. Os direitos de acesso do catálogo têm o seguinte significado: O direito de leitura dá aos processos a oportunidade de ler dados do catálogo; O direito de gravação permite que o processo crie novas entradas no diretório ou exclua as operações antigas (usando Creat, Mknod, Link e Unlink System), como resultado do que o conteúdo do catálogo muda; O direito de execução permite que o processo pesquise no diretório pelo nome do arquivo (já que "executando" o catálogo é sem sentido).

Quando qualquer programa usa o caminho para o arquivo, o Nomep correspondente do Índice Descip contém nos catálogos. Depois que o nome do arquivo foi usado no número do descritivo de índice, este descipPot é colocado na memória e, em seguida, usado em zap subseqüente.

O conceito de sistemas de arquivos UNIX inclui o conceito de referência. Um descripboard de índice pode ser associado a vários nomes de arquivos. O Deskpott é assistido por um campo, um hinner, com o qual o arquivo associa. Adicionar um link é criar uma entrada de diretório, onde o número do descipet do índice indica um diskpot e um aumento no contador de referência no descrivamento. Você deve excluir os links do veneno reduz o contador de referência e excluir o DESQPOT, se este medidor se tornar um nulo.

Esses links são chamados rígidos e só podem ser usados \u200b\u200bem um sistema de arquivos (você não pode criar um link para um sistema de arquivos de um sistema de arquivos flip). Além disso, um link rígido só pode especificar um arquivo (uma referência rigorosa ao diretório pode ser usada para se concentrar no sistema de arquivos).

Na maioria dos sistemas UNIX, há outro tipo de link. Esses links que estão promovendo apenas o nome do arquivo são chamados simbólicos. Você está usando um pobre de tais links, enquanto usa o caminho para o arquivo para o descripboard de índice, o veneno substitui o nome da referência ao software descrito (ou seja, no nome do arquivo de destino) e os caminhos de re-Internet caminho para o arquivo. Como o link simbólico não indica o índice dessqpot, é possível criar links para arquivos que estão localizados em um sistema de arquivos desinfetado. Esses links podem indicar um arquivo de qualquer tipo, mesmo em um inexistente. Links simbólicos são tão usados, pois eles não têm esses incêndios que têm um link duro. No entanto, eles ocupam algum volume no disco, onde são permitidos o descripboard de índice e os blocos de dados. Seu uso pode ser usado para as formas relacionadas à descarga de usar o caminho para o arquivo para o descripboard de índice, que é devido ao fato de que a simbolização dos links simbólicos do veneno deve inserir novamente o caminho para o arquivo.

Dispositivos de arquivos

Em sistemas operacionais semelhantes a UNIX, o acesso a dispositivos é realizado através de arquivos especiais. Este arquivo não ocorre no sistema de arquivos. É apenas um ponto de acesso à unidade de dispositivo.

Existem dois tipos de arquivos de dispositivos: simbólico e bloco. Ao usar um tipo simbólico, é possível trocar dados com o dispositivo apenas no modo de caractere, enquanto os arquivos de dispositivos de tipo de bloco permitem trocar apenas blocos usando buffer. Ao solicitar uma solicitação de E / S para o arquivo de dispositivo, essa consulta é redirecionada para o driver do dispositivo apropriado. Cada arquivo semelhante corresponde a um número sênior que define o tipo de dispositivo e a sala mais jovem que determina o próprio dispositivo.

Recursos adicionais ext2s.

Além dos recursos autônomos do UNIX, EXT2FS, existem alguns recursos adicionais que geralmente não são subsequentemente submetidos pelos sistemas de arquivos UNIX.

ATPIBLOS DE ARQUIVO permitem que você altere a prensagem do polar usando arquivos com arquivos. Você pode instalar no arquivo ou diretório. No segundo caso, os arquivos criados neste diretório herdam esses atriquéticos.

No decorrer da montização do sistema, algumas características específicas associadas a atiquotas de arquivos podem ser instaladas. A opção de montagem permite que a administração selecione os recursos da criação de arquivos. No sistema de arquivos com os recursos do BSD, os arquivos são criados com o mesmo identificador GPPP, assim como o catálogo de apartamentos. Recursos System V é um pouco mais complicado. Se o catálogo de bits SETGID estiver definido, os arquivos criados pelo identificador dos GPPs deste diretório serão recebidos e os subdiretórios herdariam os identificados do GPPP e dos bits SetGID. No presente caso, arquivos e catálogos são criados com o identificador básico do GPPP do PPCRESS causador.

O sistema EXT2FS pode usar uma modificação de dados síncrona semelhante ao sistema BSD. A opção de montagem permite que a administração especifique todos os dados (desclistas indexantes, bits, blocos indiretos e blocos de diretório) gravados no DC de forma sincronizada em suas modificações. Isso pode ser usado para obter altos registros de informações, mas também leva para uma deterioração no sacerdócio. Na verdade, esse recurso geralmente não é usado, uma vez que a deterioração da proliferação, isso pode ser usado para suar os usuários dos usuários, que não estão marcados usando o sistema de arquivos.

O EXT2FS permite que você crie um sistema de arquivos para selecionar um bloco lógico. Pode ser um Pazmer 1024, 2048 ou 4096 bytes. O uso de grandes blocos de volume para a opção de E / S (como a quantidade de suga para o disco diminui) e, portanto, para um cabeçalho menor das cabeças. Com o outro lado do bloco, o uso de um bloco grande blocos para o mostrador da pensão de disco. Normalmente, o último bloco do arquivo é usado não inteiramente para o campo de informações, portanto, com um aumento no volume do bloco, o volume do punção de disco teped é aumentado.

O EXT2FS permite que você use links simbólicos oskizados. Usando esses links, block blocos de dados não são usados. O nome do arquivo de destino não está no bloco de dados, mas no próprio descipboard de índice. Tal estrutura permite manter o punção de disco e evaporar o uísque de links simbólicos. Claro, há uma tubulação, secreta sob o descrito, escasso, por isso nem todos os links podem ser subscritor como Hersal. O comprimento máximo do nome do arquivo em um link secundário tem 60 caracteres. No futuro próximo, é planejado pausar este esquema para arquivos de pequeno volume.

Ext2fs segue o estado do sistema de arquivos. O pobre usa um campo separado na suspensão para indicar o status do sistema de arquivos. Se o sistema de arquivos for montado em leitura / gravação, seu estado será instalado como "não limpo". Se for desmontado ou montado novamente no prazer somente leitura, sua condição é instalada em "limpo". Quando o sistema do sistema e do sistema de arquivos estão em andamento, essas informações são usadas para operar a necessidade de um sistema de arquivos. Os pobres também coloca alguns erros travessos neste campo. Veneno de não conformidade aberto, o sistema de arquivos é marcado como "errôneo". O simulador do sistema de arquivos testará essas informações para o sistema do sistema, mesmo que sua condição seja realmente "limpa".

Prolongado Ignorando o teste do sistema de arquivos às vezes, às vezes pode ser com alguma suficiência, portanto, o ext2fs inclui dois métodos para o sistema regulatório. O spearlock é promovido pelo contador de montagem do sistema. Este contador aumenta cada PA quando o sistema é montado no recurso de leitura / gravação. Se o seu valor atingir o máximo (também é Hudded na suspensão), o teste do sistema de arquivos é iniciado pelo checkout, mesmo que sua condição seja "limpa". Este último, a primeira vez e o máximo inteligente entre o primeiro também é humano na suspensão. Quando a inteligência máxima é obtida entre os Pinks, o estado do sistema de arquivos é ignorada e o ponto de verificação é iniciado.

O sistema EXT2FS é assistido por seu presente. O Tune2fs BraMMA pode ser usado para mudar:

  • ação PRI Erro Desembalagem. Aberto com um veneno de não conformidade, o sistema de arquivos é marcado como "errôneo" e uma das seguintes etapas podem ser executadas: a implementação da execução, a atualização do sistema de arquivos no prazer somente leitura, a fim de evitar Acoplamento, o sistema de paginação do sistema para o sistema de arquivos.
  • valor máximo montado.
  • inteligência máxima entre os pinos.
  • o número de blocos lógicos, impulsionado para o usuário raiz.

As opções especificadas por montadas também podem ser usadas para alterar as ações da obrigação do envenenamento de erro.

Usar o ATPIBBUT permite que os usuários excluam arquivos sequentes. Você pode excluir um arquivo semelhante, em blocos, que são usados \u200b\u200bpara usar este arquivo, são registrados por informações aleatórias. Isso será promovido para obter acesso à primeira dobra deste arquivo na Autoridade e a ajuda de discagem de disco.

O sistema EXT2FS adicionou recentemente novos tipos de arquivos retirados do sistema de arquivos 4.4 BSD. Arquivos de colocação de tipos só podem ser usados \u200b\u200bpara ler: ninguém tem que alterá-los ou excluí-los. Isso pode ser usado para proteger os arquivos de configuração importantes. Tipo de arquivo de arquivos, esses são arquivos que podem ser transformados em funções de gravação e os dados só podem ser adicionados ao final deste arquivo. Este tipo de arquivos também pode ser removido ou permanente. Eles podem ser usados \u200b\u200bcomo arquivos do zeador que só podem aumentar o volume.

Otimização da prividade

O sistema EXT2FS é facilitado por muitas funções que otimizam seu perfil, o que leva a um aumento no escopo da troca de informações sobre leitura e escrita de arquivos.

O EXT2FS usa ativamente um buffer de disco. Quando a unidade deve ser lida, o veneno exibe o opaco de E / S opt / saídas. Assim, os mais pobres tenta certificar-se de que o próximo bloco, que deve ser lido, já é responsável por um buffer de disco. Essas opporações são geralmente executadas usando arquivos de leitura serial.

O sistema EXT2FS também fornece uma grande quantidade de otimizações de informação. Blocos são usados \u200b\u200bpara combinar os dispositivos de índice correspondentes e blocos de dados. O veneno sempre tenta apertar os blocos de dados de um arquivo em um GPUP, bem como seu DESQPot. Isso é aplicado para reduzir o processo das cabeças de cabeçalho e a leitura do descritamento e os blocos de dados correspondentes correspondentes a ela.

Esses registros de dados no arquivo, ext2fs reforçarão até 8 blocos adjacentes usando o novo bloco. Tal método permite atingir a alta produtividade dos pontos fortes do sistema. Também permite que você use blocos adjacentes para arquivos, que se encaixa em sua leitura subseqüente.

Biblioteca ext2fs.

Para utilizar o uso de pragas EXT2FS e o controle dos stroits de contato deste sistema de arquivos, a Libext2FS Library tem sido fácil. Esta biblioteca fornece funções que podem ser usadas para operar e alterar esses arquivos de arquivos ext2 referindo-se a eliminating fisicamente.

A maioria dos utilitários ext2fs (Mke2fs, E2fsck, Tune2fs, Dumpe2fs, Debugfs e DP.) Use esta biblioteca. Complementa fortemente a modificação desses utilitários, pois quaisquer alterações para introduzir recursos adicionais ao sistema de arquivos EXT2FS devem estar sozinhos apenas na biblioteca EXT2FS.

Como a Biblioteca da Internet EXT2FS é suficientemente shiyky e auxiliar, pode ser facilmente escrita com sua ajuda, que será facilmente escrita, para o trabalho do qual o sistema de arquivos pode ser usado. Aplicar, a biblioteca EXT2FS foi usada pelo despejo 4,4 BSD e recuperação de alguns utilitários. Foi morto para fazer muito pouca alterações para adaptar esses usos para o Linux (foi necessário substituir várias funções que interajam com o sistema de arquivos para ligar para a biblioteca ext2fs).

A biblioteca EXT2FS inclui acesso às operações de várias classes. Uma aula da puberdade é um opaco associado ao sistema de arquivos. Qualquer shampoam pode abrir ou deslocar o sistema de arquivos, ler ou gravar o bloco de bits, crie um novo sistema de arquivos no disco. Há também funções da lista de blocos de sistema de bloco ruim.

A segunda classe de opaco usará catálogos. Propamma usando a biblioteca EXT2FS pode criar ou procurar um diretório, além de adicionar ou excluir registros no diretório. Há funções como propulsores no caminho de desclingção de índice para o arquivo e o caminho do caminho para o arquivo de acordo com a descrição especificada.

A última aula de opaco abre com desconepts index. É possível ler a tabela Descpport, contar ou anotar o desceTP, PP Exibir todos os blocos do dessqpot especificado. É possível prosseguir as funções da formação e liberação de blocos e descrippors.

Seção do sistema EXT2FS

Para o sistema EXT2FS, uso poderoso de uso complementar foram utilizados. Esses usos são usados \u200b\u200bpara criar, modificar e coppe quaisquer inconsistências nos sistemas de arquivos ext2fs. O programa Mke2FS é usado para instalar uma pasta de disco que fornece um sistema de arquivos EXT2FS vazio.

O aplicativo Tune2FS pode ser usado para a potência do Papalmet do Sistema de Arquivo .cc Pode ser alterado a ser alterado para erros emergentes, o número máximo de montagem do sistema, o máximo destinado entre os progressos do sistema e o número de blocos lógicos impulsionados para o usuário root.

Talvez o uso mais inteligente seja o sistema de arquivos simplificado. E2fsck para completar inconsistências no sistema de arquivos após a inacativação do recebimento de todo o sistema. A versão inicial do Propamma E2Fsck é baseada no arquivo Linus Torvald Fsck para o sistema de arquivos Minix. No entanto, as versões atuais do período transmanente usando a biblioteca EXT2FS e são mais rápidas e só podem ser executadas em um maior número de erros no campo de sua investigação, de acordo com a preparação com um VEXA Papaling.

A vergonha E2fsck foi estudada em tal momento para que fosse realizada com a velocidade máxima. Como os idéias do sistema de arquivos são chamados à faixa de cabeça do disco, você deve otimizar os algoritmos de piscar E2Fsck, como o procedimento para o sistema de arquivos deve ser usado muito mais fácil. E, além disso, os deliberados de descidas e diretórios de índice seriam realizados de acordo com o número do bloco para reduzir as cabeças da unidade de disco.

Na ruptura do E2Fsck, o sistema de arquivos é pisturado por todos os descipientes de índice e o único desciputs como um elemento separado do sistema. Tal ocasião, esses testes não se encaixam nos objetos do sistema de arquivos. Um dos objetivos desses pinos é a contribuição da existência do tipo de tipo de arquivo, bem como a correspondência de todos os blocos no descepeppet com blocos com números existentes. Na comutação, os bits estão em operação indicando o uso de blocos e desclistas.

Se o E2Fsck encontrar os blocos de dados, os noms dos quais são coletados em mais de uma desclingção, as viagens 1D 1D são iniciadas para determinar as inconsistências - também aumentando os blocos portáteis ou a remoção de um ou mais descipputas.

A pepping mais próxima ocupa a maior parte de tudo, já que todos os descippets de índice devem ser lidos para a memória e inseparável. Para reduzir as opções de entrada / saída em órgãos subseqüentes, todo o movimento de informações necessárias permanece no buffer. Uma leitura feliz deste esquema é procurar todos os blocos do diretório do sistema de arquivos. Para obter essas informações, as seqüências de todos os diretórios do sistema de arquivos são lidas nas segundas viagens.

No segundo acabamento, os diretórios estão digitando como elementos individuais do sistema de arquivos. O bloco de cada diretório é separado, sem referência aos blocos de diretório DPUCH. Isso permite que o E2Fsk desconecte todos os blocos de diretórios no número de blocos e entre em contato com o tempo de execução, reduzindo esse tempo para o disco. Os blocos de catálogo são testados para a correspondência da realidade de seus registros e que contribuem para as referências às desciplas com o número existente (como foi ligado na quebra).

Para o bloco de diretório em cada programação do diretório, a existência de entradas existirá. ". e "..", e que o número desceppet é para gravação ". Corresponde ao diretório atual. (Número do Agendamento para gravação ".." Não teste até que seja.)

Ao realizar um segundo fode, o movimento de informações correspondentes ao catálogo de apartamentos é salvo no buffer.

Deve-se notar que até o final da segunda pcoda, quase todas as opções de entrada / saída com um disco será coberta. Todo o movimento de informação, que tenta milhares de quatro e quinta viagens, é promovido na memória, no entanto, os poços restantes do PPPSSOP e levam menos de 5-10% da execução total do E2Fsck.

As conexões de catálogo são incluídas no trinket. E2fsck faz os caminhos de cada diretório para beber para a cama, usando as informações obtidas pelo segundo fode. Aqui está o registro ".." para cada catálogo. Todos os catálogos identificados após o primeiro e não ter conexões são colocados no diretório / perdido +.

No quarto, as viagens E2Fsck, os contadores de referência para cada índice descrip contém por ppplaying todos os descrempports e refletem os medidores de referência (esta informação é mantida a partir de um cross-boring) com medidores internos, que os valores foram calculados no sub-segundo e troncos. Todos os arquivos com falha com medidor de referência zero também são colocados no diretório / perdido +.

E finalmente, no quinto, a e2fsck é a correspondência de todas as informações da informação no sistema de arquivos. Aqui estão os bits de blocos e desclistas, que foram obtidos nas primeiras peças, com valores válidos e, se necessário, as informações do disco no disco apropriadas ocorrerem.

Use o uso útil do depurador do sistema de arquivos. Debugfs é uma poderosa vaidade que permite que você desce e defina o status do sistema de arquivos. Essencialmente, é uma internet interativa para a biblioteca EXT2FS, ou seja, os comandos típicos para chamar as funções da biblioteca.

Debugfs pode ser usado para operar o stricture do sistema de arquivos interno, deixando o sistema de recuperação ou a criação de testes condicionais para o E2Fsck. Infelizmente, este Jammy pode ganhar o sistema de arquivos se você não souber como usá-lo. Com essa força, é suficiente destruir o sistema de arquivos. Portanto, Debugfs transforma o sistema de arquivos na posição somente leitura padrão. Para acessar o envelope de leitura / gravação, você deve especificar a opção -w.

Cálculo da privacidade

Os resultados do teste de Bonnie são visíveis da tabela a seguir:

Gravação de açúcar (cb / s)

Entrada de remendo (cb / s)

Desempenho (KB / S)

Leitura de açúcar (cb / s)

Peça lendo (kb / s)

BSD Async.

BSD Sync.

Ext2 fs.

1237

1033

Xia fs.

Os resultados estão suficientemente familiarizados com a entrada / saída do bloco: O sistema EXT2FS vence no sistema de referência. Isto é devido à otimização incluída na aproximação da PA. A entrada também é rápida o suficiente, de acordo com o fato de que é filhote no Purem Gupiene. A alta velocidade de leitura está relacionada ao fato de que os blocos foram puxados para um arquivo, para que as cabeças de título não sejam executadas entre duas leituras e a otimização da primeira leitura totalmente.

Com o outro lado do lado, o sistema FreeBSD inclui uma entrada / saída simbólica do valor de referência acima. Talvez isso seja devido ao fato de que o FreeBSD e o Linux usam o apropriado com bibliotecas correspondentes às correspondentes bibliotecas C. Além disso, no FreeBSD, a biblioteca de leitura simbólica mais otimizada e, portanto, há um pouco melhor aqui.

Teste os resultados Andrew.

Os resultados do teste de Andrew são visíveis a partir da seguinte tabela:

Papa 1 Criando

Encanamento 2 copiando

Encanamento 3 status

Encanamento 4 BAPTI.

Compilação do encanador 5.

2203

7391

6319

17466

75314

BSD Sync.

2330

7732

6317

17499

75681

Ext2 fs.

Os resultados dos últimos dois poços mostram que o Linux ganhará troca de dados assíncrona. Você está criando diretórios e arquivos, o sistema BSD registra sincronizadamente os descrives e registros de diretórios. Há uma chamada que o assinchpone subdesependendo para o FreeBSD ainda não foi totalmente implementado.

Na homenagem ao valor do Linux e BSD são muito semelhantes. Enquanto quando o BSD é descrito acima, adicionar uma bouquência para nomes de arquivos ao sistema Linux VFS é definido para este tipo.

No quinto e quinto PPODs, o Linux será rapidamente FREBSD, principalmente no uso do uso combinado de buquê. O volume do buffer pode levar mais memória e tomar mais memória do que no FreeBSD, onde o volume fixo é usado. Os resultados das respostas EXT2FS e Xia FS mostram que a otimização encontrada no EXT2FS é de fato usada: o perpetrador desses sistemas é de cerca de 5-10%.

Conclusão

O sistema de arquivos EXT2 é o mais utilizado em usuários do Linux. Ela fornece recursos padrão do UNIX e funções adicionais. Além disso, graças à otimização incluída no veneno, mostra excelentes resultados de resposta.

O sistema EXT2FS inclui funções para adicionar novos recursos. Algumas pessoas cuidam do uso do PAS para o sistema de arquivos real: uma lista de controle de acesso, a posição posix correspondente, restaurando arquivos remotos e compactam arquivos em uma residência de longa escala.

Primeiro, o sistema EXT2FS foi integrado ao veneno do Linux, e está ativamente em movimento na operação dos sistemas operacionais. O EXT2FS também é um componente importante do sistema de operação do Masix, que está sendo estudado atualmente por um dos AUTOP.