Sistemas de arquivos

Aprenda como um sistema operacional armazena arquivos para que sobrevivam a quedas de energia e falhas. Use as chamadas de sistema para arquivos e diretórios, de open e read a fsync, rename, ligações e permissões. Veja como um sistema de arquivos simples organiza nós-i, mapas de bits e blocos de dados, como o Fast File System mantém dados relacionados próximos e como o fsck e o registro em diário mantêm a consistência do disco após uma falha. Termine com sistemas de arquivos estruturados em registro e com a forma como NFS e AFS compartilham arquivos em uma rede.

IntermediárioAula 8 de 9 do curso Curso de Sistemas operacionais

O que você vai aprender

  1. Use as chamadas de sistema das quais um programa depende para criar, ler, escrever, nomear, proteger e organizar arquivos e preveja o efeito de cada chamada sobre deslocamentos, nomes e dados no disco.
    • Leia e escreva arquivos por meio de descritores de arquivo
      Abra arquivos, leia e escreva neles por meio de descritores de arquivo, altere o deslocamento no arquivo e explique como processos compartilham arquivos abertos.
    • Torne as escritas duráveis e as atualizações atômicas
      Force a gravação dos dados em armazenamento estável quando precisarem sobreviver a uma falha e substitua o conteúdo de um arquivo de modo que os leitores vejam a versão antiga ou a nova.
    • Organize nomes com diretórios e ligações
      Crie, liste e remova diretórios e explique como ligações físicas, ligações simbólicas e a exclusão de um arquivo afetam nomes e nós-i.
    • Leia metadados, controle o acesso e monte sistemas de arquivos
      Leia os metadados de um arquivo com stat, defina e interprete bits de permissão e explique como sistemas de arquivos separados são unidos em uma única árvore de diretórios.
  2. Descreva as estruturas em disco de um sistema de arquivos simples no estilo Unix, calcule onde ficam um nó-i e os blocos de um arquivo e acompanhe as leituras e escritas de disco envolvidas em abrir, ler e escrever um arquivo.
    • Organize um disco em blocos, mapas de bits, nós-i e diretórios
      Divida um disco em superbloco, mapas de bits de alocação, tabela de nós-i e região de dados, localize um nó-i pelo seu número e descreva como diretórios e espaço livre são armazenados.
    • Localize os dados de um arquivo com ponteiros, blocos indiretos e extensões
      Explique como os ponteiros diretos, blocos indiretos e extensões de um nó-i mapeiam os deslocamentos de um arquivo para blocos de disco e calcule o maior arquivo que uma organização de ponteiros suporta.
    • Acompanhe a entrada e saída de disco nas operações de arquivo e o efeito do cache
      Conte as leituras e escritas de blocos envolvidas em abrir, ler, criar e escrever um arquivo e explique como o cache e o armazenamento temporário de escritas em buffer alteram esse tráfego.
  3. Identifique por que os primeiros sistemas de arquivos Unix eram lentos em discos rígidos e explique como os grupos, as regras de alocação e a política para arquivos grandes do Fast File System mantêm dados relacionados próximos.
    • Explique por que os primeiros sistemas de arquivos Unix eram lentos e como os grupos resolvem esse problema
      Identifique os problemas de organização que desperdiçavam a largura de banda do disco no sistema de arquivos Unix original e descreva como grupos de cilindros e grupos de blocos organizam o disco.
    • Aplique as regras de alocação do FFS e dimensione os fragmentos de arquivos grandes
      Use as heurísticas de alocação do FFS para diretórios e arquivos, aplique a exceção para arquivos grandes, calcule o tamanho necessário de um fragmento para amortizar o posicionamento e descreva as outras melhorias do FFS.
  4. Explique por que uma falha no meio de uma atualização pode corromper um sistema de arquivos e compare o reparo posterior com fsck, a prevenção de danos com registro em diário e outras abordagens.
    • Explique o problema da consistência após falhas
      Mostre por que uma operação de arquivo precisa de várias escritas de blocos, liste o que uma falha entre elas pode deixar no disco e classifique cada resultado.
    • Verifique e repare um sistema de arquivos com fsck
      Descreva o que o verificador de sistemas de arquivos examina e repara após uma falha e explique por que a varredura de todo o disco escala mal e não detecta todos os problemas.
    • Proteja atualizações com registro de dados em diário e reaplique o registro
      Escreva uma atualização em um diário antes de alterar o sistema de arquivos no próprio local, explique por que o bloco de confirmação é escrito por último e recupere o sistema após uma falha reaplicando transações confirmadas.
    • Reduza o custo do registro em diário e compare outras abordagens
      Explique como o registro de metadados em diário evita escrever dados duas vezes, por que o registro ordenado escreve dados antes da confirmação, como registros de revogação evitam um erro de reutilização de blocos e como outros projetos mantêm sistemas de arquivos consistentes.
  5. Explique por que escrever tudo sequencialmente em um registro acelera as escritas, como o mapa de nós-i e a região de ponto de verificação permitem ao sistema de arquivos encontrar dados nesse registro e como funcionam a limpeza e a recuperação após falhas.
    • Escreva sequencialmente em segmentos e localize nós-i pelo mapa de nós-i
      Explique a motivação de um sistema de arquivos estruturado em registro, dimensione um segmento para atingir uma largura de banda desejada e acompanhe como o mapa de nós-i e a região de ponto de verificação localizam um arquivo.
    • Recupere espaço com o limpador de segmentos e restaure o sistema após uma falha
      Explique como o LFS encontra e compacta blocos ativos, escolhe quais segmentos limpar e se recupera após uma falha, e como suas ideias continuam presentes em sistemas de arquivos com cópia na escrita e para memória flash.
  6. Explique como NFS e AFS permitem que muitas máquinas clientes usem arquivos armazenados em servidores, como lidam com falhas e como suas escolhas de cache determinam quando um cliente vê as alterações de outro.
    • Explique como o NFS se recupera de falhas com requisições sem estado
      Descreva a estrutura cliente-servidor do NFS, como identificadores de arquivos remotos e requisições idempotentes permitem que um cliente se recupere de falhas do servidor por meio de novas tentativas e por que o servidor deve confirmar escritas antes de responder.
    • Compare o cache e a consistência do NFS e do AFS
      Explique como NFS e AFS armazenam dados de arquivos em cache nos clientes, quando cada um torna as alterações de um cliente visíveis aos demais e quais cargas de trabalho favorecem cada projeto.

Guia de estudo de Sistemas de arquivos

6 capítulos

1

Use a interface de arquivos e diretórios

Operações de arquivo expõem vários tipos de estado: bytes, nomes, posições em arquivos abertos e permissões. Acompanhe um descritor durante leituras e deslocamentos compartilhados e depois diferencie uma chamada concluída de um salvamento durável. Diretórios e ligações explicam por que excluir um nome não precisa excluir o objeto. Metadados e montagem completam o quadro de como um programa acessa e usa um arquivo por meio de uma única árvore de diretórios.

1.1 Leia e escreva arquivos por meio de descritores de arquivo

Um arquivo é uma sequência persistente de bytes. O sistema de arquivos armazena esses bytes sem decidir se representam texto, imagem ou código de máquina. Um diretório dá ao arquivo um nome legível; seu número de nó-i o identifica dentro do sistema de arquivos.

Abra um arquivo e verifique o resultado

open(path, flags, mode) retorna um descritor de arquivo, um número inteiro não negativo usado em chamadas posteriores. Um erro retorna -1 e define errno. Escolha O_RDONLY, O_WRONLY ou O_RDWR para o acesso. O_CREAT cria um arquivo inexistente, O_TRUNC esvazia um arquivo existente e O_APPEND coloca cada escrita no fim atual.

Para um novo arquivo, mode solicita permissões e a umask do processo remove bits. Sem uma lista de controle de acesso (ACL) padrão no diretório, o resultado é mode & ~umask. Solicitar 0666 com umask 0022 resulta em 0644, ou rw-r--r--. Esse argumento não altera as permissões de um arquivo já existente.

Descritores pertencem a um processo. Normalmente 0, 1 e 2 são entrada, saída e erro padrão. open escolhe o menor descritor não utilizado, frequentemente 3. No Linux, strace cat notes.txt mostra as chamadas: abrir a entrada, lê-la, escrever no descritor 1 e depois fechar a entrada.

Acompanhe o deslocamento, não a quantidade solicitada

read(fd, buf, n) retorna os bytes realmente lidos, até n. Para uma solicitação diferente de zero em um arquivo comum, zero significa que não restam bytes no fim do arquivo ou além dele; -1 indica um erro. write também retorna uma quantidade efetiva, que pode ser menor que a solicitada. Verifique essa quantidade antes de avançar em um buffer ou decidir que a operação está concluída.

Suponha que log.txt contenha 300 bytes. Quatro solicitações de 100 bytes retornam 100, 100, 100 e 0. O deslocamento, a posição da próxima operação, passa a ser 100, 200, 300 e 300. O fim do arquivo é uma quantidade retornada, não um byte especial armazenado no arquivo.

lseek(fd, 200, SEEK_SET) define o deslocamento como 200. Ler 50 bytes em seguida retorna os bytes 200 a 249 e deixa o deslocamento em 250. SEEK_CUR mede a partir do deslocamento atual; SEEK_END mede a partir do fim do arquivo. Alterar a posição muda um número na memória. Isso não move uma cabeça de disco nem lê dados por si só. pread e pwrite usam uma posição explícita sem alterar esse deslocamento.

Determine quais descritores compartilham um deslocamento

A tabela de descritores do processo aponta para entradas na tabela de arquivos abertos do núcleo. Cada entrada de arquivo aberto contém o modo de acesso, o deslocamento, a referência ao nó-i e a contagem de referências.

Como os descritores surgemComportamento do deslocamento
Duas chamadas open separadasDeslocamentos independentes, mesmo para o mesmo nó-i
dup ou dup2Uma entrada de arquivo aberto e um deslocamento compartilhados
Descritores herdados por forkPai e filho compartilham a entrada de arquivo aberto e o deslocamento

Se um filho posicionar um descritor compartilhado no byte 10, a próxima leitura do pai por essa entrada também começará em 10. O nó-i identifica o arquivo, mas a entrada de arquivo aberto contém o deslocamento: dois leitores podem compartilhar um arquivo sem compartilhar sua posição. O redirecionamento do interpretador de comandos usa dup2 para fazer a saída padrão se referir a outra entrada de arquivo aberto. close libera um descritor; a entrada desaparece depois que sua última referência é liberada. Fechar, por si só, não força os dados em buffer para armazenamento estável.

Principais conclusões

  • Verifique a quantidade de bytes retornada por cada read e write.
  • Um deslocamento pertence a uma entrada da tabela de arquivos abertos, não ao nó-i.
  • Aberturas separadas têm deslocamentos separados; descritores duplicados e herdados compartilham um deslocamento.
  • lseek altera o deslocamento sem realizar entrada ou saída de disco.
  • close libera um descritor; não garante durabilidade.

1.2 Torne as escritas duráveis e as atualizações atômicas

Uma escrita bem-sucedida e uma atualização resistente a falhas respondem a perguntas diferentes. Uma escrita informa que os bytes foram aceitos. A durabilidade diz respeito a eles sobreviverem a uma falha; a atomicidade diz respeito a uma atualização poder ser observada apenas por inteiro.

Force os bytes para armazenamento estável

Sistemas operacionais geralmente mantêm escritas em buffer na memória e enviam blocos modificados ao armazenamento mais tarde, frequentemente em cerca de 5 a 30 segundos. Isso combina escritas pequenas e permite que o programa continue rapidamente. Uma falha pode apagar dados que ainda aguardam nesses buffers.

fsync(fd) força os dados e metadados modificados do arquivo para o armazenamento e espera o dispositivo informar a conclusão. Um programa deve verificar seu resultado antes de informar que o salvamento é durável. close libera o descritor e não substitui essa espera.

Um arquivo também precisa de um nome durável. A entrada que associa o nome ao nó-i é um dado pertencente ao seu diretório, não ao arquivo. Após criar um arquivo, sincronizar apenas o arquivo pode tornar seus bytes duráveis sem garantir que seu novo nome sobreviva. Abra o diretório que o contém e sincronize-o quando o nome precisar persistir.

Substitua um arquivo sem expor uma versão parcial

Sobrescrever um documento no próprio local cria um intervalo em que leitores podem encontrar conteúdo incompleto. O_TRUNC primeiro define seu tamanho como zero. Se uma falha interromper as escritas posteriores, a cópia antiga completa já terá desaparecido.

Em vez disso, escreva o conteúdo substituto sob um nome temporário no mesmo diretório. Depois use rename para substituir o destino. Para um destino existente no mesmo sistema de arquivos, o POSIX torna essa substituição atômica: o nome de destino se refere ao arquivo antigo ou ao substituto, sem um intervalo em que o nome esteja ausente. Leitores não veem uma mistura de seus conteúdos por esse nome.

Para settings.json, a sequência de substituição durável é:

  1. Escreva todo o novo conteúdo em settings.json.tmp, verificando escritas parciais e erros.
  2. Chame fsync no arquivo temporário e verifique se foi bem-sucedido.
  3. Chame rename("settings.json.tmp", "settings.json") e verifique se foi bem-sucedido.
  4. Chame fsync no diretório que o contém e verifique se foi bem-sucedido.

O arquivo temporário está completo e durável antes de o nome mudar. A sincronização final do diretório torna essa alteração de nome durável. Uma falha durante a sequência deixa o destino com uma versão antiga completa ou uma versão nova completa; após a última sincronização bem-sucedida, a nova versão é a durável. A substituição atômica do nome, por si só, não garante que uma renomeação não sincronizada sobreviva a uma queda de energia.

rename entre sistemas de arquivos falha com EXDEV. Um comando que responde copiando e excluindo executa várias operações, então essa alternativa não tem garantia de substituição atômica.

Altere o tamanho sem escrever cada byte

truncate(path, length) e ftruncate(fd, length) definem o tamanho do arquivo. Reduzi-lo descarta os bytes além do novo fim. Estendê-lo faz com que a nova região seja lida como zeros. Posicionar-se além do fim e depois escrever também cria uma lacuna lida como zeros.

Um arquivo esparso pode representar essa lacuna sem alocar blocos de dados para ela. Começando com um arquivo vazio, escrever um byte no deslocamento 8192 cria um arquivo de 8193 bytes; a região anterior não escrita é lida como zeros. Seu tamanho lógico pode exceder o espaço fisicamente alocado a ele.

Principais conclusões

  • fsync torna dados e metadados do arquivo duráveis após sua conclusão bem-sucedida.
  • Sincronize o diretório para tornar durável um nome novo ou substituído.
  • Escreva, sincronize, renomeie e depois sincronize o diretório para uma substituição durável.
  • Uma lacuna esparsa é lida como zeros e pode não ocupar blocos de dados.

1.3 Organize nomes com diretórios e ligações

Diretórios separam os nomes usados pelas pessoas dos objetos armazenados pelo sistema de arquivos. Cada diretório tem seu próprio nó-i e blocos de dados; suas entradas associam nomes a números de nós-i.

Siga caminhos pela árvore

Um caminho absoluto começa em /. Um caminho relativo começa no diretório de trabalho atual do processo. A entrada . nomeia o próprio diretório e .. nomeia seu diretório pai; o pai da raiz é a própria raiz. A partir de /home/lee, o caminho relativo ../shared chega a /home/shared.

Uma extensão como .txt faz parte de um nome. Programas podem usá-la para escolher como interpretar os bytes, mas o sistema de arquivos não exige que um arquivo .txt contenha texto.

mkdir cria um diretório que contém . e ... Para listar entradas, um programa usa opendir, chama readdir até não restarem entradas e chama closedir. Um resultado de readdir inclui um nome e um número de nó-i. Programas alteram o conteúdo de diretórios por chamadas como link, unlink e rename, não por chamadas comuns a write. rmdir remove um diretório vazio.

Dê a um arquivo dois nomes equivalentes

link(old, new) cria uma ligação física: outra entrada de diretório que aponta para o mesmo nó-i. Nenhum dos nomes tem privilégio de original. A contagem de ligações do nó-i registra quantos nomes se referem a ele.

Considere estes comandos quando nenhum processo mantém o arquivo aberto:

echo hi > a
ln a b
rm a
cat b
rm b

Criar b aumenta a contagem de ligações de 1 para 2. Remover a a reduz para 1; b ainda acessa os mesmos bytes, então cat b imprime “hi”. Remover b reduz a contagem a 0, permitindo que o nó-i e seus blocos sejam recuperados.

Um descritor aberto acrescenta uma segunda regra de tempo de vida. Se a última ligação for removida enquanto um processo ainda mantém o arquivo aberto, esse processo poderá continuar acessando-o. A recuperação do espaço aguarda tanto a ausência de ligações quanto o fim das referências abertas. Isso explica por que excluir um registro grande aberto pode não liberar seu espaço imediatamente.

Uma ligação física não pode atravessar sistemas de arquivos: o número de nó-i do destino não teria significado na outra tabela de nós-i. A maioria dos sistemas Unix também proíbe ligações físicas para diretórios para preservar uma árvore sem ciclos. Na contagem clássica de diretórios Unix, um diretório vazio tem duas ligações, de sua entrada no diretório pai e de seu próprio .. Cada subdiretório contribui com mais uma por meio de ..; três subdiretórios resultam em uma contagem de 5.

Armazene um caminho em uma ligação simbólica

Uma ligação simbólica é um arquivo separado cujo conteúdo é um caminho de destino. ln -s /home/ana/report.txt r cria r com o caminho de destino de 20 bytes como conteúdo. Segui-la resolve esse caminho. Ligações simbólicas podem atravessar sistemas de arquivos e apontar para diretórios.

Tipo de ligaçãoO que a entrada de diretório alcançaEfeito da remoção do nome de destino
Ligação físicaO nó-i compartilhadoOutra ligação física ainda acessa o arquivo
Ligação simbólicaUm objeto de ligação separado que contém um caminhoA ligação fica pendente se seu caminho armazenado não for mais resolvido

Uma ligação simbólica não aumenta a contagem de ligações de seu destino. Manter o objeto de ligação, portanto, não mantém o destino existente.

Principais conclusões

  • Diretórios associam nomes a números de nós-i; caminhos selecionam uma sequência desses nomes.
  • Ligações físicas são nomes equivalentes para um mesmo nó-i.
  • Remover uma ligação elimina um nome; a recuperação do espaço também aguarda o fim das referências abertas.
  • Ligações simbólicas armazenam caminhos e podem ficar pendentes.
  • Ligações físicas permanecem dentro de um sistema de arquivos.

1.4 Leia metadados, controle o acesso e monte sistemas de arquivos

O conteúdo de um arquivo é apenas parte de seu estado. Os metadados registram quem pode usá-lo, seu tamanho e tipo e quando ele foi alterado. A montagem torna objetos de vários sistemas de arquivos acessíveis por uma única árvore de nomes.

Leia os metadados corretamente

stat(path, &buf) lê metadados por meio de um caminho; fstat(fd, &buf) os lê por meio de um descritor aberto. Os resultados incluem o número do nó-i, tipo, permissões, identificadores do proprietário e do grupo, tamanho, blocos alocados e contagem de ligações. O tamanho do arquivo conta os bytes lógicos; os blocos alocados medem o armazenamento realmente usado, que pode ser menor para um arquivo esparso.

Três registros de horário descrevem eventos diferentes:

CampoSignificadoExemplo de evento
atimeÚltimo acessoLeitura do conteúdo
mtimeÚltima modificação do conteúdoEscrita de bytes
ctimeÚltima alteração do estado do nó-iEscrita, alteração de permissões ou acréscimo de uma ligação física

ctime não é o horário de criação. Atualizar apenas atime não altera ctime. O stat do Unix clássico não tem campo de horário de criação; o statx do Linux pode disponibilizar um horário de nascimento registrado quando o sistema de arquivos oferece suporte a ele.

Interprete os bits de permissão

Os direitos de leitura, escrita e execução são registrados separadamente para proprietário, grupo e demais usuários. Cada classe é um dígito octal: leitura vale 4, escrita 2 e execução 1. Para rw-r-----, o proprietário recebe 4 + 2 = 6, o grupo recebe 4 e os demais recebem 0. chmod 640 report.txt define esses bits.

As permissões de diretório aplicam-se a nomes e à travessia. Leitura permite listar nomes. Execução permite busca, isto é, o uso do diretório em um caminho. Escrita junto com execução permite criar, excluir e renomear entradas. Conhecer um nome pode bastar para abrir um arquivo em um diretório com permissão de execução, mas sem permissão de leitura, desde que as próprias permissões do arquivo permitam o acesso. Listar esse diretório continua falhando.

Essa diferença importa para a exclusão: remover uma entrada altera o diretório que a contém. O bit de escrita de um arquivo controla a alteração de seus bytes; ele não é a permissão do diretório para remover seu nome. Root ignora a maioria das verificações comuns de permissão. Listas de controle de acesso (ACLs) podem conceder direitos a usuários e grupos identificados além das três classes básicas.

Associe outro sistema de arquivos

mkfs inicializa um sistema de arquivos em uma partição ou outro dispositivo, incluindo seu próprio diretório raiz e metadados. Ele destrói o conteúdo anterior do sistema de arquivos no dispositivo, então execute-o apenas em um dispositivo destinado à inicialização.

mount associa essa raiz a um diretório existente chamado ponto de montagem. Uma unidade montada em /media/usb torna acessível ali o conteúdo de sua raiz. O conteúdo anterior de /media/usb fica oculto enquanto a montagem está ativa; a montagem não o mescla com a árvore montada. Executar mount sem argumentos lista as montagens atuais.

A camada de sistema de arquivos virtual (VFS) do núcleo fornece uma interface comum a sistemas de arquivos ext4, XFS, FAT, baseados em memória e em rede. Programas podem chamar open e read por meio de qualquer um deles. O espaço de nomes combinado não combina suas tabelas de nós-i: números de nós-i iguais em sistemas de arquivos diferentes podem identificar arquivos sem relação entre si. Portanto, ligações físicas e renomeações atômicas permanecem dentro de seus respectivos sistemas de arquivos.

Principais conclusões

  • stat e fstat descrevem metadados; ctime registra alterações de estado.
  • Os dígitos de permissão somam leitura = 4, escrita = 2 e execução = 1 para cada classe de usuários.
  • A permissão de execução em diretórios permite a travessia de caminhos; a permissão de leitura permite a listagem.
  • A montagem associa a raiz de um sistema de arquivos e oculta o conteúdo anterior do ponto de montagem.
  • O VFS fornece uma interface comum a vários tipos de sistemas de arquivos, não uma tabela global de nós-i.
  • O tamanho lógico do arquivo e o espaço alocado podem ser diferentes.
2

Explique como um sistema de arquivos simples armazena e localiza dados

Um caminho legível oculta uma sequência de buscas, alocações e acessos a blocos. Monte uma pequena organização de disco, calcule o endereço de um nó-i e mapeie deslocamentos em bytes por meio de ponteiros diretos, blocos indiretos ou extensões. Depois acompanhe a entrada e saída por trás de chamadas comuns. Explicitar o conteúdo do cache permite explicar por que o mesmo programa pode causar muitas operações no dispositivo em uma execução e pouquíssimas na seguinte.

2.1 Organize um disco em blocos, mapas de bits, nós-i e diretórios

Um sistema de arquivos precisa registrar onde ficam os bytes e qual espaço está disponível. Uma organização simples no estilo Unix torna essas funções visíveis ao separar registros de alocação, nós-i e conteúdos.

Divida a partição em regiões

Um bloco é a unidade básica de alocação do sistema de arquivos. Um bloco de 4 KiB contém 4096 bytes, ou oito setores tradicionais de 512 bytes. Tamanhos binários usam KiB, MiB e GiB; taxas de transferência como MB/s usam milhões decimais de bytes por segundo.

O projeto didático vsfs, o sistema de arquivos muito simples, contém estas estruturas:

EstruturaInformações armazenadas
SuperblocoTamanho do sistema de arquivos, localização das regiões, número de nós-i e número mágico de identificação
Mapa de bits de nós-iUm bit de alocação por nó-i
Mapa de bits de dadosUm bit de alocação por bloco de dados
Tabela de nós-iMetadados e ponteiros de dados para cada posição de nó-i
Região de dadosConteúdo de arquivos comuns e diretórios

Um bit 1 no mapa significa alocado; 0 significa livre. O superbloco informa ao sistema operacional como interpretar o restante da partição ao montá-la. Os dois mapas de bits descrevem recursos diferentes: um arquivo pode ter um nó-i alocado antes de ter qualquer bloco de dados.

Localize um nó-i pelo número

Considere uma partição de 64 blocos com blocos de 4 KiB. Coloque o superbloco no bloco 0, o mapa de bits de nós-i no 1, o mapa de bits de dados no 2 e a tabela de nós-i nos blocos 3 a 7. Os dados ocupam os blocos 8 a 63. Cinco blocos da tabela de nós-i com nós-i de 256 bytes contêm 80 nós-i, pois cada bloco contém 16. Há 56 blocos de dados. Um mapa de bits de 4 KiB pode descrever 32.768 objetos, então grande parte de cada mapa fica sem uso nessa pequena organização.

Numerando as posições de nós-i a partir de zero, o nó-i 37 começa 37 × 256 = 9.472 bytes após o início da tabela. A tabela começa no byte 12.288, resultando no endereço absoluto de byte 21.760. Dividir por 4.096 resulta no bloco de disco 5 com resto 1.280. Dividir por 512 resulta no setor 42 com resto 256. Leia o bloco ou setor que o contém e depois selecione os bytes do nó-i dentro dele.

O método geral é: início da tabela em bytes mais o número do nó-i multiplicado por seu tamanho. Mantenha o endereço inicial da tabela separado do deslocamento do nó-i dentro dela. Omitir esse endereço base leva ao bloco de disco errado.

Separe nomes, metadados e conteúdos

Um nó-i registra tipo, permissões, propriedade, tamanho, horários, contagem de ligações, blocos alocados e localização dos dados. Ele não contém o nome do arquivo. O nome pertence a uma entrada de diretório, permitindo que vários nomes compartilhem um nó-i.

Um diretório tem um nó-i do tipo diretório e blocos de dados com entradas. Uma entrada simples armazena um número de nó-i, comprimento do registro, comprimento do nome e nome. O comprimento do registro permite que a travessia pule toda a entrada, incluindo o espaço reutilizável deixado pela exclusão. Diretórios grandes se beneficiam de índices: o XFS usa árvores B e o ext4 usa índices de árvore com dispersão.

Criar um arquivo encontra e define um bit livre no mapa de bits de nós-i. A alocação de dados altera de modo semelhante o mapa de bits de dados. Um alocador pode reservar uma sequência de blocos para que o arquivo cresça de forma contígua. O mapa de bits informa se um bloco está livre; o nó-i informa a qual arquivo ele pertence. Essas estruturas devem estar de acordo.

Principais conclusões

  • O superbloco descreve a organização; os mapas de bits controlam a alocação.
  • Um nó-i contém metadados e localizações de dados, enquanto diretórios contêm nomes.
  • Calcule o endereço de um nó-i a partir da base da tabela, do número e do tamanho do nó-i.
  • A alocação de nós-i e a de dados usam mapas de bits separados.

2.2 Localize os dados de um arquivo com ponteiros, blocos indiretos e extensões

Um programa vê deslocamentos consecutivos em bytes, mas os blocos de dados correspondentes podem estar espalhados pelo disco. O sistema de arquivos precisa de um mapeamento de cada bloco lógico de arquivo para sua localização física.

Siga ponteiros diretos e indiretos

Um ponteiro direto em um nó-i indica um bloco de dados. Com blocos de 4 KiB, o deslocamento de byte 10.000 fica no bloco lógico 2, pois dois blocos completos ocupam 8.192 bytes. O deslocamento dentro desse bloco é 1.808. Os blocos lógicos começam em 0, então o bloco 2 usa o terceiro ponteiro direto.

Um ponteiro indireto indica um bloco que contém endereços de blocos de dados. Um bloco de 4.096 bytes com endereços de 4 bytes contém 1.024 ponteiros. Um ponteiro duplamente indireto indica um bloco cujos ponteiros levam a 1.024 blocos indiretos. A indireção tripla acrescenta outro nível. Esse índice multinível é desbalanceado de propósito: arquivos pequenos usam ponteiros diretos sem leituras extras de blocos de ponteiros, enquanto arquivos grandes pagam pelos níveis adicionais.

Para um nó-i com 12 ponteiros diretos e um ponteiro de cada nível indireto:

Nível mais alto usadoCapacidade de dados com blocos de 4 KiB
Apenas direto12 blocos = 48 KiB
Indireto simples12 + 1.024 blocos = 4.144 KiB
Duplamente indireto12 + 1.024 + 1.024² blocos = 4.299.210.752 bytes
Triplamente indiretoAcrescenta 1.024³ blocos = outros 4 TiB

Essas são as capacidades dessa organização de ponteiros. Blocos de ponteiros também ocupam armazenamento, mas seus bytes não são conteúdo do arquivo.

Conte os blocos de ponteiros de um arquivo

Um arquivo de 5 MiB ocupa 1.280 blocos de dados de 4 KiB cada. Atribua os primeiros 12 aos ponteiros diretos. Atribua os 1.024 seguintes ao bloco indireto simples. Restam 244 blocos de dados.

Esses 244 precisam de uma raiz duplamente indireta e de um bloco indireto abaixo dela. Ao todo, o arquivo precisa de três blocos de ponteiros: o bloco indireto simples, a raiz duplamente indireta e seu único filho. Contar apenas a raiz duplamente indireta deixa de fora o filho que realmente contém os endereços de dados. Contar todos os 1.024 filhos possíveis desperdiça espaço: apenas o filho necessário é alocado.

Compare extensões e cadeias

Uma extensão registra um bloco de disco inicial e o comprimento de uma sequência. Uma sequência contígua de 1.000 blocos pode usar uma extensão em vez de 1.000 ponteiros separados. Ext4, XFS e NTFS usam extensões. O ext4 pode manter até quatro extensões em seu nó-i, com uma árvore para as demais. A fragmentação divide sequências e aumenta o número necessário de registros de extensão.

A alocação encadeada segue uma cadeia de blocos. A tabela de alocação de arquivos (FAT) armazena as ligações para o próximo bloco em uma tabela separada, geralmente mantida em cache na memória. Uma entrada de diretório identifica o primeiro bloco, e alcançar um bloco mais adiante exige seguir as ligações anteriores. O FAT não usa nós-i do Unix e não oferece suporte a duas ligações físicas para um arquivo.

MapeamentoPrincipal vantagemPrincipal custo
Ponteiros diretos e indiretosAcesso direto a arquivos pequenos; indexação escalávelBlocos extras de ponteiros para arquivos grandes
ExtensõesDescrições compactas de sequências contíguasMuitos registros quando há fragmentação
Cadeias FATAlocação encadeada simples com ligações em cacheTravessia da cadeia para acesso próximo ao fim

Deslocamentos consecutivos nunca provam contiguidade física. O alocador escolhe os locais, e o mapeamento registra essas escolhas.

Principais conclusões

  • Divida um deslocamento em bytes pelo tamanho do bloco para encontrar seu bloco lógico numerado a partir de zero.
  • Um bloco indireto contém endereços de blocos; cada nível extra multiplica o alcance.
  • Conte os blocos de ponteiros alocados separadamente dos blocos de dados.
  • Extensões descrevem sequências contíguas de forma compacta.
  • O FAT segue ligações para o próximo bloco em vez de um índice de nós-i do Unix.
  • A proximidade lógica não garante proximidade física.

2.3 Acompanhe a entrada e saída de disco nas operações de arquivo e o efeito do cache

Uma chamada de sistema pode exigir várias operações de disco ou nenhuma. Para acompanhar o trabalho, siga as estruturas que o sistema de arquivos precisa consultar e informe quais delas já estão em cache.

Percorra um caminho antes de ler o conteúdo

No modelo simples sem cache, abrir /docs/plan.txt lê cinco blocos:

  1. O nó-i da raiz, cujo número é conhecido.
  2. Os dados do diretório raiz, para encontrar docs.
  3. O nó-i de docs.
  4. Os dados do diretório docs, para encontrar plan.txt.
  5. O nó-i do arquivo.

Cada diretório cabe em um bloco, e nenhum bloco necessário está inicialmente na memória. O sistema de arquivos verifica as permissões e cria uma entrada de arquivo aberto. A abertura encontrou os metadados do arquivo; ainda não leu seu conteúdo. O número de nó-i da raiz 2 é usado no ext2 e no ext4.

Em um modelo de leitura deliberadamente sem cache, cada leitura de bloco lê o nó-i do arquivo, lê os dados e escreve o horário de acesso do nó-i. Dois blocos acrescentam seis operações de entrada e saída, totalizando onze, incluindo a abertura. Nesse modelo, fechar não exige entrada ou saída de disco. Essas contagens descrevem as regras explícitas de releitura e registro de horários do modelo; um cache real as altera.

Considere a alocação durante a criação

Criar /docs/log.txt exige mais do que encontrar um nó-i existente. No mesmo modelo simples, são realizadas quatro leituras para os nós-i e dados dos diretórios raiz e docs. Ler e escrever o mapa de bits de nós-i acrescenta duas operações de entrada e saída. Atualizar os dados de docs acrescenta uma escrita. Ler e escrever o novo nó-i acrescenta duas, e atualizar o nó-i de docs acrescenta uma. Total: dez.

Cada bloco de dados recém-alocado acrescenta cinco operações de entrada e saída: ler e escrever o mapa de bits de dados, ler e escrever o nó-i do arquivo e escrever o bloco de dados. Dois blocos resultam, portanto, em vinte operações de entrada e saída, incluindo a criação. Esse acompanhamento conta as estruturas de dados simples antes de acrescentar o tráfego do diário ou o comportamento de um cache real.

Manter um registro ajuda: liste a estrutura, se ela é lida ou escrita e por quê. Uma escrita de dados também precisa de um registro de alocação e de uma atualização de ponteiro. Uma alteração de diretório também altera seus metadados.

Deixe o cache alterar o acompanhamento

Um acerto de cache usa um bloco que já está na memória. O Linux usa um cache de páginas unificado, compartilhado com a memória virtual, e não um cache de arquivos de tamanho fixo permanentemente separado. Uma nova abertura pode reutilizar os blocos de diretório e de nós-i da travessia anterior. Ler conteúdo em cache não exige leitura do dispositivo. A política usual relatime do Linux também evita uma escrita de atime a cada leitura.

O armazenamento temporário de escritas em buffer adia o envio de blocos modificados ao disco. Duas criações de arquivos próximas no tempo podem atualizar o mesmo mapa de bits de nós-i na memória e escrevê-lo uma vez mais tarde. O sistema de arquivos pode reordenar o trabalho para obter maior vazão. Um arquivo temporário de curta duração pode ser criado e removido antes que seu conteúdo chegue ao armazenamento.

O uso de buffer melhora o desempenho, mas deixa um intervalo sem garantia de durabilidade. fsync fecha esse intervalo para um arquivo ao aguardar suas escritas necessárias. No Linux, O_DIRECT permite que programas adequados contornem o cache de páginas quando gerenciam seus próprios buffers; contornar um cache não é, por si só, a mesma operação que sincronizar o armazenamento durável.

Principais conclusões

  • Acompanhe a resolução de caminho separadamente da leitura dos dados do arquivo.
  • As contagens de operações de entrada e saída dependem do conteúdo do cache e da política de horários.
  • Criar um arquivo atualiza registros de alocação, entradas de diretório e nós-i.
  • O armazenamento temporário de escritas em buffer combina atualizações e melhora o escalonamento, mas adia a durabilidade.
  • Uma chamada de sistema não corresponde a um número fixo de operações do dispositivo.
3

Explique como o Fast File System usa a localidade para aumentar a velocidade

Uma interface rápida precisa de uma organização adequada ao dispositivo de armazenamento. Os primeiros sistemas de arquivos Unix desperdiçavam a largura de banda de discos rígidos com transferências pequenas e metadados distantes. O FFS agrupa objetos relacionados e equilibra essa localidade com as necessidades de arquivos grandes. Suas regras de alocação e seu cálculo do tamanho de fragmentos mostram como um projeto pode melhorar o desempenho enquanto os programas continuam usando operações conhecidas.

3.1 Explique por que os primeiros sistemas de arquivos Unix eram lentos e como os grupos resolvem esse problema

Um disco rígido pode transferir rapidamente uma longa sequência de bytes quando sua cabeça chega até eles. Requisições pequenas e dispersas desperdiçam tempo com busca e espera pela rotação. O Fast File System altera a alocação para que operações comuns de arquivo usem mais da largura de banda de transferência do disco.

Identifique os problemas da antiga organização Unix

A antiga organização Unix colocava todos os nós-i perto do início e todos os dados dos arquivos depois deles. Ler um arquivo podia, portanto, exigir uma longa busca dos metadados até o conteúdo. Uma lista de blocos livres espalhava gradualmente as alocações à medida que arquivos eram criados e excluídos. Até um arquivo sequencial podia resultar em muitos acessos não relacionados ao disco.

Blocos pequenos de 512 bytes pioravam isso. Cada atraso de posicionamento permitia apenas uma transferência curta antes que a próxima requisição precisasse de outra busca ou rotação. Medições históricas mostraram que o projeto antigo entregava apenas 2% da largura de banda do disco em alguns casos. Esse valor descreve o projeto antigo medido, não um limite fixo das interfaces Unix.

O Fast File System (FFS), desenvolvido em Berkeley no início da década de 1980, manteve chamadas conhecidas como open, read e write enquanto alterava a organização e a política de alocação. Blocos maiores, normalmente de 4 KiB, aumentaram os bytes transferidos por requisição. Manter metadados e conteúdo próximos reduziu a distância entre requisições relacionadas.

Construa grupos com recursos próprios

Um cilindro é o conjunto de trilhas no mesmo raio entre as superfícies dos pratos de um disco. O FFS forma grupos de cilindros com cilindros vizinhos. Um arquivo pode ter seu nó-i e seus dados no mesmo grupo, mantendo curta a busca entre metadados e dados.

Cada grupo contém uma cópia do superbloco, seus próprios mapas de bits de alocação de nós-i e dados, parte da tabela de nós-i e blocos de dados. O grupo se parece com um pequeno sistema de arquivos, mas todos os grupos pertencem a um único sistema de arquivos. Uma cópia do superbloco também ajuda na recuperação se uma cópia for danificada. O ext4 mantém cópias em grupos selecionados, em vez de em todos.

Unidades modernas ocultam sua geometria física. Ext2, ext3 e ext4 usam, portanto, grupos de blocos, sequências de endereços de blocos lógicos consecutivos, para buscar o mesmo objetivo de localidade sem depender de cilindros exatos.

Acompanhe a criação de um arquivo pequeno

Criar /docs/a.txt exige um nó-i livre, um bloco de dados, alterações nos mapas de alocação e uma nova entrada de diretório. O FFS tenta colocar o arquivo no grupo de seu diretório pai. O novo nó-i, os dados do arquivo, os mapas de bits e as atualizações do diretório podem então ficar próximos.

A operação ainda exige várias atualizações distintas. O agrupamento economiza tempo de posicionamento; ele não reúne todos os metadados e dados em um bloco. Uma organização sensível ao disco melhora o custo de acesso a essas estruturas sem alterar as operações de arquivo do programa.

Característica do armazenamentoConsequência para a alocação
Busca e rotação do disco rígidoBlocos próximos evitam longos atrasos repetidos de posicionamento
Alta taxa de transferência sequencialRequisições maiores movem mais bytes por atraso
SSD sem busca ou rotaçãoA distância importa muito menos, mas o tamanho da requisição e o comportamento de escrita ainda importam

Principais conclusões

  • Buscas longas, fragmentação e blocos pequenos limitavam a vazão de disco no Unix inicial.
  • Grupos do FFS colocam nós-i, mapas de alocação e dados próximos uns dos outros.
  • Grupos de blocos modernos preservam a localidade sem precisar da geometria física do disco.
  • O FFS melhora a alocação mantendo a interface de arquivos existente.

3.2 Aplique as regras de alocação do FFS e dimensione os fragmentos de arquivos grandes

O FFS usa nomes como pistas sobre quais arquivos um programa acessará em conjunto. Ele também limita quanto espaço um arquivo grande pode ocupar em um grupo, equilibrando a localidade com espaço para alocações futuras.

Aloque diretórios e arquivos

Um novo diretório vai para um grupo com relativamente poucos diretórios e muitos nós-i livres. Isso distribui diretórios diferentes e deixa espaço para seus futuros arquivos. O nó-i de um arquivo comum vai para o grupo de seu diretório pai, e seus dados ficam próximos do nó-i.

Para /a/b, /a/c e /a/d, os três arquivos são colocados próximos ao diretório /a. Um arquivo /b/f segue seu próprio diretório pai /b, geralmente para outro grupo. Isso aproveita a localidade no espaço de nomes: um compilador trabalhando em um projeto frequentemente abre vários arquivos no mesmo diretório. A relação de diretório prevê padrões de acesso; não é uma garantia para todos os programas.

Abra uma exceção para um arquivo grande

Um arquivo grande poderia consumir os blocos livres de seu grupo e forçar todos os vizinhos posteriores a ficar em outro lugar. O FFS mantém a primeira parte, alcançada por 12 ponteiros diretos, no grupo do nó-i. Com blocos de 4 KiB, isso equivale a 48 KiB. Fragmentos posteriores, cada um alcançado por um bloco indireto que contém 1.024 ponteiros, abrangem 4 MiB de dados e vão para outros grupos pouco utilizados.

Isso sacrifica parte da localidade dentro do arquivo grande para preservar a localidade dos outros arquivos do diretório. O arquivo grande paga um atraso de posicionamento entre fragmentos, então cada fragmento deve ser grande o suficiente para compensar esse custo.

Deduzindo o tamanho do fragmento

Considere que o posicionamento leve T segundos e a taxa de transferência seja R bytes por segundo. Um fragmento C leva C/R segundos para ser transferido. A fração do tempo total gasta em transferência é:

F=C/RT+C/R.

Resolvendo, obtemos:

C=F1−FRT.

A 100 MB/s com 10 ms de posicionamento, R vezes T é 1 MB. Um fragmento de 1 MB precisa de 10 ms de transferência mais 10 ms de posicionamento, resultando em 50% da largura de banda máxima. Para 90%, multiplique 1 MB por 0,9/0,1 para obter 9 MB. Para 99%, o multiplicador é 99, resultando em 99 MB. Converta milissegundos em segundos antes de multiplicar por MB/s. O denominador inclui o tempo de transferência e o de posicionamento; dividir apenas pelo tempo de transferência ocultaria a sobrecarga.

As taxas de transferência melhoraram mais rápido que os atrasos de posicionamento, então alcançar a mesma fração da taxa máxima exige fragmentos maiores à medida que a diferença aumenta.

Acomode arquivos pequenos e preserve a compatibilidade

O FFS também usava sub-blocos de 512 bytes para que arquivos pequenos não desperdiçassem um bloco inteiro de 4 KiB. Arquivos em crescimento eram copiados para blocos inteiros; a biblioteca C armazenava temporariamente escritas em partes de 4 KiB para reduzir movimentações repetidas. A parametrização histórica deixava intervalos de rotação entre blocos consecutivos para que um próximo bloco solicitado ainda não tivesse passado pela cabeça. Buffers de trilha modernos tornam essa técnica desnecessária ao buscar uma trilha internamente.

Nomes longos, ligações simbólicas e rename atômico eram recursos adicionais do FFS. O ganho de velocidade da organização em si não exigia alterar programas existentes.

Principais conclusões

  • O FFS usa um diretório como pista de que seus arquivos serão acessados em conjunto.
  • Diretórios são distribuídos entre grupos; seus arquivos comuns são mantidos próximos.
  • Fragmentos de arquivos grandes são distribuídos para deixar espaço para arquivos vizinhos.
  • Inclua os tempos de posicionamento e transferência ao calcular a largura de banda efetiva.
  • Sub-blocos reduzem o desperdício de espaço em arquivos pequenos; o uso de buffer de trilha substitui o ajuste de intervalos de rotação.
  • O FFS acrescentou recursos além de acelerar chamadas existentes.
4

Mantenha um sistema de arquivos consistente após falhas

Uma falha pode interromper uma operação lógica de arquivo entre várias escritas físicas. Compare os estados deixados por um acréscimo inacabado e depois examine como um verificador repara metadados e como um diário faz a recuperação depender de transações registradas. A ordenação dos dados e a reutilização de blocos revelam por que uma confirmação válida exige mais que um marcador. Outros projetos de consistência resolvem o mesmo problema com custos diferentes.

4.1 Explique o problema da consistência após falhas

Um acréscimo parece uma ação única para um programa. No disco, ele altera várias estruturas, e uma falha pode deixar apenas algumas delas atualizadas. A consistência após falhas trata de como esses resultados parciais podem ser evitados ou reparados.

Acompanhe três escritas independentes

Acrescentar um bloco de 4 KiB a um arquivo existente altera:

  • Db, o novo bloco de dados que contém os bytes acrescentados.
  • I, o nó-i com tamanho maior e um ponteiro para esse bloco.
  • B, o mapa de bits de dados que marca o bloco como alocado.

Os três chegando ao armazenamento produzem a atualização consistente pretendida. Nenhum chegando ao armazenamento deixa o estado antigo consistente. O perigo está nas seis combinações parciais. O dispositivo pode reordenar requisições, então enviá-las em determinada ordem sem esperar não estabelece a ordem de conclusão.

Classifique cada resultado parcial
Escritas que sobrevivemResultado
Apenas DbOs novos bytes existem, mas nenhum ponteiro os alcança; o estado antigo do sistema de arquivos permanece consistente
Apenas IO nó-i aponta para conteúdo antigo e o mapa de bits ainda indica que o bloco está livre
Apenas BUm bloco alocado não tem dono: vazamento de espaço
I e BOs metadados concordam, mas a nova região do arquivo contém conteúdo antigo
I e DbO arquivo aponta para novos dados válidos que o mapa de bits ainda indica como livres
B e DbNovos bytes estão alocados, mas inacessíveis: dados perdidos e vazamento de espaço

Uma inconsistência ocorre quando os metadados discordam, como um nó-i que reivindica um bloco cujo bit de alocação indica que está livre. O alocador pode então atribuir esse mesmo bloco a outro arquivo. Um vazamento de espaço de armazenamento reserva espaço que nenhum arquivo pode alcançar. Dados residuais inválidos podem ser mais difíceis de detectar: I e B concordam perfeitamente, embora Db nunca tenha chegado.

Db sozinho não causa vazamento de espaço alocado, pois o mapa de bits ainda permite que o bloco seja reutilizado. Escrever bytes em um local livre não é o mesmo que alocá-lo. B sozinho causa vazamento de espaço, pois a alocação sobreviveu sem um ponteiro que indique seu dono.

Separe estrutura de significado

Um verificador pode comparar ponteiros com mapas de bits. Em geral, ele não pode determinar se bytes plausíveis são aqueles que um programa pretendia salvar. O resultado com I e B demonstra esse limite: um arquivo estruturalmente válido pode ter conteúdo incorreto.

A transição desejada é atômica em toda a atualização: recuperar o estado antigo completo ou o novo estado completo. Um modelo simples de armazenamento fornece escritas atômicas apenas para um setor, tradicionalmente de 512 bytes. Vários blocos do sistema de arquivos excedem essa unidade, então o sistema de arquivos precisa construir um protocolo mais forte. As garantias reais de escrita atômica dependem do dispositivo e da interface; o protocolo de diário deve fazer seu registro de confirmação caber na unidade atômica compatível.

O uso de buffer aumenta o número de alterações que podem ser perdidas, mas não é a causa principal. Mesmo enviar cada escrita imediatamente deixa um ponto de possível falha entre conclusões separadas. A criação, a renomeação e a exclusão de arquivos também alteram várias estruturas. Entender seus estados de falha começa com o mesmo exercício: identifique cada bloco alterado e pergunte o que acontece quando apenas parte deles sobrevive.

Principais conclusões

  • Uma operação lógica de arquivo pode exigir várias escritas de blocos concluídas independentemente.
  • Compare dados, ponteiros de nós-i e bits de alocação após cada possível ponto de falha.
  • Metadados consistentes ainda podem apontar para conteúdo incorreto de arquivo.
  • A atomicidade entre vários blocos exige um protocolo de sistema de arquivos além de uma única escrita atômica do dispositivo.

4.2 Verifique e repare um sistema de arquivos com fsck

Um verificador de sistemas de arquivos repara relações entre estruturas armazenadas após a ocorrência de danos. Seu ponto forte é uma visão ampla dos metadados; seus pontos fracos são o custo da varredura e o desconhecimento do conteúdo pretendido dos arquivos.

Reconstrua o quadro de alocação

O fsck, abreviação de verificação do sistema de arquivos, examina um sistema de arquivos após um desligamento incorreto, antes da montagem normal. Ele verifica se o tamanho e as contagens do superbloco fazem sentido e pode usar um superbloco de segurança se a cópia principal estiver danificada.

Em seguida, percorre nós-i e blocos indiretos para determinar a quais blocos de dados os arquivos realmente fazem referência. A partir dessas informações de propriedade, ele reconstrói os mapas de bits de alocação. Se um nó-i válido aponta para o bloco 74 enquanto o mapa de bits indica que 74 está livre, o mapa deve ser alterado para indicar que está alocado. Apenas confiar no mapa de bits poderia permitir que uma alocação posterior sobrescrevesse os dados do arquivo.

A divergência oposta é um bit marcado como alocado no mapa sem um ponteiro de nó-i que indique seu dono. Reconstruir o mapa pode recuperar esse espaço. O reparo escolhe uma relação consistente; ele não pode reconstruir bytes arbitrários de uma aplicação que estejam faltando.

Verifique objetos, nomes e ligações

Todo nó-i alocado precisa de um tipo válido, como arquivo comum, diretório ou ligação simbólica. Um nó-i que não pode ser reparado é limpo e os registros de alocação são ajustados.

Percorrer a partir da raiz permite ao fsck contar referências de diretórios a cada nó-i. Ele compara essas referências observadas com as contagens de ligações registradas e corrige erros. Um nó-i alocado que nenhum diretório alcança pode ser movido para lost+found, dando ao conteúdo recuperado um nome acessível sem conhecer seu caminho original.

Outras verificações incluem:

  • Propriedade duplicada: dois nós-i reivindicam um bloco de dados. Um reparo pode limpar um nó-i ou dar a cada arquivo uma cópia separada.
  • Endereços inválidos: ponteiros fora do intervalo válido do sistema de arquivos devem ser limpos.
  • Estrutura de diretórios: . e .. devem ser válidos e ocupar as primeiras entradas na organização simples de diretórios, as entradas devem se referir a nós-i alocados e diretórios não devem ter vários diretórios pais.

Essas verificações interagem. Limpar um nó-i inválido também altera quais blocos devem estar alocados e quais entradas de diretório continuam válidas. Portanto, um reparo precisa de uma visão coerente dos metadados, não apenas de uma lista de bits individuais suspeitos.

Entenda o que um resultado sem erros estabelece

Suponha que o nó-i e o mapa de bits de um acréscimo tenham chegado ao disco, mas seus dados não. O ponteiro está no intervalo, o bit de alocação está definido e a estrutura de ligações é válida. O fsck não tem divergência de metadados a reparar. O arquivo pode passar pela verificação enquanto contém bytes antigos em sua região recém-adicionada.

O tempo de execução também depende principalmente do tamanho do sistema de arquivos, não da quantidade alterada antes de uma falha. Uma falha durante uma atualização de três blocos ainda pode exigir a varredura de todos os metadados. Em um sistema de arquivos grande, isso pode levar de minutos a horas, mantendo o acesso normal indisponível durante a varredura.

O registro em diário reduz o trabalho normal de recuperação após falhas ao registrar atualizações recentes. Ele não torna um verificador obsoleto: erros de software ou falhas de hardware podem danificar estruturas além do que a reaplicação do diário pode reparar. O fsck continua sendo uma ferramenta de reparo para esses casos.

Principais conclusões

  • O fsck reconstrói a alocação a partir de ponteiros de nós-i e corrige relações entre metadados.
  • A travessia de diretórios verifica contagens de ligações e encontra nós-i alocados inacessíveis.
  • A verificação pode reparar propriedade duplicada e ponteiros inválidos.
  • Uma verificação sem erros de metadados não pode estabelecer que os bytes da aplicação estão corretos.
  • A varredura completa de metadados cresce com o tamanho do sistema de arquivos, mesmo após uma pequena atualização interrompida.

4.3 Proteja atualizações com registro de dados em diário e reaplique o registro

Um diário registra uma atualização antes que o sistema de arquivos sobrescreva seus locais normais. Após uma falha, esse registro informa à recuperação quais alterações completas podem ser refeitas. Isso é o registro antecipado de alterações. Ext3, ext4, XFS e NTFS usam registro em diário, embora seus formatos exatos de registro sejam diferentes.

Descreva uma atualização como uma transação

Para um acréscimo, o registro de dados em diário registra cópias do novo nó-i I, do mapa de bits B e do bloco de dados Db. Um registro de início de transação, TxB, contém um identificador e os destinos finais dos blocos. Um registro de fim de transação, TxE, contém o identificador correspondente e marca a confirmação.

Registrar imagens completas dos blocos substitutos é registro físico. Registrar uma descrição da operação é registro lógico. Refazer operações fisicamente tem uma propriedade útil: escrever a mesma imagem no mesmo endereço novamente tem o mesmo efeito. A recuperação pode, portanto, repetir uma consolidação que terminou parcialmente antes da falha.

Confirme depois da área útil

O protocolo básico tem quatro etapas:

  1. Escrita no diário: escreva TxB, I, B e Db no diário e aguarde a conclusão durável.
  2. Confirmação: escreva TxE e aguarde. A transação está agora confirmada.
  3. Consolidação: copie I, B e Db do diário para seus locais finais.
  4. Liberação: libere o espaço dessa transação no diário para reutilização posterior.

TxE não deve se tornar durável antes de sua área útil. Se todos os cinco blocos fossem enviados sem garantia de ordenação, um dispositivo poderia concluir TxB e TxE enquanto deixaria Db sem escrever. A recuperação confundiria uma transação incompleta com uma válida. No modelo básico, TxE cabe em uma escrita atômica de setor, então está presente ou ausente como um registro de confirmação completo.

Caches de escrita dos dispositivos também devem respeitar o limite de durabilidade. Descargas de cache ou escritas forçadas impedem que um cache volátil do dispositivo faça o protocolo acreditar que uma área útil está segura quando uma queda de energia ainda poderia apagá-la.

Recupere-se de dois pontos de falha

Uma falha após a área útil, mas antes de TxE, deixa uma transação não confirmada. A recuperação a ignora, mantendo o estado antigo do arquivo.

Uma falha após TxE, mas durante a consolidação, deixa uma transação confirmada. A recuperação escreve todas as suas imagens em seus locais finais em ordem. Algumas escritas podem repetir trabalho já feito, o que não causa dano para essas imagens de blocos. Isso é recuperação por reaplicação. O espaço do diário não pode ser reutilizado até que as imagens confirmadas cheguem aos seus locais finais.

O diário é um registro circular. Seu superbloco controla o intervalo ativo, permitindo que o espaço concluído seja reutilizado. Agrupar várias atualizações em uma transação pode registrar uma vez um bloco de diretório ou mapa de bits compartilhado. O intervalo de confirmação padrão do ext4 é de 5 segundos, então a confirmação não ocorre automaticamente de imediato após cada escrita da aplicação.

Separe somas de verificação de durabilidade

Uma soma de verificação da transação pode revelar blocos de área útil ausentes ou fragmentados mesmo quando há um registro de confirmação. Um protocolo baseado em soma de verificação pode enviar as escritas do diário juntas e aceitar apenas transações cuja validação seja bem-sucedida. Somas de verificação detectam registros incompletos; descargas de cache estabelecem se os bytes confirmados realmente sobrevivem.

Uma escrita de aplicação em buffer e não confirmada ainda pode desaparecer. Um programa que exige conclusão durável usa fsync e verifica se foi bem-sucedido.

Principais conclusões

  • O registro antecipado de alterações registra atualizações completas antes de alterar seus locais finais.
  • No protocolo básico, a durabilidade da área útil precede o registro de confirmação.
  • A recuperação refaz transações confirmadas e ignora as não confirmadas.
  • Refazer imagens idênticas de blocos é seguro após uma consolidação parcial.
  • A consolidação deve terminar antes que o espaço do diário seja reutilizado.
  • O agrupamento reduz o tráfego de metadados, enquanto fsync estabelece a durabilidade necessária.

4.4 Reduza o custo do registro em diário e compare outras abordagens

O registro de dados em diário escreve o conteúdo dos arquivos no diário e depois em seus locais finais. Registrar apenas metadados em diário reduz esse tráfego, mas a ordem entre dados e metadados ainda determina o que a recuperação pode expor.

Mantenha os dados à frente dos ponteiros confirmados

No registro ordenado de metadados em diário, Db vai diretamente para seu local final. TxB, I e B vão para o diário. Esses dois conjuntos de escritas podem ocorrer em paralelo, mas ambos devem terminar antes de TxE confirmar os metadados. Após a confirmação, I e B podem ser consolidados e o espaço do diário liberado.

A dependência é fundamental: o bloco indicado por um ponteiro deve estar pronto antes que esse ponteiro possa ser recuperado. Se I for confirmado primeiro, a recuperação pode instalar um ponteiro válido para bytes deixados por um usuário anterior do bloco. Os metadados estariam de acordo sem conter os dados pretendidos.

Modo do ext4O que entra no diárioRegra de dados antes da confirmação
data=journalDados e metadadosOs dados fazem parte da transação registrada
data=orderedMetadadosOs dados referenciados chegam ao local final antes da confirmação
data=writebackMetadadosNão há essa garantia de ordenação dos dados

O modo ordenado é o padrão. O registro apenas de metadados em diário não implica o modo ordenado: o modo writeback pode recuperar arquivos estruturalmente íntegros com conteúdo desatualizado. O modo de diário de dados ilustra o protocolo completo, mas custa uma segunda escrita dos dados do arquivo.

Evite que a reaplicação danifique um bloco reutilizado

O conteúdo de diretórios é considerado metadado. Suponha que um bloco de diretório no endereço 1000 seja registrado, depois o diretório seja removido e o mesmo endereço passe a conter dados de um arquivo comum. Esses novos dados do usuário não são registrados no modo que registra apenas metadados. Reaplicar a imagem antiga do diretório após uma falha sobrescreveria os bytes do novo arquivo.

Um registro de revogação confirmado informa à recuperação para ignorar cópias registradas desse bloco em transações até a transação que fez a revogação, inclusive. Ele não proíbe todo uso futuro do endereço. Se uma transação posterior registrar esse bloco novamente, a imagem posterior ainda poderá ser reaplicada. Esse limite de tempo distingue a revogação de marcar permanentemente um bloco como inutilizável.

Compare alternativas

As atualizações suaves impõem dependências entre escritas comuns sem um diário. Escrever dados inicializados antes de um ponteiro evita dados residuais inválidos acessíveis, embora operações interrompidas possam causar vazamento de espaço a ser recuperado por uma verificação posterior em segundo plano. O FFS do FreeBSD usa essa abordagem. Acompanhar todas as dependências dificulta a implementação.

A cópia na escrita (COW) escreve blocos alterados em locais não utilizados e usa uma troca atômica do ponteiro raiz para publicar a nova árvore. A árvore antiga permanece disponível até a troca. ZFS, Btrfs e WAFL usam projetos relacionados; preservar blocos antigos também permite retratos do estado.

Projetos de pesquisa baseados em ponteiros de retorno registram a propriedade dos dados de volta aos nós-i, de modo que atualizações incompletas deixem divergências detectáveis. A consistência otimista após falhas reduz a espera e usa somas de verificação e outras verificações para detectar trabalho incompleto. Cada abordagem equilibra tráfego de escrita, garantias de recuperação e complexidade de implementação. O registro ordenado de metadados em diário mantém a recuperação curta enquanto escreve dados comuns de arquivos uma vez.

Principais conclusões

  • O registro ordenado em diário envia dados aos locais finais antes de confirmar seus ponteiros nos metadados.
  • Registro apenas de metadados em diário e registro ordenado em diário não são sinônimos.
  • Registros de revogação impedem que imagens registradas obsoletas sobrescrevam blocos reutilizados.
  • Atualizações suaves ordenam dependências; cópia na escrita publica uma nova árvore.
  • Menos tráfego de escrita pode exigir ordenação ou validação mais cuidadosa.
5

Explique como um sistema de arquivos estruturado em registro escreve dados e recupera espaço

Escritas sequenciais aproveitam bem um disco, mas mover cada bloco atualizado cria novos problemas de busca e gerenciamento de espaço. Acompanhe o LFS desde os segmentos em buffer até o mapa de nós-i e a região de ponto de verificação e veja como o limpador encontra blocos ativos e recupera segmentos livres. A recuperação deve recuperar o mapeamento válido mais recente sem confundir um ponto de verificação interrompido com um completo.

5.1 Escreva sequencialmente em segmentos e localize nós-i pelo mapa de nós-i

Um sistema de arquivos estruturado em registro transforma pequenas atualizações dispersas em grandes escritas sequenciais. Isso ajuda um disco cuja taxa de transferência é alta, mas cujos atrasos de busca e rotação continuam custosos.

Reúna atualizações em um segmento

O LFS de Berkeley, desenvolvido por Rosenblum e Ousterhout e publicado em 1991, partiu de mudanças nas cargas de trabalho. Memórias maiores atendiam a mais leituras pelo cache, fazendo das escritas uma parcela maior do tráfego de disco. A largura de banda sequencial crescia mais rápido que a velocidade de posicionamento. O FFS ainda precisava de várias escritas curtas de metadados e dados para criar um arquivo pequeno, e escritas pequenas também funcionavam mal com RAID de paridade.

O LFS armazena temporariamente dados alterados, nós-i e informações de mapeamento juntos na memória. Ele os escreve em uma região não utilizada do disco como um grande segmento. Atualizar um bloco cria uma nova versão em um novo endereço; a versão anterior permanece fisicamente presente até que a limpeza recupere seu segmento.

Segmentos amortizam o posicionamento assim como grandes fragmentos do FFS. Com taxa R, tempo de posicionamento T e fração desejada F do tempo gasta em transferência, o tamanho em buffer é:

D=F1−FRT.

A 200 MB/s e 5 ms, atingir 95% exige 19 MB. A transferência leva 95 ms, o posicionamento leva 5 ms e a taxa efetiva é 19 MB por 0,1 s = 190 MB/s. Uma fração desejada alta pode exigir um segmento maior que o tamanho usual de centenas de kilobytes a vários megabytes. O tamanho necessário depende do dispositivo e da meta, não da palavra “segmento”.

Encontre um nó-i que continua mudando de lugar

A fórmula de tabela fixa de nós-i não funciona mais: cada atualização de nó-i escreve em um novo endereço. O LFS acrescenta um mapa de nós-i, ou imap, que associa cada número de nó-i ao seu endereço mais recente no disco. Partes atualizadas do imap são escritas no registro ao lado dos nós-i que descrevem.

Uma região de ponto de verificação (CR) fixa registra onde estão as partes mais recentes do imap. Ela é atualizada periodicamente, por exemplo a cada 30 segundos, para que a escrita ocasional em local fixo não domine o tráfego.

A sequência de busca é:

  1. Leia a CR na montagem para encontrar as partes atuais do imap.
  2. Carregue o imap na memória.
  3. Procure o número do nó-i solicitado no imap.
  4. Leia esse nó-i mais recente e siga seus ponteiros de dados.

Depois que o imap está em cache, leituras comuns de arquivos usam praticamente o mesmo caminho do nó-i aos dados que no FFS. O mapeamento adicional torna viável a movimentação sem alterar a identidade estável do arquivo.

Mantenha estáveis as entradas de diretório

Um diretório armazena nomes e números de nós-i. Se /docs/report.txt for atualizado, seu nó-i muda de lugar, mas mantém seu número. O imap muda; a entrada de diretório não precisa mudar apenas por causa dessa movimentação.

Sem essa indireção, um diretório que contivesse endereços físicos de nós-i precisaria ser reescrito sempre que um nó-i filho mudasse de lugar. Seu próprio nó-i então mudaria de lugar, forçando uma alteração em seu diretório pai, e assim por diante até a raiz. O imap interrompe esse problema da atualização recursiva.

O LFS torna as escritas sequenciais, mas não todas as leituras. Blocos inalterados de um arquivo podem permanecer em segmentos antigos enquanto versões posteriores de outros blocos vão para outro lugar. Ler esse arquivo ainda pode exigir buscas entre segmentos; caches grandes de memória fazem parte da motivação do projeto.

Principais conclusões

  • O LFS escreve dados e metadados em buffer juntos em espaço não utilizado, em grandes segmentos.
  • O imap associa números estáveis de nós-i a endereços de nós-i que mudam de lugar.
  • A região fixa de ponto de verificação localiza as partes mais recentes do imap.
  • Entradas de diretório mantêm números de nós-i, evitando reescritas recursivas dos diretórios pais.
  • O tamanho do segmento deve amortizar o posicionamento; as leituras ainda podem ser dispersas.

5.2 Recupere espaço com o limpador de segmentos e restaure o sistema após uma falha

Escrever novas versões em locais não utilizados mantém os bytes antigos fisicamente presentes. O LFS precisa distinguir versões antigas inacessíveis de blocos ativos, recuperar grandes regiões livres e recuperar um mapeamento utilizável após uma falha.

Limpe segmentos inteiros

O limpador de segmentos lê segmentos parcialmente ocupados, copia seus blocos ativos para um número menor de novos segmentos e libera os segmentos antigos. Se quatro segmentos de mesmo tamanho tiverem, cada um, um quarto de dados ativos, seus dados ativos combinados preencherão um novo segmento. Liberar os quatro segmentos antigos após a cópia resulta em um ganho de três segmentos de capacidade utilizável.

Limpar segmentos inteiros preserva grandes regiões contíguas para futuras escritas sequenciais. A cópia tem um custo: blocos ativos são lidos e escritos novamente, embora nenhuma aplicação os tenha alterado. Um disco quase cheio com segmentos predominantemente ativos pode exigir muita cópia para recuperar pouco espaço livre.

Determine se um bloco está ativo

Um resumo do segmento identifica o nó-i proprietário de cada bloco e o deslocamento do bloco lógico de arquivo. Para testar um bloco no endereço A, use o imap para encontrar o nó-i mais recente desse proprietário. Siga seu ponteiro para o bloco lógico registrado. Se o ponteiro ainda for igual a A, essa é a versão ativa. Se apontar para outro lugar, A está obsoleto.

Por exemplo, um resumo associa o endereço 600 ao nó-i 14, bloco lógico 2. O nó-i 14 atual aponta o bloco lógico 2 para o endereço 920. O bloco 600 está inativo mesmo que seus bytes pareçam dados válidos. A condição de ativo depende da acessibilidade atual, não de quão recentemente um bloco foi escrito ou de seu conteúdo parecer útil.

Números de versão aceleram a identificação de blocos inativos. Excluir um arquivo ou truncá-lo a zero aumenta sua versão no imap. Um bloco de segmento que contém uma versão mais antiga pode ser classificado como inativo sem ler o nó-i.

A política de limpeza também considera a mudança esperada. Segmentos quentes contêm blocos sobrescritos com frequência; esperar pode permitir que mais de seus blocos se tornem inativos sem copiá-los. Segmentos frios mudam pouco, então a política original do LFS os limpa mais cedo. A política deve equilibrar fração ativa, idade e espaço disponível; a temperatura de um segmento, por si só, não mede o custo imediato da cópia.

Recupere o mapeamento e o trabalho recente

O LFS mantém duas regiões de ponto de verificação em extremidades opostas do disco e alterna as atualizações. Cada atualização escreve um cabeçalho com registro de horário, o corpo e um registro de horário final correspondente. A recuperação escolhe a região mais recente cujo início e fim correspondem. Uma atualização mais recente interrompida não substitui um ponto de verificação mais antigo e completo.

O ponto de verificação pode não incluir os segmentos concluídos mais recentes. Portanto, a recuperação reaplica as atualizações a partir do fim do registro nele anotado, encontrando atualizações posteriores válidas e aplicando-as para reconstruir o mapeamento atual. Dados que nunca formaram uma atualização válida e recuperável não podem ser recriados a partir da memória após uma queda de energia.

Sistemas relacionados com cópia na escrita preservam blocos antigos para oferecer retratos do estado; ZFS, Btrfs e WAFL compartilham essa ideia geral. Controladores de SSD geralmente usam camadas de tradução flash estruturadas em registro, enquanto o F2FS aplica ideias de estruturação em registro no nível do sistema de arquivos para armazenamento em memória flash. Cada um ainda precisa de uma forma de recuperar o espaço deixado por versões obsoletas.

Principais conclusões

  • O limpador copia blocos ativos para menos segmentos e libera os segmentos antigos.
  • A condição de ativo depende do mapeamento do nó-i mais recente, não do conteúdo aparente de um bloco.
  • Divergências de versão podem identificar blocos inativos rapidamente.
  • Esperar para limpar segmentos quentes pode evitar a cópia de blocos que logo ficarão obsoletos.
  • A recuperação seleciona um ponto de verificação completo e reaplica atualizações posteriores válidas.
  • A limpeza acrescenta operações de entrada e saída e pode se tornar custosa quando resta pouco espaço livre.
6

Compare como os sistemas de arquivos distribuídos compartilham arquivos pela rede

Compartilhar arquivos entre máquinas traz respostas incertas e cópias em cache que podem discordar. O NFS mostra como requisições que contêm todas as informações necessárias e novas tentativas seguras simplificam um tipo de recuperação de falha. O AFS mostra como o cache de arquivos completos e os compromissos de notificação de alterações reduzem o trabalho do servidor. Compare seus limites de compartilhamento e estados de falha para prever quando outro cliente vê uma alteração e quando atualizações concorrentes podem ser perdidas.

6.1 Explique como o NFS se recupera de falhas com requisições sem estado

Um sistema de arquivos distribuído mantém arquivos em um servidor enquanto programas em máquinas clientes usam chamadas de arquivo conhecidas. O cliente traduz essas chamadas em requisições de rede. Atrasos e falhas trazem uma questão que chamadas locais normalmente ocultam: o que um cliente deve fazer quando não consegue saber se uma requisição foi concluída?

Mantenha o estado dos arquivos abertos no cliente

O sistema de arquivos em rede (NFS) da Sun começou na década de 1980. O NFSv2 tornou seu servidor sem estado em relação a arquivos abertos. O servidor armazena arquivos, mas não se lembra dos descritores ou deslocamentos atuais de cada cliente. Cada requisição contém informações suficientes para ser executada sem uma requisição de abertura anterior.

Um identificador de arquivo remoto identifica o volume do servidor, o número do nó-i e a geração do nó-i. A geração muda quando um número de nó-i é reutilizado, impedindo que um identificador antigo nomeie acidentalmente um arquivo diferente nessa posição reutilizada.

Para abrir /home/ana/notes.txt, o cliente começa com um identificador da raiz e envia LOOKUP para home, ana e notes.txt. Ele mantém o identificador resultante em seu próprio estado de arquivo aberto. Ler os primeiros 4 KiB torna-se uma requisição READ que contém esse identificador, deslocamento 0 e quantidade 4096. Fechar o descritor local não exige uma requisição CLOSE do NFSv2 porque o servidor não tem uma entrada de arquivo aberto a liberar.

Tente novamente sem repetir um efeito

Se nenhuma resposta chegar, o cliente não consegue distinguir uma requisição perdida, um servidor indisponível ou uma resposta perdida. Ele reenvia a requisição após um tempo limite.

Uma operação é idempotente quando repeti-la tem o mesmo efeito que executá-la uma vez. READ, LOOKUP e GETATTR não modificam o conteúdo armazenado. Uma WRITE com deslocamento explícito também repete com segurança os mesmos bytes no mesmo local nesse modelo. Repetir uma requisição que diz “acrescente estes bytes ao fim atual” acrescentaria uma segunda cópia; o deslocamento em uma WRITE do NFS evita essa ambiguidade.

Algumas requisições precisam de cuidado extra. Tentar novamente uma MKDIR bem-sucedida após a perda de sua resposta pode retornar “já existe”. O diretório está presente, mas a resposta repetida difere do sucesso original. A recuperação sem estado não transforma toda operação em uma requisição simples que pode ser repetida.

Torne as confirmações confiáveis

O NFSv2 deve tornar uma WRITE durável antes de confirmar o sucesso. Caso contrário, o servidor poderia confirmar um bloco, perdê-lo da memória durante uma falha e depois aceitar blocos posteriores. O cliente acreditaria que todas as escritas foram bem-sucedidas enquanto o arquivo teria uma atualização intermediária ausente.

Respostas estáveis evitam essa falha com um custo de desempenho. O NFSv3 acrescentou escritas instáveis seguidas de COMMIT, permitindo que várias escritas se tornem duráveis em conjunto. O cliente deve distinguir uma confirmação instável de uma conclusão durável.

Diferencie versões do protocolo

Um protocolo com estado precisa de mecanismos para recuperar o estado de arquivos abertos e de travamento após a reinicialização de um servidor e recuperar os recursos associados ao estado de clientes que falharam. O NFSv4 aceita deliberadamente essa complexidade: tem OPEN, CLOSE, travas e concessões temporárias que os clientes renovam. O cliente Linux normalmente tenta primeiro a versão 4.2 e recorre a versões anteriores quando necessário. Portanto, chamar o NFSv2 de sem estado não descreve todas as versões do NFS.

Principais conclusões

  • O NFSv2 mantém descritores e deslocamentos nos clientes; cada requisição contém todas as informações necessárias.
  • Identificadores de arquivos remotos incluem uma geração para rejeitar identidades antigas após a reutilização de nós-i.
  • Deslocamentos explícitos tornam segura a repetição da mesma WRITE no modelo de novas tentativas.
  • O NFSv2 confirma escritas somente após o armazenamento estável; o NFSv3 pode adiar a durabilidade até COMMIT.
  • O NFSv4 mantém estado e usa mecanismos de recuperação e concessões temporárias.

6.2 Compare o cache e a consistência do NFS e do AFS

O cache no cliente economiza viagens pela rede, mas cria várias cópias de arquivos compartilhados. A regra de consistência determina quando outra máquina deve parar de usar uma cópia antiga e buscar as alterações de quem escreveu.

Valide caches NFS nos limites de compartilhamento

Na consistência entre fechamento e abertura do NFS, fechar um arquivo modificado descarrega as escritas em buffer para o servidor. Uma abertura posterior em outro cliente verifica se a cópia está atualizada e vê essas alterações. GETATTR ou uma validação relacionada compara atributos do servidor com atributos em cache, descartando dados desatualizados em cache quando uma alteração é detectada.

Verificar a cada acesso sobrecarregaria o servidor. O Linux mantém atributos de arquivos comuns em cache por intervalos padrão de 3 a 60 segundos. Um processo que mantém um arquivo aberto pode, portanto, ler dados desatualizados em cache entre verificações. A abertura é um limite de compartilhamento mais forte que uma leitura qualquer por um descritor já aberto. O comportamento entre fechamento e abertura não promete visibilidade imediata de cada escrita individual.

Reutilize arquivos completos com compromissos de notificação do AFS

O sistema de arquivos Andrew (AFS) foi projetado na Universidade Carnegie Mellon na década de 1980 para atender a muitos clientes por servidor. Quando não existe uma cópia local válida, a abertura busca o arquivo inteiro no disco local. Leituras e escritas usam então essa cópia, e fechar um arquivo modificado envia a nova versão inteira ao servidor. Uma cópia válida em cache pode ser reaberta sem baixá-la novamente.

O AFSv1 verificava a validade a cada abertura e deixava a resolução de caminho para o servidor. O AFSv2 transferiu a resolução para os clientes, que mantêm diretórios em cache, e introduziu compromissos de notificação de alterações. O servidor promete notificar um cliente quando um objeto em cache muda. Até que essa promessa seja invalidada, o cliente reutiliza sua cópia sem verificações repetidas. Seu identificador de arquivo inclui um volume, um identificador de arquivo e um identificador de unicidade.

Acompanhe duas sessões sobrepostas

Suponha que os clientes A e B abram um arquivo. A altera sua cópia local e fecha o arquivo, enviando a nova versão ao servidor. O servidor invalida os compromissos de notificação dos outros clientes. Uma abertura posterior em B busca a nova versão, mas a sessão já aberta de B mantém sua cópia existente até fechar e reabrir.

Se ambas as máquinas modificarem suas cópias, a última a fechar substitui o arquivo inteiro no servidor. Os blocos das duas cópias não são mesclados. Duas edições em deslocamentos diferentes ainda podem perder as alterações de um cliente porque a prevalência do último fechamento escolhe uma versão completa. Processos em uma máquina cliente veem as escritas uns dos outros imediatamente.

Os compromissos de notificação são estado do servidor. Após a reinicialização de um cliente, arquivos em cache são suspeitos porque notificações podem ter sido perdidas. Após a reinicialização de um servidor, os clientes devem detectar a perda das promessas de notificação, por mensagens periódicas de presença ou um aviso do servidor, e revalidar o cache.

Relacione o cache à carga de trabalho
Carga de trabalho ou questãoNFSAFS
Pequena parte de um arquivo grandeTransfere blocos solicitadosA transferência do arquivo completo pode desperdiçar trabalho
Leituras repetidas de arquivo grande além da capacidade da memóriaDepende dos blocos disponíveis em cacheA cópia em disco local evita mais downloads pela rede
Acompanhamento de atualidadeVerificações de atributosCompromissos de notificação do servidor
Compartilhamento concorrentePrecisa de coordenaçãoPrecisa de coordenação; o último fechamento pode sobrescrever outra versão

O AFS também oferecia um espaço de nomes global, listas de controle de acesso e volumes gerenciados por administradores. O AFSv2 historicamente aumentou a capacidade de atendimento do servidor para cerca de 50 clientes, de aproximadamente 20 no AFSv1. A regra de cache de nenhum dos projetos substitui coordenação explícita, como travas de arquivo, quando programas precisam de atualizações compartilhadas seguras.

Principais conclusões

  • O NFS usa validação entre fechamento e abertura, enquanto o cache de atributos pode deixar leitores com arquivos abertos usando dados desatualizados.
  • O AFS reutiliza um cache em disco de arquivos completos enquanto um compromisso de notificação permanece válido.
  • O AFS publica no fechamento; uma sessão remota já aberta mantém sua cópia antiga.
  • Escritores concorrentes no AFS substituem versões completas, então prevalece o último fechamento.
  • O estado dos compromissos de notificação exige revalidação após falhas.
  • A granularidade da transferência determina quais cargas de trabalho se beneficiam de cada projeto de cache.

Exercícios resolvidos de Sistemas de arquivos

6 Lições Interativas

1

Acompanhe um arquivo da abertura à substituição durável

19 passos
Acompanhe descritores, nomes, permissões e um salvamento que sobrevive a uma falha.
  1. 1
    IntroduçãoAcompanhe quatro tipos de estado

    Uma operação de arquivo pode alterar bytes, uma posição em arquivo aberto, um nome de diretório ou um registro de permissão. Acompanhe um pequeno programa por essas camadas e depois construa uma substituição durável. Manter as camadas separadas explica dois resultados inicialmente surpreendentes: um arquivo pode permanecer utilizável após a remoção de seu último nome, e fechar um arquivo, por si só, não torna um salvamento durável.

  2. 2
    ExemploAbra e leia um intervalo de bytes

    Um arquivo de 260 bytes é aberto para leitura. Suponha que open retorne o descritor 3 e a primeira chamada a read(3, buf, 80) retorne 80. O descritor identifica a referência aberta desse processo; o deslocamento agora é 80. A quantidade retornada informa quanto avançar. A quantidade solicitada é apenas um limite superior, então o programa deve verificar o valor de retorno.

  3. 3
    DesafioEncontre o próximo deslocamento

    A próxima solicitação pede 100 bytes, mas retorna 60. Em que deslocamento a próxima leitura comum começará?

    ---reveal---

    Ela começa no byte 140: o deslocamento anterior de 80 avança pelos 60 bytes realmente lidos. Avançar pelos 100 solicitados pularia bytes incorretamente. Uma leitura que retorna 0 no fim do arquivo deixaria o deslocamento inalterado.

  4. 4
    AnalogiaCompartilhe um marcador de página

    Uma entrada de arquivo aberto é como um marcador de página compartilhado em um exemplar de livro. dup oferece outra forma de acessar esse mesmo marcador; duas chamadas separadas a open criam dois marcadores. A analogia acompanha apenas a posição: ambas as aberturas ainda acessam o mesmo arquivo subjacente. Editar seus bytes pode afetar os dois leitores, embora seus deslocamentos sejam independentes.

  5. 5
    ExemploAcompanhe um descritor duplicado

    O programa chama other = dup(3) e depois lseek(other, 20, SEEK_SET). O descritor 3 agora também usa o deslocamento 20 porque ambos os descritores acessam uma única entrada de arquivo aberto. Uma leitura de 15 bytes pelo descritor 3 deixa o deslocamento compartilhado em 35. O posicionamento em si altera o estado na memória; não lê um bloco nem move uma cabeça física de disco.

  6. 6
    DicaEscolha a operação de posicionamento adequada

    Use pread quando uma leitura deve indicar uma posição explícita em bytes sem alterar o deslocamento da entrada de arquivo aberto. Isso importa quando descritores compartilham essa entrada após dup ou fork. Uma chamada comum a read avança o deslocamento compartilhado; pread não. Verifique a quantidade retornada e os erros em qualquer uma das chamadas antes de supor que os bytes solicitados foram obtidos.

  7. 7
    ExplicaçãoTorne duráveis os bytes aceitos

    Uma chamada write bem-sucedida geralmente coloca novos bytes em buffers de memória. Uma falha posterior pode apagá-los antes que o armazenamento os receba. fsync espera que os dados e metadados modificados do arquivo cheguem ao armazenamento, conforme informado pelo dispositivo. Fechar um descritor libera uma referência aberta; não realiza a mesma operação de durabilidade.

  8. 8
    ExemploPrepare uma substituição completa

    Um editor quer substituir settings.json. Primeiro, ele escreve todo o conteúdo substituto em settings.json.tmp no mesmo diretório, verificando as quantidades escritas e os erros. O destino antigo permanece intacto durante esse trabalho. Em seguida, ele sincroniza com sucesso o arquivo temporário, garantindo que os bytes completos da substituição sejam duráveis antes de alterar o nome de destino.

  9. 9
    ExemploPublique e torne persistente o novo nome

    Em seguida, o editor renomeia o arquivo temporário sobre settings.json. A substituição no mesmo sistema de arquivos é atômica: o nome leva ao arquivo antigo ou ao novo, sem um intervalo em que esteja ausente. Por fim, ele sincroniza o diretório que contém o arquivo. Essa última etapa torna persistente a alteração do nome, pois a entrada de diretório pertence ao diretório, e não ao arquivo.

  10. 10
    DesafioEncontre a etapa de durabilidade que falta

    Um programa escreve e sincroniza um novo arquivo, renomeia-o sobre o destino e imediatamente informa um salvamento durável. Qual operação ainda é necessária?

    ---reveal---

    Sincronizar o diretório que contém o arquivo e verificar se a operação foi bem-sucedida. A sincronização do arquivo protege o conteúdo da substituição, enquanto a sincronização do diretório protege o nome alterado. A renomeação atômica, por si só, não garante que a alteração sobreviva a uma falha.

  11. 11
    ExemploAcrescente um segundo nome

    O comando ln draft saved cria uma ligação física. Ambos os nomes se referem a um nó-i, e a contagem de ligações do arquivo comum passa a 2. Remover draft deixa saved utilizável com contagem 1. Nada copiou o conteúdo: a operação acrescentou uma entrada de diretório. Uma ligação simbólica seria, em vez disso, um objeto próprio que armazena um caminho a ser seguido.

  12. 12
    DesafioRemova todos os nomes de um arquivo aberto

    Um processo mantém saved aberto. Outro processo remove sua última ligação física. O primeiro processo ainda pode lê-lo e quando o armazenamento pode ser recuperado?

    ---reveal---

    O descritor aberto permanece utilizável. A recuperação do espaço espera até que não haja nomes nem referências abertas. A contagem de ligações registra nomes, então chegar a zero não encerra, por si só, uma referência aberta existente.

  13. 13
    Ideia-chaveUm caminho não é uma referência a objeto

    Uma ligação simbólica mantém um caminho de destino, então excluir ou renomear o destino pode deixá-la pendente. Uma ligação física nomeia diretamente o nó-i e sobrevive à remoção de seus outros nomes. Ligações simbólicas podem atravessar sistemas de arquivos porque caminhos podem atravessar pontos de montagem; ligações físicas não podem, pois números de nós-i têm significado dentro de um sistema de arquivos.

  14. 14
    ExemploInterprete os direitos de acesso

    A sequência de permissões rw-r----- divide-se em proprietário rw-, grupo r-- e demais usuários ---. Com leitura = 4, escrita = 2 e execução = 1, os dígitos são 6, 4 e 0. Assim, chmod 640 report define leitura e escrita para o proprietário, leitura para o grupo e nenhum direito para os demais. Os três dígitos descrevem classes separadas de usuários, não uma soma compartilhada.

  15. 15
    DesafioAcesse um nome de arquivo conhecido

    Um usuário tem permissão de execução, mas não de leitura, em /srv/data, e as permissões do arquivo permitem ler /srv/data/plan. O usuário pode abrir o caminho conhecido e listar o diretório?

    ---reveal---

    O usuário pode abrir o caminho conhecido porque a execução permite a busca no diretório. A listagem exige permissão de leitura no diretório, então ela falha. As permissões do arquivo também são verificadas; a busca no diretório, por si só, não concede acesso a todos os arquivos dentro dele.

  16. 16
    DicaInterprete ctime corretamente

    Após chmod, ctime muda porque o estado do nó-i mudou. Ele não é um registro do horário de criação. mtime registra alterações no conteúdo do arquivo; atime registra o acesso, frequentemente com atualizações adiadas. Manter esses significados distintos ajuda você a interpretar a saída de stat sem concluir que uma alteração de permissão criou um novo arquivo ou reescreveu seus bytes.

  17. 17
    ConexãoUna árvores sem unir identidades

    A montagem associa a raiz de outro sistema de arquivos a um diretório como /media/usb, ocultando o conteúdo anterior desse diretório enquanto estiver montado. A camada de sistema de arquivos virtual fornece chamadas comuns às duas árvores. Ela não mescla suas tabelas de nós-i: o nó-i 25 em um sistema de arquivos pode não ter relação com o nó-i 25 no outro.

  18. 18
    DesafioSubstitua um arquivo por meio de um segundo nome

    Um programa mantém o arquivo antigo aberto pela ligação física backup. Um editor publica um novo arquivo completo renomeando um arquivo temporário sobre current e depois sincroniza o diretório. Qual conteúdo o descritor antigo acessa e qual conteúdo uma nova abertura de current acessa?

    ---reveal---

    O descritor e backup ainda acessam o nó-i antigo. Uma nova abertura de current acessa o nó-i substituto. A renomeação altera uma entrada de diretório sem redirecionar referências abertas existentes; a sincronização torna persistente essa troca de nome.

  19. 19
    RecapitulaçãoUse o modelo de estado correto

    Acompanhe posições de leitura comuns por entradas de arquivos abertos e nomes por diretórios e nós-i. Para uma substituição durável, termine o arquivo temporário, sincronize-o, renomeie-o e depois sincronize o diretório. Ao analisar acesso ou exclusão, examine os direitos relevantes do diretório e as referências abertas, além dos próprios metadados do arquivo.

2

Encontre bytes no disco e conte o trabalho

17 passos
Localize nós-i e blocos de dados e depois acompanhe um caminho sem cache e seu equivalente em cache.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoTraduza nomes em blocos
  2. 2
    ExemploConstrua a organização da partição
  3. 3
    DesafioConte as posições de nós-i
  4. 4
    ExemploCalcule um endereço absoluto de nó-i
  5. 5
    ExemploSelecione os bytes dentro do bloco que os contém
  6. 6
    Ideia-chaveMantenha o nome do arquivo fora do nó-i
  7. 7
    ExemploLocalize um bloco lógico de dados
  8. 8
    ExplicaçãoExpanda a árvore de ponteiros
  9. 9
    ExemploAloque a primeira parte de um arquivo grande
  10. 10
    DesafioConclua a contagem de blocos de ponteiros
  11. 11
    ConexãoDescreva uma sequência em vez de cada endereço
  12. 12
    ExemploPercorra um caminho sem cache
  13. 13
    DesafioAplique o modelo de leitura
  14. 14
    DicaConte cada estrutura alterada
  15. 15
    Ideia-chaveDeixe a memória eliminar trabalho do dispositivo
  16. 16
    DesafioRepita uma busca após colocá-la em cache
  17. 17
    RecapitulaçãoSepare três traduções
3

Aloque arquivos relacionados e dimensione suas transferências

13 passos
Use as regras de localidade do FFS e deduza o tamanho de fragmento necessário para uma meta de largura de banda.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoGaste tempo transferindo bytes úteis
  2. 2
    ExplicaçãoIdentifique metadados distantes e transferências pequenas
  3. 3
    AnalogiaMantenha um conjunto de trabalho unido
  4. 4
    ExemploColoque recursos locais em cada grupo
  5. 5
    DesafioExplique o que o agrupamento altera
  6. 6
    ExemploAloque os arquivos de um diretório
  7. 7
    Ideia-chaveDeixe espaço para arquivos vizinhos
  8. 8
    ExemploMeça a sobrecarga
  9. 9
    ExemploCalcule para uma meta de 90%
  10. 10
    DesafioPreveja o tamanho de fragmento para uma unidade mais rápida
  11. 11
    DicaAdapte a alocação também a arquivos pequenos
  12. 12
    DesafioMantenha espaço para arquivos criados em conjunto
  13. 13
    RecapitulaçãoEquilibre localidade, espaço e tamanho da transferência
4

Acompanhe um acréscimo durante uma falha e a recuperação

18 passos
Compare escritas parciais, reparo pelo verificador, confirmação no diário e recuperação ordenada de metadados.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoRecupere uma atualização completa
  2. 2
    ExemploNomeie os três blocos alterados
  3. 3
    DesafioClassifique uma alocação sem ponteiro
  4. 4
    ExemploEncontre dados residuais inválidos ocultos
  5. 5
    Ideia-chaveDiferencie três tipos de falha
  6. 6
    ExplicaçãoReconstrua a propriedade com fsck
  7. 7
    DesafioAvalie uma verificação sem erros
  8. 8
    ConexãoRepare nomes sem inventá-los
  9. 9
    ExemploEscreva primeiro a área útil para reaplicação
  10. 10
    ExemploConfirme a transação completa
  11. 11
    DesafioRecupere após uma consolidação parcial
  12. 12
    DicaVerifique confirmação e durabilidade separadamente
  13. 13
    ExemploEvite registrar os dados duas vezes em diário
  14. 14
    DesafioIdentifique a regra de ordenação ausente
  15. 15
    ExemploProteja um bloco reutilizado da reaplicação antiga
  16. 16
    ConexãoPublique uma nova árvore
  17. 17
    DesafioRecupere a estrutura sem recuperar a intenção
  18. 18
    RecapitulaçãoPergunte o que a recuperação pode comprovar
5

Escreva, encontre e limpe um registro em movimento

15 passos
Acompanhe uma atualização do LFS por seu mapeamento, verificação de blocos ativos e recuperação após falhas.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoMantenha a identidade estável enquanto as localizações mudam
  2. 2
    ConexãoTransforme muitas atualizações curtas em uma transferência
  3. 3
    ExemploEscreva uma nova versão
  4. 4
    ExplicaçãoAtualize o mapa de nós-i
  5. 5
    DesafioVerifique o diretório pai
  6. 6
    ExemploEncontre o mapa após a montagem
  7. 7
    ExemploDimensione um segmento sequencial
  8. 8
    Ideia-chaveNão suponha que as leituras sejam sequenciais
  9. 9
    ExemploVerifique se o bloco antigo está ativo
  10. 10
    DesafioCalcule o espaço recuperado
  11. 11
    DicaEvite copiar dados que logo ficarão inativos
  12. 12
    ExemploEscolha um ponto de verificação completo
  13. 13
    DesafioRecupere o trabalho posterior ao ponto de verificação
  14. 14
    DesafioRecupere o mapa antes de verificar se um bloco está ativo
  15. 15
    RecapitulaçãoPague pelas atualizações sequenciais com mapeamento e limpeza
6

Repita requisições e preveja a visibilidade de arquivos compartilhados

16 passos
Compare a recuperação de falhas do NFS com as sequências de compartilhamento em cache do NFS e do AFS.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoLide com a incerteza entre máquinas
  2. 2
    ExemploConstrua uma leitura com todas as informações necessárias
  3. 3
    Ideia-chaveNão manter estado não significa dispensar armazenamento
  4. 4
    DesafioRepita uma WRITE cuja resposta foi perdida
  5. 5
    DicaReconheça uma nova tentativa que altera a resposta
  6. 6
    ExemploTorne durável a confirmação
  7. 7
    ConexãoMantenha distintas as versões do protocolo
  8. 8
    ExemploCompartilhe no limite de abertura do NFS
  9. 9
    DesafioExplique uma leitura antiga em cache
  10. 10
    AnalogiaSubstitua verificações repetidas por uma promessa
  11. 11
    ExemploMantenha a cópia de uma sessão AFS existente
  12. 12
    DesafioPreveja o resultado de dois escritores
  13. 13
    Ideia-chaveConsidere os compromissos de notificação após uma falha
  14. 14
    ConexãoEscolha a granularidade de transferência para a carga de trabalho
  15. 15
    DesafioDiferencie uma nova tentativa segura de uma edição compartilhada segura
  16. 16
    RecapitulaçãoFaça duas perguntas distintas sobre a rede

Questões de Sistemas de arquivos

60 Questões de Prática em 6 conjuntos

Conjunto 1: Descritores, nomes e salvamentos duráveis10 Questões de Prática

Questão 1 de 10

Uma leitura de arquivo comum solicita 120 bytes e retorna 45. Começando no deslocamento 30, onde começa a próxima leitura comum?
  1. Deslocamento 75
  2. Deslocamento 120
  3. Deslocamento 150
  4. Deslocamento 45
Mostrar respostaOcultar resposta
Resposta: A
O deslocamento avança pelos 45 bytes realmente retornados, de 30 para 75. Mover para 150 usaria a quantidade solicitada de 120, mas uma solicitação é apenas um limite superior para os bytes lidos. Uma leitura parcial bem-sucedida ainda avança por sua quantidade efetiva.

Questão 2 de 10

Um processo abre separadamente o mesmo arquivo como a e b e depois lê 24 bytes por a. Qual é o deslocamento de b antes de sua primeira leitura?
  1. 24, porque o nó-i é compartilhado
  2. 0, porque a primeira leitura reinicia ambas as entradas
  3. 24, porque todos os descritores compartilham deslocamentos
  4. 0, porque as aberturas têm entradas separadas
Mostrar respostaOcultar resposta
Resposta: D
Cada abertura separada cria sua própria entrada de arquivo aberto e, portanto, seu próprio deslocamento, inicialmente zero. Compartilhar um nó-i não implica compartilhar uma entrada de arquivo aberto. A leitura por a avança apenas a; descritores criados com dup compartilhariam uma posição.

Questão 3 de 10

Um arquivo tem pelo menos 200 bytes. Um processo o abre como a, cria b = dup(a) e o abre separadamente como c. Após fork, o filho posiciona b em 70. O pai lê 12 bytes por a e depois chama pread(c, buf, 9, 100). Quais são os deslocamentos finais de a, b e c?
  1. 82, 82, 0
  2. 82, 82, 109
  3. 12, 70, 0
  4. 82, 70, 109
Mostrar respostaOcultar resposta
Resposta: A
a e b compartilham uma entrada após o fork, então o posicionamento pelo filho define a posição deles como 70 e a leitura do pai a avança para 82. A abertura separada c começa em zero, e pread a mantém ali. Avançar c para 109 confundiria entrada e saída com posição explícita com uma chamada comum a read.

Questão 4 de 10

Um programa escreveu com sucesso um arquivo existente completo. Qual chamada espera diretamente que os dados e metadados modificados desse arquivo cheguem ao armazenamento?
  1. close(fd)
  2. fstat(fd, &buf)
  3. lseek(fd, 0, SEEK_SET)
  4. fsync(fd)
Mostrar respostaOcultar resposta
Resposta: D
fsync espera que os dados e metadados modificados do arquivo cheguem ao armazenamento, conforme informado pelo dispositivo. close libera o descritor e pode deixar escritas em buffer. Ler metadados ou alterar o deslocamento não solicita esse limite de durabilidade.

Questão 5 de 10

Um editor escreve um arquivo temporário completo para substituição no diretório de destino e o sincroniza com sucesso. Qual sequência conclui uma substituição durável?
  1. Fechar o arquivo temporário e depois renomeá-lo
  2. Renomeá-lo e depois sincronizar o diretório
  3. Truncar o destino e depois renomear o arquivo
  4. Sincronizar o diretório e depois renomear o arquivo
Mostrar respostaOcultar resposta
Resposta: B
A renomeação publica a substituição completa atomicamente, e a sincronização do diretório torna durável essa alteração de nome. Sincronizar o diretório antes da renomeação não pode tornar persistente uma alteração que ainda não ocorreu. Fechar o arquivo temporário, por si só, não torna persistente a atualização posterior do diretório.

Questão 6 de 10

Um novo arquivo vazio é posicionado no deslocamento 12.288 e um byte é escrito ali. Quais são seu tamanho lógico e o conteúdo da lacuna anterior?
  1. 1 byte; a lacuna está fora do arquivo
  2. 12.289 bytes; a lacuna contém bytes antigos do disco
  3. 12.289 bytes; a lacuna é lida como zeros
  4. 12.288 bytes; a lacuna é lida como zeros
Mostrar respostaOcultar resposta
Resposta: C
O byte no deslocamento 12.288 estende o arquivo até essa posição, resultando no tamanho 12.289. Bytes não escritos dentro da região estendida são lidos como zeros, e uma representação esparsa pode evitar a alocação de blocos para a lacuna. Contar apenas o byte escrito confunde dados alocados com o tamanho lógico do arquivo.

Questão 7 de 10

Dois nomes, red e blue, são ligações físicas para um mesmo arquivo comum fechado. Após a remoção de red, o que acontece com blue?
  1. Permanece utilizável com contagem de ligações 2
  2. Permanece utilizável com contagem de ligações 1
  3. Desaparece junto com o nó-i compartilhado
  4. Torna-se uma ligação simbólica pendente
Mostrar respostaOcultar resposta
Resposta: B
Remover a ligação elimina apenas o nome red, reduzindo a contagem de ligações do nó-i compartilhado de 2 para 1. blue permanece como um nome equivalente para esse nó-i e ainda acessa seu conteúdo. Considerá-lo pendente aplicaria o comportamento de caminhos de ligações simbólicas a uma ligação física.

Questão 8 de 10

Um arquivo comum tem um nome e um descritor aberto. Outro processo remove a ligação desse nome. Quando o sistema de arquivos pode recuperar seu nó-i e seus dados?
  1. Quando o processo reposicionar o descritor
  2. Após terminarem as referências abertas restantes
  3. Após uma listagem posterior do diretório
  4. Imediatamente quando o último nome desaparecer
Mostrar respostaOcultar resposta
Resposta: B
A remoção da última ligação reduz a contagem de ligações a zero, mas o descritor aberto ainda mantém o objeto acessível. A recuperação do espaço espera tanto a contagem zero de ligações quanto a ausência de referências abertas. Remover o nome imediatamente do diretório é compatível com preservar o arquivo sem nome para seu usuário atual.

Questão 9 de 10

Um usuário pode percorrer /srv/team, mas não pode listar seus nomes. O usuário conhece /srv/team/brief, e as permissões desse arquivo permitem leitura. Qual acesso é possível?
  1. Tanto a listagem quanto a abertura são bem-sucedidas
  2. A listagem é bem-sucedida, mas a abertura falha
  3. A abertura é bem-sucedida, mas a listagem falha
  4. Tanto a listagem quanto a abertura falham
Mostrar respostaOcultar resposta
Resposta: C
A permissão de execução no diretório permite buscar um caminho conhecido, enquanto a permissão de leitura no diretório permite listar nomes. O arquivo conhecido e legível pode, portanto, ser aberto, embora o diretório não possa ser listado. A permissão de leitura do arquivo, sozinha, não supriria a falta de um direito de travessia, mas a travessia está disponível aqui.

Questão 10 de 10

Uma unidade é montada em um diretório que já contém arquivos. O que acontece com esses arquivos anteriores enquanto a montagem está ativa?
  1. São copiados para o sistema de arquivos montado
  2. São removidos como parte da montagem
  3. São mesclados à raiz montada
  4. São ocultados pela raiz montada
Mostrar respostaOcultar resposta
Resposta: D
A montagem torna a raiz do outro sistema de arquivos visível no ponto de montagem, ocultando o conteúdo anterior do diretório. Ela não combina as entradas dos dois diretórios nem exclui os arquivos encobertos. Uma árvore de caminhos unificada fornece uma rota comum aos objetos sem mesclar os sistemas de arquivos subjacentes.
Conjunto 2: Mapeie nós-i, blocos de dados e trabalho do dispositivo10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

Um sistema de arquivos aloca um nó-i para um arquivo comum vazio. Qual mapa de bits registra essa alocação?
  1. O mapa de bits de nós-i
  2. O mapa de bits de dados
  3. O mapa de bits de extensões
  4. O mapa de bits de diretórios
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Uma tabela de nós-i começa no bloco de disco 4. Os blocos têm 4 KiB e os nós-i têm 256 bytes, numerados a partir de zero. Em qual endereço absoluto de byte começa o nó-i 23?
  1. 22272
  2. 5888
  3. 16384
  4. 22528
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

Uma partição tem 100 blocos. Seu superbloco usa 1, seus dois mapas de bits usam 2 e sua tabela de nós-i usa 8. Quantos blocos restam em sua região de dados?
  1. 97 blocos
  2. 89 blocos
  3. 92 blocos
  4. 91 blocos
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

Um bloco indireto de 4 KiB armazena endereços de 8 bytes. Quantos endereços cabem nele?
  1. 2.048 endereços
  2. 512 endereços
  3. 4.096 endereços
  4. 1.024 endereços
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

Com blocos de 2 KiB, onde fica o deslocamento de byte 6.500 no mapeamento de blocos lógicos do arquivo?
  1. Bloco 3, deslocamento de byte 1.500
  2. Bloco 2, deslocamento de byte 2.404
  3. Bloco 4, deslocamento de byte 356
  4. Bloco 3, deslocamento de byte 356
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

Um nó-i tem 6 ponteiros diretos, um ponteiro indireto simples e um ponteiro duplamente indireto. Os blocos têm 1 KiB e os ponteiros têm 4 bytes. Um arquivo não esparso ocupa 400 blocos de dados. Quantos blocos de ponteiros são necessários fora do nó-i?
  1. 2 blocos de ponteiros
  2. 5 blocos de ponteiros
  3. 3 blocos de ponteiros
  4. 4 blocos de ponteiros
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Um arquivo consiste em três sequências contíguas separadas de 40, 15 e 25 blocos. Qual é o número mínimo de registros de extensão que descreve essas sequências?
  1. 80 registros
  2. 1 registro
  3. 3 registros
  4. 2 registros
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Em um modelo de cache vazio com diretórios de um bloco, quantas leituras de blocos de nós-i ou diretórios localizam /lab/raw/data antes da leitura de seu conteúdo?
  1. 7 leituras
  2. 5 leituras
  3. 8 leituras
  4. 6 leituras
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Um arquivo usa apenas ponteiros diretos de dados. Em um modelo simples de cache vazio, cada diretório ocupa um bloco. Após abrir /lab/raw/data, o programa lê três blocos de dados; cada acesso a bloco relê o nó-i e escreve atime. Fechar não causa entrada ou saída. Qual é o total?
  1. 13 operações de entrada e saída
  2. 19 operações de entrada e saída
  3. 10 operações de entrada e saída
  4. 16 operações de entrada e saída
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

Duas criações de arquivos alteram o mesmo bloco do mapa de bits de nós-i antes que ele seja descarregado no disco. Como o uso de buffer pode reduzir o tráfego para esse bloco?
  1. Evita reservar qualquer um dos nós-i no disco
  2. Substitui bits de alocação por ponteiros de nós-i
  3. Combina as duas alterações em uma escrita posterior
  4. Armazena o mapa de bits nos dois novos arquivos
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Conjunto 3: Localidade, vazão e atualizações parciais10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

Qual sobrecarga de disco é reduzida principalmente ao colocar o nó-i de um arquivo perto de seus dados?
  1. Contagens de ligações de diretórios
  2. Espaço de armazenamento de ponteiros
  3. Tempo de busca e latência rotacional
  4. Verificações de permissão de arquivos
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Um disco rígido tem alta taxa de transferência sequencial, mas um sistema de arquivos emite leituras muito pequenas e dispersas pelo disco. Por que a vazão pode continuar baixa?
  1. Blocos dispersos precisam de deslocamentos de arquivo maiores
  2. A profundidade do diretório define toda busca de bloco
  3. Leituras pequenas reduzem a largura de banda máxima da unidade
  4. O posicionamento domina as transferências curtas
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

O grupo de um diretório tem bastante espaço. Onde o FFS normalmente coloca o nó-i e os dados de um arquivo comum recém-criado?
  1. Juntos no grupo distante menos utilizado
  2. Juntos no grupo do diretório pai
  3. Em grupos separados para distribuir todo o tráfego
  4. Com o nó-i apenas em uma tabela global
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

Por que o FFS usa sub-blocos para arquivos pequenos?
  1. Para evitar todas as escritas de metadados
  2. Para remover os ponteiros de dados do nó-i
  3. Para fazer cada arquivo ocupar vários grupos
  4. Para reduzir o espaço não usado em blocos grandes
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

Um disco atinge no máximo 120 MB/s. Um fragmento de 3 MB leva 35 ms, incluindo posicionamento e transferência. Qual tamanho de fragmento alcançaria 90% da taxa máxima se o tempo de posicionamento permanecer fixo?
  1. 3,78 MB
  2. 10,8 MB
  3. 12 MB
  4. 37,8 MB
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

Um alocador semelhante ao do FFS deve deixar espaço perto de um diretório de projeto para pequenos arquivos no mesmo diretório enquanto armazena um arquivo grande de fluxo de dados. Outros grupos têm bastante espaço. O disco atinge no máximo 160 MB/s e o posicionamento leva 5 ms. Como os fragmentos posteriores do arquivo grande devem ser alocados e dimensionados para alcançar 90% da taxa máxima?
  1. Usar fragmentos de 7,2 MB apenas no grupo original
  2. Usar fragmentos de 0,8 MB apenas no grupo original
  3. Usar fragmentos de 7,2 MB em outros grupos
  4. Usar fragmentos de 0,8 MB em outros grupos
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Após um acréscimo, os novos dados e o nó-i chegam ao disco, mas o mapa de bits de alocação não. Qual é o principal risco estrutural?
  1. O mesmo bloco pode ser alocado novamente
  2. O bloco fica reservado sem nenhum dono
  3. O nó-i perdeu todos os nomes de diretório
  4. Os novos dados estão inacessíveis pelo arquivo
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Apenas o novo bloco de dados de um acréscimo chega ao disco. Nem a atualização do nó-i nem a do mapa de bits sobrevive. Como o estado resultante é classificado?
  1. Inconsistente, com dois donos do bloco
  2. Confirmado, com tamanho de arquivo desatualizado
  3. Com vazamento, por um bloco órfão alocado
  4. Consistente, sem o acréscimo
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Uma falha deixa um bloco marcado como alocado, mas sem referências. O nó-i de um segundo arquivo aponta para outro bloco ainda marcado como livre. Após o reparo, quais alterações nos bits de alocação reconciliam os dois casos?
  1. Limpar o primeiro bit e definir o segundo
  2. Definir ambos os bits e preservar todos os ponteiros
  3. Limpar ambos os bits e preservar todos os ponteiros
  4. Definir o primeiro bit e limpar o segundo
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

As atualizações do nó-i e do mapa de bits de um acréscimo sobrevivem, mas seus dados não. Por que o arquivo pode passar pela verificação estrutural apesar de conter bytes errados?
  1. Os mapas de bits reconstroem os bytes ausentes
  2. O nó-i deixa de descrever seus dados
  3. A propriedade concorda, embora o conteúdo esteja desatualizado
  4. A verificação compara apenas nomes de arquivos
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Conjunto 4: Verifique, confirme e reaplique com segurança10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

Um nó-i válido reivindica o bloco 85, mas o mapa de bits marca o bloco 85 como livre. Qual reparo no mapa de bits corresponde à propriedade?
  1. Manter a divergência por enquanto
  2. Limpar o ponteiro do nó-i
  3. Marcar o bloco 85 como alocado
  4. Liberar o bloco 85 na consolidação
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Um nó-i alocado contém ponteiros e dados válidos, mas nenhum nome acessível a partir da raiz. Como o fsck pode preservar o acesso a ele?
  1. Criar uma entrada acessível em lost+found
  2. Deixá-lo sem ligação e alterar sua contagem
  3. Preservá-lo apenas restaurando uma cópia de segurança
  4. Liberar seus blocos alocados sem acrescentar um nome
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

A área útil de uma transação no protocolo básico de registro de dados em diário é totalmente durável, mas seu registro de confirmação TxE nunca chegou ao armazenamento. O que a recuperação após a falha faz com a transação?
  1. Instala apenas suas imagens de nó-i e mapa de bits
  2. Reaplica-a porque sua área útil parece completa
  3. Ignora-a porque a confirmação está ausente
  4. Trata sua área útil como já consolidada
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

Uma transação é confirmada, e metade de suas imagens chega aos locais finais antes de uma falha. Por que a recuperação pode reaplicar todas as imagens?
  1. Ela primeiro descarta todos os dados já escritos
  2. A substituição por blocos idênticos pode ser repetida
  3. A confirmação torna as escritas finais desnecessárias
  4. A consolidação altera apenas nomes de diretórios
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

Um arquivo tem inicialmente dois blocos de dados. A transação T1 de registro de dados em diário acrescenta os blocos 80 e 81 e é confirmada. T2 acrescenta o bloco 82 em sua área útil no diário, mas não tem registro de confirmação. Uma falha ocorre depois que apenas a imagem do nó-i de T1 foi consolidada. Após a recuperação, quais são o tamanho do arquivo e os estados de alocação dos blocos 80 a 82?
  1. Cinco blocos de tamanho; 80, 81 e 82 alocados
  2. Quatro blocos de tamanho; 80, 81 e 82 alocados
  3. Dois blocos de tamanho; 80, 81 e 82 livres
  4. Quatro blocos de tamanho; 80 e 81 alocados, 82 livre
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

Um diário circular retorna ao início enquanto uma transação confirmada está apenas parcialmente consolidada. A implementação proposta reutiliza imediatamente o espaço dessa transação porque TxE é durável. Que falha isso pode causar?
  1. A transação perde a confirmação apesar de TxE
  2. A recuperação acrescenta cada alteração registrada uma segunda vez
  3. A recuperação precisa consolidar todo o sistema de arquivos
  4. Uma falha pode apagar as únicas cópias necessárias à conclusão
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

No registro ordenado de metadados em diário, escritas de dados e escritas de metadados no diário ocorrem em paralelo. O que deve terminar antes que TxE se torne durável?
  1. As escritas de dados e as de metadados no diário
  2. Apenas a escrita dos dados no local final
  3. A consolidação dos metadados nos locais finais
  4. Apenas a área útil de metadados no diário
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

A transação confirmada T10 registra o bloco 70 como metadados de diretório. A transação confirmada T11 revoga o bloco 70 após a exclusão. A transação confirmada T12 registra depois uma nova imagem de metadados para o bloco 70. O que acontece com essas imagens de bloco durante a recuperação?
  1. Reaplicar T10 e ignorar T12
  2. Ignorar T10 e T12
  3. Ignorar T10 e reaplicar T12
  4. Reaplicar T10 e T12
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Um arquivo ext4 é recuperado com metadados consistentes, mas conteúdo desatualizado, porque seus metadados foram confirmados antes que os dados associados chegassem ao local final. Qual modo de dados permite essa ordenação?
  1. data=writeback
  2. data=ordered
  3. Os três modos igualmente
  4. data=journal
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

Um projeto com atualizações suaves escreve primeiro dados inicializados e depois falha antes de publicar seu ponteiro. Um reparo posterior recupera a alocação não utilizada. Qual compromisso isso ilustra?
  1. Ponteiros publicados podem indicar dados não escritos com segurança
  2. Referências seguras podem coexistir com vazamento de espaço
  3. Toda escrita da aplicação já era durável
  4. Todas as varreduras de metadados se tornam desnecessárias
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Conjunto 5: Registros em movimento e caches de rede10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

Um nó-i do LFS muda para um novo endereço de disco após uma atualização. Qual estrutura associa seu número estável a esse endereço mais recente?
  1. O mapa de nós-i
  2. O diretório
  3. A tabela de nós-i
  4. O mapa de bits de dados
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Por que armazenar números estáveis de nós-i em diretórios do LFS evita atualizações recursivas dos diretórios pais quando o nó-i de um arquivo muda de lugar?
  1. Apenas o imap precisa do endereço alterado
  2. As entradas de diretório guardam imagens inteiras de nós-i
  3. Os endereços antigo e novo do nó-i continuam atuais
  4. Todos os diretórios permanecem fixados na memória
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

Uma escrita de segmento de 6 MB leva 40 ms em um disco que atinge no máximo 200 MB/s. Com o mesmo atraso de posicionamento, qual deve ser o tamanho de um segmento para alcançar 95% da taxa máxima?
  1. 114 MB
  2. 38 MB
  3. 19 MB
  4. 8 MB
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

Um resumo de segmento atribui o endereço 450 ao nó-i 9, bloco lógico 3. O nó-i 9 mais recente no imap aponta o bloco 3 para o endereço 880. O bloco antigo em 450 está ativo?
  1. Sim, porque o nó-i 9 ainda existe
  2. Sim, porque o resumo identifica seu dono
  3. Não, porque o ponteiro atual é diferente
  4. Não, porque todos os blocos consolidados estão inativos
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

Um limpador lê seis segmentos de mesmo tamanho, cada um com 50% de dados ativos, e reúne seus dados ativos em novos segmentos. Ignorando a sobrecarga de metadados, quantos segmentos de capacidade livre são ganhos e quantos equivalentes de segmento de dados ativos são escritos?
  1. 3 ganhos; 6 escritos
  2. 6 ganhos; 6 escritos
  3. 6 ganhos; 3 escritos
  4. 3 ganhos; 3 escritos
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

O ponto de verificação A tem registros de horário correspondentes de valor 52. O ponto de verificação B tem cabeçalho 53 e registro de horário final 51. Segmentos válidos seguem o fim do registro anotado em A. Qual plano de recuperação preserva o trabalho recuperável mais recente?
  1. Usar A e reaplicar atualizações em segmentos posteriores válidos
  2. Usar A e descartar cada segmento ausente de seu mapa
  3. Usar B e ignorar segmentos anteriores ao seu cabeçalho
  4. Usar B e reconstruir diretórios pelas posições da tabela de nós-i
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Um cliente mantém um identificador NFS de um arquivo excluído. Seu número de nó-i é reutilizado para outro arquivo no mesmo volume. Qual campo do identificador impede o acesso ao arquivo substituto?
  1. O deslocamento do descritor do cliente
  2. O número de geração do nó-i
  3. A contagem de ligações do diretório
  4. A posição do arquivo aberto no servidor
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Um cliente envia uma WRITE do NFSv2 em um deslocamento explícito. O servidor a conclui de forma durável, falha antes de responder e depois reinicia. O que torna suficiente reenviar essa requisição no modelo básico de recuperação?
  1. O servidor restaura o antigo deslocamento aberto do cliente
  2. A nova tentativa acrescenta bytes após o resultado armazenado
  3. O cliente conclui que a primeira requisição nunca foi executada
  4. O resultado estável sobrevive e repeti-lo é seguro
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

O cliente A fecha um arquivo NFS modificado antes que o cliente B o abra sob a consistência entre fechamento e abertura. O que a nova abertura de B deve observar?
  1. Apenas alterações feitas antes de A abrir inicialmente
  2. Sua cópia antiga até todos os temporizadores de atributos expirarem
  3. As alterações de A após a validação de atualidade
  4. Sua cópia antiga até o servidor reiniciar
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

Os clientes A e B do AFS abrem a mesma versão. A altera a região X e fecha o arquivo. B altera a região Y em sua cópia ainda aberta, fecha por último e depois C abre o arquivo. Qual versão C recebe?
  1. O arquivo original até que ambos os clientes reabram
  2. O arquivo de A até expirar o compromisso de B
  3. A versão completa de B, possivelmente perdendo a edição de A
  4. Um arquivo mesclado com as edições dos dois clientes
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Conjunto 6: Analise projetos de sistemas de arquivos10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

Um utilitário copia com sucesso um arquivo para outro sistema de arquivos e depois exclui o original. Isso oferece a mesma garantia de substituição atômica que uma renomeação dentro do mesmo sistema de arquivos?
  1. Não, porque cópia e exclusão são operações separadas
  2. Sim, porque a exclusão torna a cópia durável
  3. Sim, porque os dois arquivos têm os mesmos bytes
  4. Não, porque toda movimentação exige ligações físicas
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

one e two são ligações físicas para um arquivo, e shortcut é uma ligação simbólica que contém o caminho one. Um processo abre two e depois os três nomes são removidos. Antes de esse processo fechar seu descritor, o que permanece?
  1. Nenhum dado, pois todos os objetos de ligação desapareceram
  2. Um arquivo aberto sem nome e com contagem de ligações zero
  3. O arquivo com uma ligação física a partir do descritor
  4. Um atalho ativo que mantém o destino acessível
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

Um nó-i tem 8 ponteiros diretos, um ponteiro indireto simples e um ponteiro duplamente indireto. Os blocos têm 2 KiB e os endereços têm 8 bytes. Um arquivo não esparso tem 550 KiB de tamanho. Quantos blocos ao todo contêm seus dados e estruturas externas de ponteiros?
  1. 277 blocos
  2. 279 blocos
  3. 275 blocos
  4. 278 blocos
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

Um fragmento de 4 MB alcança 80 MB/s em um disco cuja taxa máxima é 100 MB/s. Com o custo de posicionamento inalterado, qual tamanho de fragmento alcança 95% da taxa máxima?
  1. 7,6 MB
  2. 19 MB
  3. 9,5 MB
  4. 76 MB
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

No protocolo básico de registro de dados em diário, qual registro marca uma transação como confirmada após sua área útil se tornar durável?
  1. O mapa de bits de alocação sozinho
  2. A próxima entrada de diretório
  3. O número do novo nó-i
  4. O registro TxE correspondente
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

T20 registra o bloco 44 como metadados de diretório. T21 exclui esse diretório, reutiliza o bloco 44 para dados de usuário e confirma uma revogação para 44. T22 registra uma imagem diferente de metadados para 44, mas nunca é confirmada. Uma falha deixa as três áreas úteis do diário legíveis. O que a recuperação pode reaplicar no bloco 44?
  1. A imagem de T22, a mais recente
  2. A imagem de T20, a última confirmada
  3. A imagem de T20 e depois a imagem de T22
  4. Nem a imagem de T20 nem a de T22
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Um conjunto candidato à limpeza do LFS com três segmentos contém um equivalente de segmento de dados ativos. Outro contém dois equivalentes ativos em três segmentos. Com segmentos de mesmo tamanho e ignorando a sobrecarga de metadados, qual oferece mais capacidade livre por segmento ativo escrito?
  1. Ambos: 1 ganho por 1 escrito
  2. O segundo: 2 ganhos por 1 escrito
  3. O primeiro: 2 ganhos por 1 escrito
  4. O primeiro: 3 ganhos por 1 escrito
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Um novo projeto do NFSv2 confirma a escrita de um bloco intermediário a partir da memória volátil e depois falha. O cliente já recebeu sucesso para essa escrita, então tenta novamente apenas uma escrita posterior com deslocamento explícito que não foi confirmada. Qual fraqueza permanece?
  1. A atualização intermediária confirmada pode continuar ausente
  2. A geração do nó-i deve ser igual ao último deslocamento
  3. A nova tentativa posterior deve duplicar o bloco intermediário
  4. Os deslocamentos dos clientes devem ser reconstruídos no servidor
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Um cliente relê repetidamente um arquivo maior que a memória. Uma cópia válida do AFS em cache no disco continua disponível. O que evita downloads repetidos pela rede?
  1. A visibilidade global imediata de toda escrita
  2. A conversão de cada leitura em uma OPEN no servidor
  3. A reutilização da cópia completa no disco local
  4. A desativação do mecanismo de notificação do servidor
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

Um servidor AFS publica o arquivo alterado de A e invalida o compromisso de notificação de B. B ainda mantém aberta uma sessão de leitura mais antiga. O servidor então reinicia e perde as listas de compromissos. O que deve acontecer com a sessão existente de B e a reutilização posterior do cache?
  1. Manter a cópia aberta; detectar a reinicialização e revalidar para reutilizar
  2. Manter a cópia aberta; confiar nos compromissos após a reinicialização
  3. Substituir a sessão aberta imediatamente; confiar nos compromissos antigos
  4. Substituir a sessão aberta; buscar apenas após reiniciar o cliente
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Travou em uma questão sua? Ajuda com Tarefas

Termos-Chave

96 Termos-Chave, cada um com sua definição

A

Acerto de cache
Um acerto de cache ocorre quando a informação solicitada já está presente no cache e pode ser usada sem buscá-la no armazenamento.
Abrir um arquivo vizinho pode reutilizar blocos de diretório mantidos da resolução de caminho anterior.
Amortização
A amortização distribui um custo fixo por trabalho útil suficiente para que o custo se torne uma fração menor do tempo total.
Uma transferência de 9 MB a 100 MB/s gasta uma parcela muito menor de seu tempo total em uma busca de 10 ms do que uma transferência de 1 MB.
Armazenamento temporário de escritas em buffer
O armazenamento temporário de escritas em buffer mantém blocos alterados temporariamente na memória para que o sistema possa combinar, escalonar ou, às vezes, eliminar escritas.
Criar dois arquivos em momentos próximos pode atualizar um mapa de bits na memória e depois escrevê-lo apenas uma vez.
Arquivo esparso
Um arquivo esparso contém regiões lógicas preenchidas com zeros que o sistema de arquivos pode representar sem alocar blocos de dados.
Escrever um byte muito além do fim pode criar um arquivo lógico grande com pouco armazenamento alocado.
atime
atime é o registro de horário do último acesso a um arquivo, que registra o acesso ao conteúdo conforme a política de atualização de horários do sistema de arquivos.
Uma leitura pode atualizar atime, embora a política usual relatime do Linux evite escrevê-lo após cada acesso.
Atualizações suaves
As atualizações suaves ordenam escritas dependentes de metadados e dados para impedir referências inseguras sem registrar atualizações em um diário.
Escrever dados inicializados antes do ponteiro pode deixar um vazamento após uma falha, evitando ao mesmo tempo um bloco inválido acessível.

B

Bits de permissão
Bits de permissão codificam direitos de leitura, escrita e execução separadamente para o proprietário de um arquivo, seu grupo e os demais usuários.
O modo 750 concede ao proprietário os três direitos, ao grupo leitura e execução e aos demais nenhum direito.
Bloco ativo
Um bloco ativo é um bloco armazenado ainda referenciado pelo mapeamento válido mais recente para seu arquivo proprietário e sua posição lógica.
Um resumo indica o nó-i 14 e o bloco 2, mas o endereço antigo está inativo se o nó-i mais recente apontar para outro lugar.
Bloco de dados
Um bloco de dados é uma unidade de alocação que contém o conteúdo de arquivos ou entradas de diretório, alcançada pelo mapeamento armazenado do objeto.
O bloco de dados de um diretório contém nomes e números de nós-i, enquanto o bloco de um arquivo comum contém seus bytes.
Bloco indireto
Um bloco indireto armazena uma sequência de endereços de blocos, ampliando os dados alcançáveis por um único ponteiro no nó-i.
Um bloco indireto de 4 KiB com endereços de 4 bytes pode identificar 1.024 blocos de dados separados.
Bloco lógico de arquivo
Um bloco lógico de arquivo é uma parte de um arquivo do tamanho de um bloco, identificada por sua posição dentro desse arquivo, independentemente da localização no disco.
Os blocos lógicos 0 e 1 podem ser armazenados longe um do outro, embora seus intervalos de bytes sejam consecutivos.
Buffer de trilha
Um buffer de trilha é uma memória da unidade que mantém dados lidos de uma trilha, reduzindo a necessidade de espaçamento rotacional controlado por software.
A unidade pode retornar o próximo bloco solicitado de seu buffer de trilha mesmo depois que ele passou sob a cabeça.
Buffer modificado
Um buffer modificado é uma cópia em memória de dados ou metadados que foi alterada e ainda precisa ser escrita no armazenamento.
Várias edições podem atualizar um bloco modificado antes que o sistema de arquivos envie seu conteúdo final ao dispositivo.

C

Cache de arquivos completos
O cache de arquivos completos mantém um arquivo inteiro no cliente, atendendo a leituras e escritas locais enquanto essa versão em cache permanecer utilizável.
O AFS pode reabrir um arquivo válido em cache no disco sem baixá-lo novamente, mesmo depois que ele deixa de caber na memória.
Cache de atributos
Um cache de atributos mantém metadados de arquivos temporariamente para que um cliente possa evitar pedir ao servidor que os valide a cada acesso.
Os temporizadores padrão de atributos de arquivos comuns no Linux vão de 3 a 60 segundos, permitindo leituras desatualizadas entre verificações.
Cache de páginas
O cache de páginas é a memória usada para reter dados de arquivos e blocos relacionados, de modo que acessos posteriores possam evitar operações no dispositivo de armazenamento.
Uma segunda leitura de um bloco inalterado em cache pode copiar bytes para o programa sem emitir outra leitura de disco.
Cache desatualizado
Um cache desatualizado contém uma cópia antiga de um objeto que não corresponde mais à versão publicada atualmente por seu servidor.
Um cliente com um arquivo já aberto pode ler bytes antigos em cache depois que outro cliente fechou uma versão modificada.
Caminho absoluto
Um caminho absoluto identifica um objeto a partir do diretório raiz, indicado por uma barra inicial em caminhos Unix.
O caminho /srv/reports/today começa na raiz mesmo quando o diretório atual do processo é /home/lee.
Caminho relativo
Um caminho relativo identifica um objeto a partir do diretório de trabalho atual do processo em vez da raiz.
A partir de /srv/reports, o caminho ../logs chega a /srv/logs seguindo primeiro a entrada do diretório pai.
Compromisso de notificação de alterações
Um compromisso de notificação de alterações do AFS é uma promessa do servidor de avisar um cliente quando um objeto em cache mudar, permitindo sua reutilização sem verificações repetidas.
Publicar um arquivo alterado faz o servidor invalidar os compromissos de notificação dos outros clientes para que aberturas posteriores atualizem suas cópias.
Concessão temporária
Uma concessão temporária é um estado ou uma promessa com prazo limitado, gerenciado pelo servidor, que um cliente deve renovar para manter, permitindo sua expiração após uma falha.
Um servidor NFSv4 pode recuperar recursos associados ao estado de um cliente que falhou quando sua concessão temporária expira sem renovação.
Consistência após falhas
A consistência após falhas é o requisito de que as estruturas armazenadas do sistema de arquivos possam ser recuperadas para um estado válido e coerente após atualizações interrompidas.
Um acréscimo não deve deixar um nó-i como dono de um bloco que o alocador ainda considera disponível para outro arquivo.
Consistência em que prevalece o último fechamento
A consistência em que prevalece o último fechamento resolve escritas concorrentes no AFS permitindo que o último cliente a fechar substitua a versão inteira do arquivo no servidor.
Dois clientes que editam regiões diferentes ainda podem perder uma edição porque o fechamento publica uma cópia local completa.
Consistência entre fechamento e abertura
A consistência entre fechamento e abertura torna as alterações descarregadas por quem escreveu visíveis a quem abrir posteriormente, permitindo uma visibilidade mais fraca durante sessões abertas.
Depois que o cliente A fecha um arquivo NFS modificado, o cliente B o abre e valida seu cache antes de ler as alterações.
Consolidação de transações
A consolidação de transações no registro em diário copia os blocos registrados de uma transação confirmada para seus locais finais comuns no sistema de arquivos.
O espaço do diário continua necessário até que a consolidação tenha colocado cada imagem necessária com segurança em seu destino.
Contagem de ligações
Uma contagem de ligações registra quantos nomes de diretório se referem a um nó-i, com uma contagem especial das entradas de ponto para diretórios Unix clássicos.
Duas ligações físicas para um arquivo comum produzem uma contagem de ligações de 2, independentemente de quantos descritores estejam abertos.
Cópia na escrita
A cópia na escrita coloca blocos modificados em novos endereços e publica uma nova raiz, mantendo a versão antiga intacta até a troca.
Uma falha antes da publicação deixa a árvore antiga acessível em vez de expor uma mistura de atualizações no próprio local.
ctime
ctime é o registro de horário de alteração do estado do nó-i, atualizado por escritas de conteúdo e alterações como permissões, propriedade ou ligações.
Executar chmod altera ctime mesmo que os bytes e, portanto, o horário de modificação do conteúdo permaneçam inalterados.
Custo de posicionamento
O custo de posicionamento é o tempo de busca e a latência rotacional que um disco rígido paga antes de começar a transferir os dados solicitados.
Duas leituras distantes de 4 KiB podem gastar muito mais tempo em posicionamento do que na transferência de seus pequenos conteúdos.

D

Dados residuais inválidos
Dados residuais inválidos são conteúdo antigo ou inválido não pretendido, exposto por um arquivo mesmo quando seus ponteiros e registros de alocação concordam.
Se o ponteiro de um novo bloco for confirmado antes que os novos bytes desse bloco cheguem, um arquivo aparentemente válido pode expor o conteúdo anterior do bloco.
Descritor de arquivo
Um descritor de arquivo é um número inteiro não negativo, local a um processo, que se refere a uma entrada do núcleo para um arquivo aberto.
Depois que open retorna 4, o programa passa 4 a read, write e close para essa referência aberta.
Deslocamento no arquivo
Um deslocamento no arquivo é a posição em bytes em uma entrada de arquivo aberto na qual começa a próxima leitura ou escrita comum.
Ler 32 bytes a partir do deslocamento 80 deixa o deslocamento em 112 quando a leitura retorna a quantidade completa.
Diário de transações
Um diário de transações é um registro reservado no disco que contém registros de atualização para que alterações confirmadas possam ser recuperadas após escritas interrompidas.
Uma falha durante a consolidação pode ser reparada a partir do diário sem percorrer todos os nós-i do sistema de arquivos.
Durabilidade
Durabilidade é a propriedade pela qual uma atualização armazenada e confirmada permanece disponível após uma falha ou queda de energia.
Um editor espera uma chamada fsync bem-sucedida antes de informar que o novo conteúdo de um documento foi salvo de forma durável.

E

Entrada da tabela de arquivos abertos
Uma entrada da tabela de arquivos abertos é um registro do núcleo que contém o deslocamento, o modo de acesso, a referência ao nó-i e a contagem de referências de um arquivo aberto.
Descritores criados por dup apontam para uma entrada de arquivo aberto, então um posicionamento por qualquer um deles altera sua posição compartilhada.
Entrada de diretório
Uma entrada de diretório associa um nome a um número de nó-i, permitindo que uma busca no diretório identifique o objeto nomeado.
Acrescentar uma ligação física cria outra entrada de diretório para um nó-i existente sem copiar o conteúdo do arquivo.
Escrita parcial
Uma escrita parcial é uma chamada de escrita bem-sucedida que informa menos bytes escritos do que o programa solicitou.
Se write retornar 200 para uma solicitação de 500 bytes, o programa ainda precisará tratar os 300 bytes restantes.
Exceção para arquivos grandes
A exceção para arquivos grandes distribui partes posteriores de um arquivo grande do FFS entre grupos para que ele não consuma todo o grupo de seu diretório.
Os primeiros blocos alcançados por ponteiros diretos permanecem locais, enquanto fragmentos indiretos posteriores vão para outros grupos pouco utilizados.
Extensão
Uma extensão é um endereço inicial de disco e um comprimento de sequência que, juntos, descrevem uma sequência contígua de blocos de um arquivo.
Um arquivo contíguo de 1.000 blocos pode usar uma extensão em vez de armazenar 1.000 endereços individuais de blocos.

F

Fragmentação
A fragmentação é a dispersão do espaço livre ou dos blocos de um arquivo em regiões separadas, aumentando o trabalho necessário para o acesso.
Um arquivo pode ter deslocamentos sequenciais em bytes, mas exigir buscas repetidas porque seus blocos alocados estão dispersos.
fsck
fsck é um verificador de sistemas de arquivos que percorre metadados e repara relações de alocação, ponteiros, nós-i e diretórios após corrupção.
O verificador pode definir um bit no mapa quando um nó-i válido é dono do bloco, mas o mapa indica incorretamente que ele está livre.

G

Grupo de blocos
Um grupo de blocos é um intervalo consecutivo de blocos lógicos de disco com estruturas locais de alocação, nós-i e espaço de dados.
O ext4 usa grupos de blocos para buscar localidade mesmo que a unidade não exponha sua geometria real.
Grupo de cilindros
Um grupo de cilindros é uma região do FFS formada por cilindros vizinhos do disco, que mantém seus nós-i, mapas de bits e dados fisicamente próximos.
Colocar um arquivo pequeno no grupo de cilindros de seu diretório encurta as buscas entre as estruturas atualizadas.

I

Idempotência
Idempotência significa que repetir uma operação tem o mesmo efeito que executá-la uma vez, permitindo novas tentativas seguras de requisições adequadas.
Repetir uma WRITE com deslocamento explícito armazena bytes idênticos no mesmo local em vez de acrescentá-los novamente.
Identificador de arquivo remoto
Um identificador de arquivo remoto identifica um objeto remoto usando informações como seu volume no servidor, número de nó-i e geração.
Um cliente inclui o identificador em READ para que o servidor conheça o objeto sem depender de uma requisição OPEN anterior.

L

Ligação física
Uma ligação física é um nome de diretório que se refere diretamente a um nó-i existente e tem a mesma condição que seus outros nomes.
Após ln draft copy, remover draft deixa copy apontando para o mesmo arquivo e seus bytes existentes.
Ligação simbólica
Uma ligação simbólica é um arquivo separado cujo conteúdo especifica um caminho de destino que o sistema segue durante a resolução de caminho.
Uma ligação para /media/archive pode alcançar outro sistema de arquivos, mas falha se seu caminho de destino desaparecer.
Limpador de segmentos
O limpador de segmentos é o componente do LFS que copia blocos ativos de segmentos parcialmente usados e libera os segmentos antigos para reutilização.
Compactar quatro segmentos com um quarto de dados ativos em um só resulta em um ganho de três segmentos de capacidade, com custo de entrada e saída para cópia.
Lista de controle de acesso (ACL)
Uma lista de controle de acesso acrescenta regras de permissão para usuários ou grupos identificados além das classes de permissão de proprietário, grupo e demais usuários.
Uma ACL pode conceder acesso a um membro específico de um projeto sem conceder os mesmos direitos a todos os demais usuários.
Localidade no espaço de nomes
A localidade no espaço de nomes é a tendência de arquivos próximos na árvore de diretórios, especialmente dentro de um mesmo diretório, serem acessados em conjunto.
Um compilador que abre vários arquivos de código-fonte em um projeto se beneficia quando seus nós-i e conteúdos ficam próximos.

M

Mapa de bits de alocação
Um mapa de bits de alocação usa um bit por objeto controlado para registrar se esse nó-i ou bloco de dados está alocado ou livre.
Alocar um novo bloco de dados define seu bit no mapa de bits de dados, enquanto um novo arquivo também precisa de um bit no mapa de bits de nós-i.
Mapa de nós-i (imap)
O mapa de nós-i, ou imap, traduz cada número estável de nó-i no endereço de disco de sua versão mais recente em um registro do LFS.
Um diretório pode manter o número de nó-i 14 mesmo quando o nó-i mais recente muda do endereço 300 para o endereço 900.
Máscara de criação de arquivos (umask)
Uma máscara de criação de arquivos é uma configuração do processo que remove bits de permissão selecionados das permissões solicitadas para um novo arquivo.
Sem uma ACL padrão, a umask 0022 transforma uma solicitação de 0666 nas permissões 0644.
Metadados
Metadados são informações que descrevem um arquivo, como tipo, tamanho, propriedade, permissões, registros de horário e localizações de dados.
fstat lê metadados por meio de um descritor sem tratar o conteúdo do arquivo como um registro de metadados.
Modo de acréscimo
O modo de acréscimo é um modo de arquivo aberto que coloca cada escrita no fim atual do arquivo, selecionado com O_APPEND.
Um processo de registro usa O_APPEND para que cada nova mensagem seja colocada após o conteúdo existente do arquivo.
Modo de diário writeback
O modo de diário writeback registra metadados em diário sem exigir que os blocos de dados associados cheguem ao armazenamento final antes da confirmação.
Após a recuperação em data=writeback, os metadados podem estar consistentes mesmo quando um arquivo escrito recentemente contém bytes desatualizados.
mtime
mtime é o registro de horário da última modificação do conteúdo de um arquivo, que distingue alterações nos bytes armazenados de outras alterações do estado do nó-i.
Alterar permissões atualiza ctime, enquanto escrever o conteúdo do arquivo atualiza mtime e ctime.

N

Nó-i
Um nó-i é um registro de sistema de arquivos no estilo Unix que armazena os metadados e as localizações de dados de um objeto, mas não armazena seu nome de arquivo.
Dois nomes de diretório podem compartilhar o nó-i 28, então alterar o arquivo por qualquer um dos nomes atualiza o mesmo objeto.
Nó-i inacessível pela árvore de diretórios
Um nó-i inacessível pela árvore de diretórios é um nó-i alocado que não pode ser alcançado pela árvore de diretórios a partir da raiz do sistema de arquivos.
Após danos no diretório, o fsck pode colocar em lost+found um nó-i inacessível que, por outro lado, seja válido, para inspeção.
Número de geração
Um número de geração distingue objetos sucessivos aos quais foi atribuído o mesmo número de nó-i, protegendo clientes contra identidades desatualizadas.
Reutilizar o nó-i 31 com uma geração mais recente impede que um identificador antigo do nó-i 31 excluído nomeie seu substituto.

P

Ponteiro direto
Um ponteiro direto é um endereço armazenado em um nó-i que aponta diretamente para um bloco de dados sem um bloco de ponteiros separado.
O terceiro ponteiro direto localiza o bloco lógico de arquivo 2 porque a numeração dos blocos começa em zero.
Ponteiro duplamente indireto
Um ponteiro duplamente indireto alcança um bloco de ponteiros para blocos indiretos, acrescentando um segundo nível de endereços antes dos dados.
Um arquivo que excede a capacidade direta e indireta simples aloca uma raiz dupla e filhos indiretos suficientes.
Ponteiro duplicado
Um ponteiro duplicado é uma referência a bloco que causa conflito de propriedade quando dois nós-i reivindicam o mesmo bloco de dados.
Um reparo pode dar a cada arquivo sua própria cópia para que alterar um arquivo não mude silenciosamente os dados do outro.
Ponteiro inválido
Um ponteiro inválido é um endereço de bloco armazenado fora do intervalo de endereços válido do sistema de arquivos e que, portanto, não pode identificar dados válidos pertencentes ao arquivo.
Se um nó-i apontar para além do fim da partição, o fsck limpa esse ponteiro inválido durante o reparo.
Ponto de montagem
Um ponto de montagem é um caminho de diretório existente ao qual a raiz de outro sistema de arquivos é associada na árvore de diretórios visível.
Montar uma unidade em /media/usb oculta o conteúdo anterior desse diretório enquanto a montagem permanece ativa.
Problema da atualização recursiva
O problema da atualização recursiva ocorre quando mover um objeto força a reescrita de ponteiros dos objetos pais, que mudam de lugar e forçam novas reescritas.
Números estáveis de nós-i junto com o imap impedem que um nó-i de arquivo movido force atualizações até a raiz.

R

Recuperação por reaplicação de atualizações
A recuperação por reaplicação de atualizações percorre atualizações válidas do registro após um ponto de verificação e as aplica para reconstruir um estado mais recente que esse ponto.
Um segmento escrito após o último ponto de verificação ainda pode ser recuperado quando sua atualização é válida e completa.
Região de ponto de verificação
A região de ponto de verificação é um local fixo do LFS que registra os endereços das partes mais recentes do imap para que o registro em movimento possa ser localizado.
Na montagem, o sistema lê a região de ponto de verificação antes de carregar o mapa de nós-i e localizar os nós-i dos arquivos.
Registro circular
Um registro circular reutiliza uma região limitada de armazenamento retornando ao início e recuperando o espaço de registros cujo trabalho de recuperação terminou.
Quando uma transação é consolidada, seu espaço no diário pode ficar disponível para uma transação posterior.
Registro de confirmação
Um registro de confirmação marca uma transação como completa e recuperável depois que seu conteúdo necessário no diário chega ao armazenamento durável.
Blocos de área útil sem um registro de confirmação válido e correspondente são ignorados pelo protocolo básico de recuperação por reaplicação.
Registro de metadados em diário
O registro de metadados em diário registra alterações nas estruturas do sistema de arquivos enquanto dados comuns de arquivos são escritos diretamente em seus locais finais.
Os modos ordered e writeback registram metadados em diário, mas apenas o modo ordered impõe a ordenação dos dados antes da confirmação.
Registro de revogação
Um registro de revogação informa à recuperação que não deve reaplicar imagens registradas obsoletas de um bloco em transações até a transação que fez a revogação.
A revogação impede que uma imagem antiga de diretório sobrescreva dados de usuário após a reutilização do mesmo bloco de disco.
Registro físico
O registro físico registra imagens completas de blocos substitutos, permitindo que a recuperação refaça uma atualização escrevendo essas imagens em endereços fixos.
Reaplicar uma imagem de nó-i repete os mesmos bytes armazenados, mesmo que essa imagem tenha sido consolidada antes da falha.
Registro lógico
O registro lógico registra uma descrição de uma operação de atualização em vez de armazenar imagens completas de substituição de cada bloco alterado.
Um registro compacto de operação descreve uma alteração, enquanto um diário físico contém os próprios bytes dos novos blocos.
Registro ordenado em diário
O registro ordenado em diário é o registro de metadados em diário que torna duráveis os dados referenciados em seu local final antes de confirmar os metadados.
Um novo bloco de dados e os metadados do diário podem ser escritos em paralelo, mas ambos devem terminar antes do registro de confirmação.
Resolução de caminho
A resolução de caminho resolve um caminho componente por componente, usando o conteúdo de diretórios para encontrar cada próximo nó-i até alcançar o destino.
Abrir /team/result encontra primeiro team na raiz e depois encontra result no diretório team.
Resumo do segmento
Um resumo do segmento registra informações de propriedade, como número de nó-i e deslocamento lógico, para blocos armazenados em um segmento do LFS.
O limpador usa o resumo para descobrir qual ponteiro do nó-i atual deve comparar com o endereço de um bloco.
Retrato do estado
Um retrato do estado preserva uma visão de um estado anterior do sistema de arquivos mantendo os blocos e mapeamentos antigos que definem essa versão.
A cópia na escrita pode manter a árvore antiga disponível enquanto blocos alterados são escritos para a versão atual.

S

Segmento
Um segmento é uma grande unidade sequencial de saída do LFS que contém dados e metadados em buffer escritos juntos em espaço não utilizado.
Combinar muitas pequenas alterações em um segmento distribui o custo de posicionamento do disco por uma transferência mais longa.
Segmento quente
Um segmento quente contém blocos substituídos com frequência, de modo que esperar pode permitir que outros blocos se tornem inativos antes da limpeza.
Adiar um segmento quente pode evitar a cópia de dados que outra escrita de aplicação logo tornará obsoletos.
Servidor sem estado
Um servidor sem estado executa requisições que contêm todas as informações necessárias sem manter estado de arquivos abertos por cliente, como descritores e deslocamentos.
Um servidor NFSv2 pode voltar a atender requisições após reiniciar sem reconstruir a tabela de arquivos abertos de cada cliente.
Sistema de arquivos Andrew (AFS)
O sistema de arquivos Andrew, ou AFS, é um projeto distribuído que usa cache de arquivos completos no cliente e compromissos de notificação do servidor para reduzir trabalho repetido.
Uma cópia válida do AFS em cache no disco pode ser reaberta sem um novo download, enquanto uma cópia invalidada precisa ser atualizada.
Sistema de arquivos distribuído
Um sistema de arquivos distribuído permite que máquinas clientes usem arquivos armazenados em servidores pela rede por meio de operações de arquivo conhecidas.
O cliente traduz uma chamada read de um programa em uma requisição que identifica um arquivo do servidor e o intervalo de bytes desejado.
Sistema de arquivos em rede (NFS)
O sistema de arquivos em rede, ou NFS, é uma família de protocolos para acessar arquivos de servidores, com projetos sem estado no NFSv2 e com estado no NFSv4.
Um cliente Linux normalmente tenta primeiro a versão 4.2 do NFS, então o modelo mais antigo sem estado não descreve toda montagem.
Sistema de arquivos estruturado em registro (LFS)
Um sistema de arquivos estruturado em registro escreve dados e metadados em buffer sequencialmente em espaço não utilizado, substituindo versões antigas por meio de novos mapeamentos.
Atualizar um bloco de arquivo escreve um novo bloco e um novo nó-i em vez de sobrescrever seus locais anteriores no disco.
Sistema de arquivos virtual (VFS)
O sistema de arquivos virtual é uma camada do núcleo que apresenta operações de arquivo comuns para diferentes tipos de sistemas de arquivos subjacentes.
Um programa pode usar read em um arquivo ext4 e em um arquivo NFS enquanto suas implementações lidam com armazenamentos diferentes.
Soma de verificação da transação
Uma soma de verificação da transação resume o conteúdo registrado para que a recuperação possa detectar uma área útil de transação incompleta ou danificada.
Um marcador de confirmação aparentemente correspondente não basta quando a validação mostra que parte de sua área útil está ausente.
Sub-bloco
Um sub-bloco é uma parte menor de alocação usada pelo FFS para armazenar arquivos curtos sem desperdiçar um bloco grande inteiro do sistema de arquivos.
Um arquivo curto pode ocupar uma parte de 512 bytes antes que seu crescimento exija copiar seu conteúdo para um bloco inteiro.
Substituição atômica
Uma substituição atômica muda um nome de destino de um arquivo antigo para um novo sem expor um intervalo intermediário em que o nome esteja ausente.
Uma chamada rename no mesmo sistema de arquivos substitui config enquanto os leitores acessam o arquivo antigo completo ou o novo completo.
Superbloco
Um superbloco armazena as contagens, informações de organização e valores de identificação necessários para interpretar e montar um sistema de arquivos.
O sistema operacional lê o superbloco para localizar a tabela de nós-i antes de buscar arquivos individuais.

T

Tabela de alocação de arquivos (FAT)
A tabela de alocação de arquivos, ou FAT, armazena ligações para o próximo bloco dos arquivos em uma tabela separada, formando uma cadeia a partir de cada primeiro bloco.
Encontrar o vigésimo bloco de um arquivo exige seguir sua cadeia mesmo quando a própria tabela está em cache.
Tabela de nós-i
Uma tabela de nós-i é uma região que contém registros de nós-i de tamanho fixo, cujas posições podem ser calculadas a partir de seus números de nós-i.
Uma tabela que começa no byte 16.384 coloca o nó-i 20, de 256 bytes, no endereço absoluto de byte 21.504.
Transação
Uma transação agrupa atualizações relacionadas sob uma única decisão de confirmação, de modo que a recuperação aceite uma alteração completa ou a ignore.
Uma transação de acréscimo pode conter uma nova imagem de nó-i, uma imagem de mapa de bits de alocação e o novo bloco de dados.
Truncamento
O truncamento altera o tamanho lógico de um arquivo; a redução descarta bytes finais, enquanto a extensão cria bytes que são lidos como zeros.
Abrir um arquivo existente com O_TRUNC esvazia-o antes que o programa escreva qualquer conteúdo substituto.

U

Unidade de escrita atômica
Uma unidade de escrita atômica é a quantidade que uma interface de armazenamento garante escrever completamente ou deixar inalterada quando ocorre uma interrupção.
Um registro de confirmação do diário deve caber na unidade atômica compatível com o dispositivo para o protocolo básico de marcador de tudo ou nada.

V

Vazamento de espaço de armazenamento
Um vazamento de espaço de armazenamento é armazenamento alocado que nenhum objeto proprietário acessível usa, tornando a capacidade indisponível sem preservar conteúdo útil.
Uma atualização do mapa de bits sem o novo ponteiro do nó-i pode reservar um bloco que nenhum arquivo alcança após a recuperação.

Sobre esta aula

Por StudeliRelatar um erro

Crie seus próprios Materiais de Estudo

Transforme suas anotações, slides e documentos em Guias de Estudo, Questões de Prática, Flashcards e mais 6 ferramentas.

Começar