O InodesFS é um simulador acadêmico de sistema de arquivos inspirado no funcionamento de sistemas Linux. O projeto foi desenvolvido em C e deve ser executado em ambiente Debian/Linux, pois utiliza chamadas POSIX como fork(), wait() e bibliotecas como unistd.h e sys/wait.h.
A proposta é demonstrar, de forma prática, como um sistema de arquivos pode organizar diretórios, arquivos, inodes, blocos de dados, permissões, links físicos, links simbólicos e relatórios de integridade.
Simular conceitos de gerenciamento de arquivos no Linux, com ênfase em:
- estrutura de inode;
- alocação de blocos;
- blocos livres e defeituosos;
- diretórios como tabelas de entradas;
- permissões no estilo Unix;
- hard links e symbolic links;
- navegação por caminhos absolutos e relativos;
- relatórios de uso e integridade do disco.
inodecomo estrutura central de metadados.- Ponteiros diretos, indiretos simples, indiretos duplos e indiretos triplos.
- Diretórios como arquivos especiais que apontam nomes para inodes.
- Permissões no formato semelhante a
-rw-r--r--edrwxr-xr-x. - Separação entre nome de arquivo e inode.
- Hard link compartilhando o mesmo inode.
- Symlink apontando para outro caminho.
- Blocos defeituosos e arquivos corrompidos.
- Relatórios semelhantes a ferramentas de administração de sistemas.
- Execução Linux/POSIX com processo filho usando
fork().
- Inicialização de um disco virtual com quantidade de blocos e tamanho de bloco configuráveis.
- Criação de arquivos regulares.
- Criação e remoção de diretórios.
- Navegação com
cd,pwdels. - Listagem detalhada com atributos via
ls -l. - Alteração de permissões com
chmod. - Criação de hard links.
- Criação de symbolic links.
- Remoção com
rm,rmdireunlink. - Marcação de blocos defeituosos.
- Visualização de arquivos com
vi. - Relatórios de espaço, integridade, blocos, árvore e links.
flowchart LR
CLI["Prompt inodesfs"] --> CMD["Parser de comandos"]
CMD --> FS["Sistema de Arquivos Virtual"]
FS --> INODE["Tabela de Inodes"]
FS --> DIR["Blocos de Diretório"]
FS --> DATA["Blocos de Dados"]
FS --> FREE["Pilha de Blocos Livres"]
FS --> REPORT["Relatórios"]
INODE --> DIRECT["Ponteiros Diretos"]
INODE --> INDIRECT["Indiretos Simples/Duplos/Triplos"]
erDiagram
INODE ||--o{ BLOCO_DADOS : aponta
INODE ||--o{ INODE_EXTENSAO : usa
DIRETORIO ||--o{ ENTRADA_DIRETORIO : contem
ENTRADA_DIRETORIO }o--|| INODE : referencia
INODE ||--o{ HARD_LINK : compartilha
SYMLINK }o--|| CAMINHO : aponta
Representa o inode principal de um arquivo, diretório ou link simbólico.
Guarda:
- tipo do inode;
- permissões;
- data e hora de modificação;
- tamanho em bytes;
- usuário e grupo;
- contador de hard links;
- ponteiros diretos;
- ponteiros indiretos simples, duplos e triplos;
- inode do diretório pai.
Representa os níveis de indireção usados para arquivos maiores.
O projeto simula:
- indireção simples;
- indireção dupla;
- indireção tripla.
Representa um bloco físico do disco virtual.
Cada bloco pode estar:
- livre;
- defeituoso;
- usado como inode;
- usado como dado.
Representam diretórios no estilo Unix: um diretório guarda entradas que ligam um nome a um inode.
Isso mostra uma ideia importante do Linux: o nome do arquivo fica no diretório, enquanto os metadados e blocos ficam no inode.
Controla os blocos livres. Quando um bloco é alocado, sai da pilha; quando é liberado, volta para ela.
ajuda Lista comandos disponíveis
pwd Exibe diretório atual
ls Lista diretório atual
ls -l Lista com atributos
mkdir NomeDir Cria diretório
rmdir NomeDir Remove diretório vazio
touch nomeArquivo tamanho Cria arquivo regular
vi nomeArquivo Visualiza arquivo regular
rm NomeArq Remove arquivo
cd NomeDir | . | .. Navega nos diretórios
chmod (+/-)ugo RWX caminho Altera permissões
link -h origem destino Cria hard link
link -s origem destino Cria link simbólico
unlink -h nomeArquivo Remove hard link
unlink -s nomeArquivo Remove link simbólico
bad numeroBloco Marca bloco como defeituoso
df Mostra espaço livre e ocupado
blks caminho Mostra blocos ocupados por arquivo
maxfile Mostra maior arquivo possível
integridade Lista arquivos íntegros/corrompidos
perdidos Mostra blocos perdidos
mapa Exibe mapa completo do disco
alocados Mostra arquivos e diretórios alocados
arvore Mostra árvore com atributos
links Mostra links simbólicos e físicos
sair Encerra o simulador
mkdir home
cd home
touch notas.txt 35
ls -l
link -h notas.txt notas-hard.txt
link -s notas.txt notas-link.txt
df
blks notas.txt
links
arvore
sair
- C
- Debian/Linux
- GCC
- POSIX
- fork/wait
- Simulação de filesystem com inodes
TrabalhoSOII/
├── inodesfs.c
├── build.sh
├── TrabalhoInode.docx
├── .gitignore
└── README.md