Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Journaling File System, Manuais, Projetos, Pesquisas de Estruturas de Dados e Algoritmos

Um trabalho que fiz no 4º semestre de ciência da computação na USP-RP, na disciplina "Algoritmos e estruturas de dados II". IMPORTANTE: hoje, com mais conhecimento, entendo que escrevi algumas definições incorretas se tratando de bitmap e DataBlock e pretendo atualizar em breve.

Tipologia: Manuais, Projetos, Pesquisas

2021

Compartilhado em 12/02/2021

sabrina-kappann-da-silva
sabrina-kappann-da-silva 🇧🇷

4 documentos

1 / 3

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Journaling File System
Sabrina Kappann da Silva
Departamento de Computação e Matemática – Faculdade de Filosofia, Ciências e Letras
Universidade de São Paulo – Ribeirão Preto, São Paulo, Brasil
Resumo. Este artigo traz aspectos gerais de um funcionamento de um
“journaled file system”, com ênfase no ext3, e a comparação deste com o
UNIX file system com seu processo do fsck.
1. Introdução
Um file system gerencia um conjunto de estruturas para lidar com arquivos, diretórios e
seus metadados (dados sobre os dados armazenados). Além disso, deve garantir que os
arquivos sejam persistentes, mesmo com possíveis falhas de software ou hardware, tais
como queda de energia, mal funcionamento dos equipamentos físicos ou programas
“crashados”. Nesse sentido, o Journaled File System (JFS), de forma breve, ‘anota’ tudo
o que é feito, para que possa ser recuperado.
Ao modificar um arquivo, por exemplo, é preciso, também, escrever 3 coisas: o inode
(que guarda metadados dos arquivos e sua localização no bloco), bitmap (indica que um
bloco e inode foi alocado), e um bloco de conteúdo (que escreve efetivamente o
conteúdo em disco). Um problema conhecido como “crash-consistency” acontece
porque não é possível dar um append no arquivo e escrever o inode, bitmap e novo
bloco no disco atômicamente, e erros podem acontecer enquanto atualizam-se essas
informações. Uma solução para isso é o Journaled File System (JFS). Aqui, será
abordado o JFS aplicado no ext3 do Linux.
O primeiro JFS foi lançado em 1990 pela IBM, mas atualmente o ext3 (“third extended
file system”)
é o mais popular nesse sentido, utilizado desde 2001. Foi criado para
manter a compatibilidade do ext2 mas, ao mesmo tempo, trazer inovações como o fato
de ser journaled.
2. Aspectos Técnicos
2.1. Conceitos iniciais e inconsistência de dados
Para escrever um novo bloco de memória, o bitmap (que aloca blocos e relaciona-os com
números de inode) e o inode bitmap também devem ser atualizados. Um inode (index node) é
uma estrutura que tem metadados dos arquivos, tais como tipo, tamanho, permissões e última
modificação. Dado um inumber (número de inode), você sabe em qual inode está localizado e,
com isso, sabe em qual bloco o arquivo está. A tabela 1 mostra os casos onde uma (ou mais)
dessas três estruturas deixam de ser escritas - o “sim” ou “não” indica se a estrutura foi, ou não,
escrita no journal.
Inode
Bitmap
DataBlock
Problema
não
não
sim
O conteúdo é escrito em disco, mas não há inode apontando para
pf3

Pré-visualização parcial do texto

Baixe Journaling File System e outras Manuais, Projetos, Pesquisas em PDF para Estruturas de Dados e Algoritmos, somente na Docsity!

Journaling File System

Sabrina Kappann da Silva

Departamento de Computação e Matemática – Faculdade de Filosofia, Ciências e Letras

Universidade de São Paulo – Ribeirão Preto, São Paulo, Brasil

[email protected]

Resumo. Este artigo traz aspectos gerais de um funcionamento de um

“journaled file system”, com ênfase no ext3, e a comparação deste com o

UNIX file system com seu processo do fsck.

1. Introdução

Um file system gerencia um conjunto de estruturas para lidar com arquivos, diretórios e

seus metadados (dados sobre os dados armazenados). Além disso, deve garantir que os

arquivos sejam persistentes, mesmo com possíveis falhas de software ou hardware, tais

como queda de energia, mal funcionamento dos equipamentos físicos ou programas

“crashados”. Nesse sentido, o Journaled File System (JFS), de forma breve, ‘anota’ tudo

o que é feito, para que possa ser recuperado.

Ao modificar um arquivo, por exemplo, é preciso, também, escrever 3 coisas: o inode

(que guarda metadados dos arquivos e sua localização no bloco), bitmap (indica que um

bloco e inode foi alocado), e um bloco de conteúdo (que escreve efetivamente o

conteúdo em disco). Um problema conhecido como “crash-consistency” acontece

porque não é possível dar um append no arquivo e escrever o inode, bitmap e novo

bloco no disco atômicamente, e erros podem acontecer enquanto atualizam-se essas

informações. Uma solução para isso é o Journaled File System (JFS). Aqui, será

abordado o JFS aplicado no ext3 do Linux.

O primeiro JFS foi lançado em 1990 pela IBM, mas atualmente o ext3 (“ third extended

file system”) é o mais popular nesse sentido, utilizado desde 2001. Foi criado para

manter a compatibilidade do ext2 mas, ao mesmo tempo, trazer inovações como o fato

de ser journaled.

2. Aspectos Técnicos

2.1. Conceitos iniciais e inconsistência de dados

Para escrever um novo bloco de memória, o bitmap (que aloca blocos e relaciona-os com números de inode) e o inode bitmap também devem ser atualizados. Um inode (index node) é uma estrutura que tem metadados dos arquivos, tais como tipo, tamanho, permissões e última modificação. Dado um inumber (número de inode), você sabe em qual inode está localizado e, com isso, sabe em qual bloco o arquivo está. A tabela 1 mostra os casos onde uma (ou mais) dessas três estruturas deixam de ser escritas - o “sim” ou “não” indica se a estrutura foi, ou não, escrita no journal.

Inode Bitmap DataBlock Problema

não não sim O conteúdo é escrito em disco, mas não há inode apontando para

Tabela 1. Possíveis problemas pela falta de uma ou mais estruturas do arquivo

2.2. O processo do journal

Para evitar essas inconsistências, antes de escrever as estruturas é escrito uma nota (no journal, ou “diário”) do que o sistema está prestes a fazer, além de um identificador da transação (transaction identifier - TID), que fica em um bloco chamado “transactionend block”. Por esse motivo, journaling também é chamado de “write-ahead logging”, ou seja, escrever, num arquivo (log) antes de efetuar as transações. Após feito esse processo, um “checkpoint” é alcançado, e agora as estruturas de dados usuais podem ser efetivamente escritas. Assim, é possível recuperar o que estava sendo feito e qual erro ocorreu. Seria ideal escrever todos os processos no journal de uma vez, mas isso não é seguro. Uma alternativa é escrever tudo no journal de uma vez, exceto pelo transactionend block, que é feito na próxima operação.

2.3. Recuperação de dados

Se o computador for reiniciado (por exemplo) e for verificado que esse bloco de final de transação não está no journal, é possível diagnosticar alguns erros, da seguinte forma: Se um erro acontecer antes de colocar o transactionend block, a operação é cancelada. Caso contrário, o sistema irá recuperar transações já feitas, repeti-las em ordem e, depois, continuar a atualizar o arquivo de onde parou (processo chamado redo logging). O journal é liberado atualizando seu superbloco. Após o checkpoint, o conteúdo pode ser efetivamente escrito em disco.

aquele arquivo nem o bitmap pra dizer onde o bloco foi alocado. É como se nenhum conteúdo tivesse sido escrito.

sim não não Existe um inode para aquele arquivo, mas ele aponta para algum lixo, visto que o conteúdo não foi efetivamente escrito. É o chamado “file-system inconsistency”

não sim não O bitmap indica que um bloco foi alocado, mas não há conteúdo para esse arquivo nem inode apontando para ele. Isso forma um “space leak”, um espaço que não poderá ser utilizado pelo FS posteriormente.

sim sim não Um bloco foi alocado e tem um bitmap para ele, assim como um inode para esse arquivo. Entretanto, o conteúdo foi corrompido.

sim não sim Existe conteúdo escrito, para o qual um inode aponta para ele, mas o bitmap não aponta para a região desse novo bloco alocado.

não sim sim O bloco foi escrito e o bitmap indica qual bloco foi alocado, mas não é possível saber qual é o arquivo de referência para aquele conteúdo.