|
1 | 1 | <h1> Implementação do Sistema de Arquivos EXT2 </h1>
|
2 | 2 |
|
3 |
| --Primeiramente, verifique se a imagem myext2image.img está na pasta "implementação", caso não esteja, por favor realize o download da imagem e a insira dentro da pasta "implementação". |
4 |
| - |
5 |
| --Como Compilar:<br> |
6 |
| -Utilizando o arquivo makefile:<br> |
7 |
| - Apenas digitar "make super"<br> |
8 |
| -Sem o makefile:<br> |
9 |
| - gcc "nome_do_arquivo".c |
10 |
| - |
11 |
| --Como executar:<br> |
12 |
| -Utilizando o arquivo makefile:<br> |
13 |
| - Apenas digitar "make debug" <br> |
14 |
| -Sem o makefile:<br> |
15 |
| - ./a.out |
16 |
| - |
17 |
| --Bibliotecas usadas:<br> |
18 |
| - time.h, essa biblioteca contém diversas funções e constantes para a manipulação do tempo, como datas, horas e etc.<br> |
19 |
| - sys/types.h, define uma coleção de símbolos e estruturas de typedef.<br> |
20 |
| - sys/stat.h, declara funções relacionadas ao arquivo UNIX.<br> |
21 |
| - sys/wait.h, contém um conjunto de macros, usadas para manter processos.<br> |
22 |
| - sys/resource.h, contém definições para operações de recursos XSI.<br> |
23 |
| - fcntl.h, define requisições e argumentos para uso das funções fcntl() e open().<br> |
24 |
| - unistd.h, fornece acesso à API do sistema operacional POSIX.<br> |
25 |
| - errno.h, retorna um valor para indicar se uma função falhou.<br> |
26 |
| - ./ext2_fs.h, fornece estruturas de typedef relacionadas ao EXT2.<br> |
27 |
| - |
28 |
| - |
29 |
| --Exemplo de uso:<br> |
30 |
| -Utilizando o comando ls, por exemplo: |
| 3 | +Este programa implementa as estruturas de dados e operações para manipular a imagem (``.iso``) de um sistema de arquivos EXT2. As |
| 4 | +operações são invocadas a partir de um prompt (shell). O shell executa as operações a partir da referência |
| 5 | +do diretório corrente. O shell sempre inicia no raiz (``/``) da imagem informada por parâmetro. |
| 6 | + |
| 7 | +As estruturas e a lógica de manipulação foram implementadas a partir da especificação do ext2: |
| 8 | +https://www.nongnu.org/ext2-doc/ext2.html |
| 9 | + |
| 10 | + |
| 11 | +<h3>Operações:</h3> |
| 12 | + |
| 13 | +- `info`: exibe informações do disco e do sistema de arquivos. |
| 14 | +- `cat <filename>`: exibe o conteúdo de um arquivo no formato texto. |
| 15 | +- `attr <file | dir>`: exibe os atributos de um arquivo (*file*) ou diretório (*dir*). |
| 16 | +- `cd <path>`: altera o diretório corrente para o definido como *path*. |
| 17 | +- `ls`: listar os arquivos e diretórios do diretório corrente. |
| 18 | +- `pwd`: exibe o diretório corrente (caminho absoluto). |
| 19 | +- `cp '<source_path>' '<target_path>'`: copia um arquivo de origem (*source_path*) para destino (*target_path*). A origem e o destino devem ser uma partição do disco e o volume ext2 ou vice-versa. Note que os nomes de ambos arquivos precisam necessariamente estar entre aspas simples. |
| 20 | +<br> |
| 21 | + |
| 22 | + |
| 23 | +<h3>Para compilar:</h3> |
| 24 | + |
| 25 | +- Descompacte a imagem ``myext2image.tar.gz`` e verifique sua integridade. Caso estiver corrompida, por favor realize novamente o download da imagem (isso pode ser feito [aqui](https://github.com/campiolo/ext2cat/tree/main) |
| 26 | +) ou gere sua própria imagem ext2. E, por fim, a insira no diretório raiz deste projeto. |
| 27 | + |
| 28 | +```bash |
| 29 | +# utilizando o makefile |
| 30 | +make super |
| 31 | +``` |
| 32 | + |
| 33 | +```bash |
| 34 | +# sem makefile |
| 35 | +gcc ext2.c |
| 36 | +``` |
| 37 | + |
| 38 | +<h3>Para executar:</h3> |
| 39 | +<!-- ```console |
| 40 | +# ./ext2cat <ext2-image-file> |
| 41 | +``` --> |
| 42 | + |
| 43 | +```bash |
| 44 | +# utilizando o makefile |
| 45 | +make debug |
| 46 | +``` |
| 47 | + |
| 48 | +```bash |
| 49 | +# sem makefile |
| 50 | +./a.out |
| 51 | +``` |
| 52 | + |
| 53 | +<br> |
| 54 | + |
| 55 | + |
| 56 | +## Geração da Imagem de Volume Ext2 |
| 57 | + |
| 58 | +Gerando imagens ext2 (64MiB com blocos de 1K): |
| 59 | +```console |
| 60 | +dd if=/dev/zero of=./myext2image.img bs=1024 count=64K |
| 61 | +mkfs.ext2 -b 1024 ./myext2image.img |
| 62 | +``` |
| 63 | + |
| 64 | +Verificando a integridade de um sistema ext2: |
| 65 | +```console |
| 66 | +e2fsck myext2image.img |
| 67 | +``` |
| 68 | + |
| 69 | +Montando a imagem do volume com ext2: |
| 70 | +```console |
| 71 | +sudo mount myext2image.img /mnt |
| 72 | +``` |
| 73 | + |
| 74 | +Estrutura original de arquivos do volume (comando `tree` via bash): |
| 75 | +``` |
| 76 | +/ |
| 77 | +├── [1.0K] documentos |
| 78 | +│ ├── [1.0K] emptydir |
| 79 | +│ ├── [9.2K] alfabeto.txt |
| 80 | +│ └── [ 0] vazio.txt |
| 81 | +├── [1.0K] imagens |
| 82 | +│ ├── [8.1M] one_piece.jpg |
| 83 | +│ ├── [391K] saber.jpg |
| 84 | +│ └── [ 11M] toscana_puzzle.jpg |
| 85 | +├── [1.0K] livros |
| 86 | +│ ├── [1.0K] classicos |
| 87 | +│ │ ├── [506K] A Journey to the Centre of the Earth - Jules Verne.txt |
| 88 | +│ │ ├── [409K] Dom Casmurro - Machado de Assis.txt |
| 89 | +│ │ ├── [861K] Dracula-Bram_Stoker.txt |
| 90 | +│ │ ├── [455K] Frankenstein-Mary_Shelley.txt |
| 91 | +│ │ └── [232K] The Worderful Wizard of Oz - L. Frank Baum.txt |
| 92 | +│ └── [1.0K] religiosos |
| 93 | +│ └── [3.9M] Biblia.txt |
| 94 | +├── [ 12K] lost+found |
| 95 | +└── [ 29] hello.txt |
| 96 | +
|
| 97 | +``` |
| 98 | + |
| 99 | +Desmontando a imagem do volume com ext2: |
| 100 | +```console |
| 101 | +sudo umount /mnt |
| 102 | +``` |
| 103 | + |
| 104 | +<br> |
| 105 | + |
| 106 | +## Exemplos |
| 107 | + |
| 108 | +Os exemplos são executados na imagem `myext2image.img` |
| 109 | + |
| 110 | +Informações do volume e do ext2 (comando `info`): |
| 111 | +```console |
| 112 | +[/]$> info |
| 113 | +Volume name.....: SO-UTFPR-1k |
| 114 | +Image size......: 67108864 bytes |
| 115 | +Free space......: 32133 KiB |
| 116 | +Free inodes.....: 16355 |
| 117 | +Free blocks.....: 35409 |
| 118 | +Block size......: 1024 bytes |
| 119 | +Inode size......: 128 bytes |
| 120 | +Groups count....: 8 |
| 121 | +Groups size.....: 8192 blocks |
| 122 | +Groups inodes...: 2048 inodes |
| 123 | +Inodetable size.: 256 blocks |
| 124 | +``` |
| 125 | +<br> |
| 126 | + |
| 127 | + |
| 128 | +Listagem do diretório raiz (comando `ls`): |
| 129 | +```console |
31 | 130 | [/]$> ls
|
32 |
| - |
33 |
| -Obtemos o seguinte resultado: |
34 |
| - |
35 | 131 | .
|
36 | 132 | inode: 2
|
37 | 133 | Record lenght: 12
|
@@ -74,10 +170,30 @@ Record lenght: 928
|
74 | 170 | Name lenght: 9
|
75 | 171 | File type: 1
|
76 | 172 |
|
77 |
| --OBS.:<br> |
78 |
| -Para utilizar o comando cp, basta digitar:<br> |
79 |
| -cp 'arquivo_origem.txt' 'arquivo_destino.txt'<br> |
80 |
| -Note que ambos arquivos precisam necessariamente estar entre aspas simples. |
| 173 | +``` |
| 174 | + |
| 175 | + |
| 176 | + |
| 177 | +## Bibliotecas Utilizadas |
| 178 | + |
| 179 | +- `time.h`: Oferece funções e constantes para manipulação do tempo, incluindo datas e horas. |
| 180 | + |
| 181 | +- `sys/types.h`: Define símbolos e estruturas de typedef para operações diversas. |
| 182 | + |
| 183 | +- `sys/stat.h`: Declara funções relacionadas a manipulação de arquivos no ambiente UNIX. |
| 184 | + |
| 185 | +- `sys/wait.h`: Contém macros utilizadas para controle de processos. |
| 186 | + |
| 187 | +- `sys/resource.h`: Oferece definições para operações de recursos conforme o padrão XSI. |
| 188 | + |
| 189 | +- `fcntl.h`: Define requisições e argumentos para as funções `fcntl()` e `open()`, úteis para manipulação de arquivos. |
| 190 | + |
| 191 | +- `unistd.h`: Fornece acesso à API do sistema operacional POSIX, facilitando operações de sistema. |
| 192 | + |
| 193 | +- `errno.h`: Retorna valores para indicar falhas em funções. |
| 194 | + |
| 195 | +- `./ext2_fs.h`: Contém estruturas de typedef relacionadas ao sistema de arquivos EXT2. |
| 196 | + |
81 | 197 |
|
82 | 198 |
|
83 | 199 |
|
|
0 commit comments