Sei sulla pagina 1di 10

UNIVERSIDADE FEDERAL DA BAHIA

INSTITUTO DE MATEMTICA
DEPARTAMENTO DE CINCIA DA COMPUTAO

IGOR NOGUEIRA SANTOS PERSIS CASTRO ALVES THIAGO MARAL DA SILVA VITOR FERNANDES RIBEIRO DE OLIVEIRA

DESENVOLVIMENTO DE UM SISTEMA DE ARQUIVOS COM SUPORTE ELIMINAO DE EVIDNCIAS

Salvador 2008
1

IGOR NOGUEIRA SANTOS PERSIS CASTRO ALVES THIAGO MARAL DA SILVA VITOR FERNANDES RIBEIRO DE OLIVEIRA

DESENVOLVIMENTO DE UM SISTEMA DE ARQUIVOS COM SUPORTE ELIMINAO DE EVIDNCIAS

Trabalho apresentado ao Curso de graduao em Cincia da Computao, Departamento de Cincia da Computao, Instituto de Matemtica, Universidade Federal da Bahia, para fins avaliativos na matria Sistemas Operacionais lecionado pelo professor Luciano Porto Barreto.

Salvador 2008

SUMRIO

1 INTRODUO ................................................................................................................. 4 2 PROCEDIMENTO ........................................................................................................... 6 3 AVALIANDO DESEMPENHO ....................................................................................... 7 4 REFERNCIAS BIBLIOGRFICAS ........................................................................... 10

1 INTRODUO
Um sistema de arquivos um conjunto de estruturas lgicas e de rotinas que permitem ao sistema operacional controlar o acesso ao dispositivo de armazenamento. Alm de organizar os arquivos no disco, ele tambm responsvel pela segurana e acesso aos arquivos que esto armazenados. Tal estrutura uma das partes mais perceptveis de um sistema operacional, pois a manipulao de arquivos uma das atividades mais comumente realizadas pelos usurios, devendo sempre acontecer de maneira uniforme e independente dos diferentes dispositivos de armazenamento [1]. Para tanto, o Linux d suporte a diversos sistemas de arquivos permitindo uma maior flexibilidade e coexistncia entre muitos outros sistemas operacionais. Devido ao VFS (Virtual File System) no Linux, pode-se coexistir muitos sistemas de arquivos diferentes dentro do kernel dando uma interface padro de acesso a todas elas como: ext, ext2, ext3, ext4, minix, xia, reiserfs e outras. O VFS interpreta em alto nvel as chamadas de sistema de acesso a arquivos e invoca a funo do sistema de arquivo responsvel pelo tratamento da chamada. O VFS composto por quatro estruturas [2]: Superblock: Contm informaes sobre o sistema de arquivo em geral (dispositivo de montagem, tamanho dos blocos de dados, tamanho mximo de um arquivo, tipo do sistema de arquivo, ponteiro para as rotinas de superblock). Toda vez que um sistema de arquivo montado, um superblock criado. Inode: Contm informaes sobre um nico arquivo (proprietrio, grupo, permisses, data e hora de criao, data e hora de acesso, ponteiros para os blocos em disco onde ficam alocados os dados do arquivo). File: Contm informaes sobre a interao de um arquivo aberto e um processo (caminho para o arquivo, modo de acesso, estrutura

file_operations). Este objeto s existe quando h o processo est interagindo com algum arquivo. Dentry: Contm informaes que representam o caminho singular a um arquivo ou diretrio (nome do arquivo ou diretrio, listas de dentrys pais e filhos, inode associado ao arquivo ou diretrio, estrutura dentry_operations). Por exemplo, se montarmos um sistema de arquivos como ext3, executada a funo ext3_read_super(), que efetua a alocao de memria necessria para as estruturas de 4

dados usadas pelo sistema de arquivos e cria-se um superblock. Depois disto, alocado um inode para a raiz do sistema de arquivos que permitir o acesso aos arquivos e diretrios [3]. Para melhorar o desempenho de operaes de E/S, os dados so temporariamente alocados na memria RAM antes de serem gravados em disco. Se houver um problema de falha eltrica antes dos dados serem efetivamente armazenados, isso pode causar inconsistncia no sistema de arquivos como, por exemplo, de um arquivo que foi removido, mas seu inode e blocos de dados permaneceram no disco. Com o surgimento do journaling (peridico) ou logging (anotao), tornou-se o sistema de arquivos mais resistente a falhas dando mais integridade ao armazenamento j que as atualizaes dos metadados dos arquivos so gravados em um log serial antes que o log original do disco seja atualizado. Quando uma falha de sistema ocorrer, o sistema de recuperao de cdigo ir analisar no log de metadados e tentar limpar apenas os dados inconsistentes atravs da releitura do arquivo de log. Como mencionado anteriormente, devido estrutura do VFS, o Linux suporta inmeros sistemas de arquivos. Para esse trabalho, nos atentemos ao sistema de arquivos EXT3 (Third Extended File System). O sistema de arquivos ext3 uma verso journaling do sistema de arquivos ext2. O journal do ext3 armazenado em um inode, que um arquivo. Armazenando o journal em um inode, o ext3 pode adicionar o journal necessrio ao sistema de arquivos sem exigir extenses incompatveis com o metadado do ext2. Esse um dos principais pontos pelo qual o ext3 pode oferecer compatibilidade com ext2 [4]. Basicamente, em um sistema de arquivos ext3, cada arquivo tem dados armazenados em blocos, inodes e diretrios de entrada. O contedo dos arquivos armazenado em um ou mais blocos que so de uso exclusivo do arquivo. Dados temporais como a ltima modificao, o ltimo acesso, a ltima mudana, entre outras informaes, incluindo o tamanho do arquivo, compem os metadados. Os metadados so armazenados em uma estrutura inode que se localiza numa tabela no incio de um determinado grupo de blocos. E o diretrio de entrada que se localiza em um bloco alocado no diretrio do arquivo pai, armazena o nome do arquivo. Devido a facilidade de recuperao rpida e confivel em caso de falhas no ext3 por causa do journaling, pode-se notar um aspecto de segurana quanto recuperao de resduos de alguns dados ao serem apagados. Simplesmente, atravs do journaling, a computao forense pode usufru-la para recuperao de dados de algum criminoso virtual que tentou apagar suas evidncias no dispositivo de armazenamento, por exemplo. Ou usurios

maliciosos podem obter acesso a dados sigilosos de uma empresa cujos dados foram eliminados, mas que ainda so vlidos. H diversos algoritmos e mtodos para eliminao total de resduos de dados que foram excludos sem possibilidade de recuperao. Contudo, o que se deseja, nesse contexto, modificar o sistema de arquivos ext3 de forma que sua estrutura impea a recuperao de informaes que foram excludas pelo usurio.

2 PROCEDIMENTO
O procedimento utilizado foi inicialmente o de verificar o funcionamento do sistema de arquivos ext3. Ento, pode-se ver na figura abaixo que a organizao do ext3 adota o seguinte esquema:

Nesse esquema, cada arquivo representado por uma estrutura de dados chamada inode. Um inode, como dito anteriormente, contm informaes como tamanho do arquivo, listas ACL, entre outros. O dado que mais interessante ao trabalho a propriedade i_block[int n], que consiste em um vetor de blocos, que so os blocos de disco onde o arquivo se encontra armazenado fisicamente. Inicialmente achamos que instrues como inode>i_block[i] = 0 poderiam resolver o problema. No entanto, a presena do journal e o controle das operaes por ele imposto nos mostrou que esse no era o caminho a ser seguido. A forma mais correta de implementar a funo em questo seria respeitando a estrutura do sistema de arquivos. Outra questo era onde colocar a modificao. Depois de dias estudando o cdigo (e muito printk), reduzimos o universo de scripts para os scripts do ext3 e dentre eles, os mais provveis seriam inode.c, namei.c ou balloc.c. Optamos pelo balloc por ter funes mais

especficas ao universo de blocos de disco. A modificao foi implementada dentro da funo ext3_free_blocks, que libera os blocos do arquivo apagado para reuso. Originalmente, ao remover um arquivo, o ext3 basicamente apaga os links para os blocos e zera o tamanho do inode. A recuperao, dessa forma, bastante simples, porque os dados reais no so apagados at que o bloco seja realocado a outro inode e sobrescrito por ele. Dessa forma, para prover uma remoo segura, implementamos uma modificao que sobrescreve os blocos com 0s antes dos mesmos serem liberados. Abaixo segue o trecho implementado na funo ext3_free_bocks do arquivo balloc.c:
for (cont = block; cont < block + count; cont++ ) { bh = sb_getblk(sb, cont); lock_buffer(bh); memset(bh->b_data,0,bh->b_size); unlock_buffer(bh); mark_buffer_dirty(bh); set_buffer_jbddirty(bh); brelse(bh); }

Procuramos evitar tambm a recuperao dos metadados do arquivo. Para isso, dentro da funo ext3_delete_inode do arquivo inode.c, implementamos o seguinte trecho:
inode->i_uid = novas_info; inode->i_gid = novas_info; inode->i_atime.tv_sec = 0; inode->i_atime.tv_nsec = 0; inode->i_mtime.tv_sec = 0; inode->i_mtime.tv_nsec = 0; inode->i_ctime.tv_sec = 0; inode->i_ctime.tv_nsec = 0; EXT3_I(inode)->i_dtime = 0;

Com isso os metadados do arquivo seriam zerados inviabilizando a recuperao do mesmo.

3 AVALIANDO DESEMPENHO
Para avaliar o impacto dessa modificao no sistema de arquivos, foi realizado um benchmarking medindo o tempo de execuo da instruo rm [5] ao realizar a excluso de um arquivo. E para medir o tempo de execuo de uma instruo utilizou-se o comando time [6], que acompanhado de outro comando subseqente, mostra informaes sobre o tempo de execuo dessa instruo subseqente. 7

Para automao do processo de medio de tempo, utilizou-se um shell script [7] para gerar os arquivos que seriam utilizados, para realizar a excluso do arquivo e medir o tempo de execuo da instruo, conforme descrito abaixo:
#!/bin/bash #Cria 20 arquivos textos para teste for i in $(seq 20); do echo 'Contedo do arquivo texto.' > arquivo$i.txt done #Para excluir os arquivos criados anteriormente entro nesse loop for i in $(seq 20); do echo "Tempo de excluso do arquivo$i.txt:" #Realiza a exclusao do arquivo #E mede-se o tempo de execucao do comando rm time rm arquivo$i.txt done

O comando time retorna trs valores na seguinte ordem [8]: 1. Real: o tempo real passado entre a chamada e o trmino da instruo; 2. User: o tempo de utilizao da CPU pelo usurio (a soma de tms_utime e tms_cutime valores em uma struct tms como retornado por times(2)) 3. Sys: o tempo de utilizao CPU pelo sistema (a soma do tms_stime e tms_cstime valores em uma struct tms como retornado por times(2)) Como o importante neste trabalho o tempo de execuo real da instruo nesse novo sistema de arquivos, atentemos ao valor Real do comando time. O script foi executado utilizando o sistema de arquivos EXT3 e EXT3Modificado, cada um em sua instncia, para medir o tempo de execuo da instruo rm e foram obtidos os seguintes valores: Tempo de Execuo no Arquivo Sistema de Arquivos EXT3 (segundos) 1 2 3 4 5 0,050 0,048 0,049 0,048 0,049 Tempo de Execuo no Sistema de Arquivos EXT3Modificado (segundos) 0,049 0,051 0,049 0,048 0,050

6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Valor Mdio Desvio Padro Varincia

0,050 0,051 0,076 0,077 0,073 0,067 0,059 0,071 0,086 0,059 0,070 0,074 0,058 0,082 0,069 0,0633 0,0126 0,0002

0,052 0,047 0,086 0,076 0,076 0,080 0,064 0,069 0,072 0,067 0,079 0,087 0,085 0,070 0,082 0,0670 0,0145 0,0002

Valor Mdio
Tempo de Execuo da 0,0680 Instruo (s) 0,0670 0,0660 0,0650 0,0640 0,0630 0,0620 0,0610 E XT3 E XT3M odificado Sistema de Arquivos

Para arquivos maiores temos, h de se notar uma diferena. Sem o patch, um arquivo de 16MB leva 0,094s para ser removido. Com as modificaes, o tempo de remoo de 0,155s. Todos os testes foram realizados sobre o sistema operacional Ubuntu 2.6.24 (com

512MB de RAM) virtualizado com o Vmware Workstation 6.0 sobre Windowes XP - Service Pack 2, Pentium D 2.8 e 1,5 GB de RAM. De acordo com os resultados obtidos nota-se que o sistema de arquivos modificado leva um tempo maior na sua execuo devido ao conjunto das novas instrues adicionadas no sistema de arquivos para realizar a sobrescrita dos blocos. Contudo a adio delas no prejudica exageradamente o tempo de execuo da instruo j que os desvios-padro foram mnimos indicando homogeneidade nos tempos de excluso. Portanto, o sistema de arquivos criado apresenta um bom desempenho quanto ao tempo de execuo na excluso total de um arquivo.

4 REFERNCIAS BIBLIOGRFICAS
[1] Dodonov, E. (2001) - Abordando Sistema de Arquivos do Linux. In USP 2001. [2] Wikipdia - Sistemas de Arquivos Virtual http://pt.wikipedia.org/wiki/Sistemas_Arquivo_virtual [3] Ferreira, E. L., Ramos, L. F. (2006) - Sistema de Arquivos no Linux. In CEFET-MT. [4] Sistemas de arquivos ext3 - Guia de Administrao de Sistema - Captulo 1 http://web.mit.edu/rhel-doc/3/rhel-sag-pt_br-3/ch-ext3.html [5] Linux and Unix rm Command Help - http://www.computerhope.com/unix/urm.htm [6] Linux Man Page - http://linux.die.net/man/1/time [7] Wikipdia - http://pt.wikipedia.org/wiki/Shell_script [8] Mximo, F. (2005) - Mtodo curioso de comparao de desempenho - http://www.dicasl.com.br/dicas-l/20050930.php

10

Potrebbero piacerti anche