Visite também:
BR-Linux ·
VivaOLinux ·
LinuxSecurity ·
Dicas-L ·
NoticiasLinux ·
SoftwareLivre.org ·
[mais]
sexta-feira, 13 de julho de 2012
Recuperando vários arquivos deletados - Sleuth
Em 2010 postei sobre como recuperar arquivos deletados usando a ferramenta Sleuth, confira aqui o post. O procedimento utilizado foi para recuperar alguns arquivos deletados, tornando inviável na recuperação de vários arquivos. Neste post vou compartilhar um script para recuperar vários arquivos:
#!/bin/bash
DISK=/dev/sdb1 # disco alvo
RESTOREDIR=/home/kyle/recovery # diretório para recuperar os arquivos
mkdir -p "$RESTOREDIR"
cat $1 |
while read line; do
filetype=`echo "$line" | awk {'print $1'}`
filenode=`echo "$line" | awk {'print $3'}`
filenode=${filenode%:}
filenode=${filenode%(*}
filename=`echo "$line" | cut -f 2`
echo "$filename"
if [ $filetype == "d/d" ]; then
mkdir -p "$RESTOREDIR/$filename"
else
mkdir -p "$RESTOREDIR/`dirname $filename`"
icat -f ext -r -s "$DISK" "$filenode" \
> "$RESTOREDIR/$filename"
fi
done
Para usar o script salve no diretório /usr/local/bin/ e depois mude as permissões.
$ sudo chmod a+x /usr/local/bin/restore
$ sudo /usr/local/bin/restore ~/recovery/deletados.txt
O arquivo deletados.txt tem que ser gerado com o comando:
$sudo fls -f ext -d -r -p /dev/sdb1 > ~/recovery/deletados.txt
Bom Proveito.
terça-feira, 3 de julho de 2012
Squid: Considerações para um melhor desempenho
1 - Dicas antes de particionar
Quanto melhor otimizarmos o acesso a disco mais rápido será nosso proxy, adquira HD com alta velocidade (RPM) e siga essas dicas que irão ajudar no desempenho do squid:
Considere:
- Utilizar um hd somente para cache;
- Tenha muita memória RAM (o squid consome muita memória para rodar bem e ter um bom aproveitamento);
- Utilize um filtro de conteúdo externo, não use o squid para tal fim.
a) Deixe acima de 20% de espaço livre na partição contendo seu cache, o desempenho do sistema de arquivos degrada muito se o espaço utilizado excede 80%.
b) Qual sistema de arquivo devo usar
Veja nos testes realizados no item 7 qual sistemas de arquivo teve maior desempenho na leitura e escrita no disco.
c) O linux guarda algumas informações sobre os arquivos no sistema, como: data, hora de último acesso, ultimas modificações etc. Como o squid possui o seu próprio timestamp, de nada serve para o squid o timestamp do sistema de arquivos do SO. Para desabilitarmos essa opção na partição utilizada como cache do squid devemos utilizar o parâmetro "noatime".
2 - Utilização de RAID 0
Oferece melhor desempenho comparado a discos individuais.
Veja:
http://pt.wikipedia.org/wiki/RAID#RAID_0_Striping
http://www.youtube.com/watch?v=aIq9olTCwRA
http://www.youtube.com/watch?v=kEdV52HQ4Q8&feature=related
http://www.youtube.com/watch?v=Uwie0rJSYiE
3 - Configurando cache_mem e cache_dir
cache_mem: este parâmetro não especifica o tamanho máximo do processo do squid, ele apenas limita a quantidade de memória que o squid deve usar para os objetos.
obs: quanto maior o cache_mem maior será o uso de memória do processo do squid
cache_dir: tamanho do cache usado no disco pelo squid, digamos que você tem uma partição de 100 GB não use acima de 80 GB para o cache.
Tenha em mente:
- O squid usa 10 MB de RAM para cada GB do cache_dir => 1 GB cache_dir = 10 MB RAM
- Mais o valor de cache_mem
- Um adicional de 10 a 20 MB
Levando em consideração o que foi dito vamos calcular o valor que devemos configurar no cache_(dir e mem).
Segue abaixo as configurações da máquina fictícia:
- HD de 320 GB
- RAM de 4 GB
DICA: pare o serviço do squid e veja quanto de memória seu sistema consome, para este tutorial vamos dizer que o sistema sem o squid consome 500 MB de memória, então vamos dar mais 500 MB de folga, ficando apenas 3 GB para ser usado pelo squid.
exemplo 1:
cache_dir = 320 GB (3200 MB de RAM)
cache_mem = 3 GB = 3000 MB
somando: 3200 + 3000 + 20 = 6220 MB de RAM
Com o exemplo acima o squid precisaria de 6 GB de RAM, então ultrapassa os 3 GB. Quanto maior for o cache_dir mais memória será necessário. Neste caso precisamos abaixar o cache_dir e o cache_mem ou comprar mais memória.
exemplo 2: vamos baixar só o cache_mem
cache_dir = 320 GB (3200 MB de RAM)
cache_mem = 2 GB = 2000 MB
somando: 3200 + 2000 + 20 = 5220 MB de RAM
exemplo 3: vamos baixar o cache_mem e dir
cache_dir = 140 GB (1400 MB de RAM)
cache_mem = 1,4 GB = 1400 MB
somando: 1400 + 1400 + 20 = 2820 MB de RAM
Neste exemplo o squid usaria 2820 MB de RAM, já que temos 3 GB podemos usar esses valores.
4 - File Desciptors
Segue abaixo alguns links que tratam sobre o problema alertado como "WARNING! Your cache is running out of filedescriptors".
http://en.wikipedia.org/wiki/File_descriptor
http://squid.sourceforge.net/hno/linux-lfd.html
http://www.cyberciti.biz/faq/squid-proxy-server-running-out-filedescriptors/
http://nixcraft.com/getting-started-tutorials/5569-squid-increasing-file-descriptor-debian.html
http://www.cyberciti.biz/faq/linux-increase-the-maximum-number-of-open-files/
http://paulgoscicki.com/archives/2007/01/squid-warning-your-cache-is-running-out-of-filedescriptors/
http://goo.gl/vX8ag
http://goo.gl/vVeP9
5 - Mudando alguns parâmetros
cache_store_log none: o store.log possui informações como: arquivos removidos do cache, objetos salvos e o tempo que estão no cache. Não existe nenhuma utilidade habilitando o store.log.
maximum_object_size_in_memory: objetos maiores do que este valor não ficarão na memória, este valor deverá ser auto o suficiente para manter os objetos mais acessados na memória.
maximum_object_size: objetos maiores do que este valor não ficarão no cache do disco, se você pretende cachear arquivos grandes, como atualizações do windows, aumente este valor para 102400 (100MB).
pipeline_prefetch on: para melhorar o desempenho de requisições e fila, o Squid irá trabalhar com 2requisições paralelamente
shutdown_lifetime 15 seconds: Quando o Squid recebe um SIGTERM ou um SIGHUP, o cache é colocado em modo de"shutdown pendente" até que todos os sockets ativos sejam fechados. Qualquer clienteainda ativo depois desse período irá receber uma mensagem de timeout. Default de 30segundos
Se você não usa o proxy numa hierarquia e nem pretende usar SNMP, faça as configurações abaixo:
icp_port 0
htcp_port 0
icp_access deny all
htcp_access deny all
snmp_port 0
snmp_access deny all
6 - Politicas de troca de cache
São 4 politicas:
lru: mantem em cache os arquivos abertos recentemente
heap GDSF: otimiza o hit radio de objetos mantendo os arquivos menores e populares no cache
heap LFUDA: mantem no cache arquivos populares, independe do tamanho, otimizando o Byte HIT
heap LRU: mantem em cache arquivos abertos recentemente utilizando a politica heap
obs: quando utilizar o LFUDA aumente o maximum_object_size para 102400.
A proposta para este tutorial é utilizar um proxy que utilize menos o disco e mais a mamória RAM. Neste caso vou utilizar o heap GDSF para a memória RAM "setada" no cache_mem, veja como ficou:
memory_replacement_policy heap GDSF
É muito importante também diminuir o consumo de banda, para isso aumentamos o Byte HIT com o LFUDA:
cache_replacement_policy heap LFUDA
7 - Teste de desempenho em Sistemas de Arquivos
Para os nossos testes será usado o comando time do linux. O comando time fornece o tempo de execução de um programa, muito útil para testes de desempenho de aplicações, ele utiliza 3 medidas:
Real: o tempo total utilizado pela aplicação,desde sua execução até a finalização.
User: exibe o que o Processador usa para processar a aplicação.
Sys: o tempo gasto pelo sistema para “ajeitar” tudo no kernel mode (carregar, mover o código e iniciar a execução).
Teste 1
Criando 10000 arquivos com o comando touch:
#time for i in $(seq 10000); do touch arq$i; done
ext3
|
ext4
|
jfs
|
reiserfs
|
xfs
|
zfs
|
|
real
|
3m11.734s
|
3m16.144s
|
3m46.433s
|
3m9.375s
|
3m18.793s
|
4m21.054s
|
user
|
0m34.166s
|
0m34.002s
|
0m36.474s
|
0m32.746s
|
0m32.334s
|
0m33.454s
|
sys
|
2m43.666s
|
2m50.759s
|
3m11.160s
|
2m44.238s
|
2m51.967s
|
3m14.120s
|
Teste 2
Rodar um find em busca de um arquivo não existente:
#time find . -name arquivo -exec ls {} \;
ext3
|
ext4
|
jfs
|
reiserfs
|
xfs
|
zfs
|
|
real
|
0m0.081s
|
0m0.141s
|
0m0.249s
|
0m0.236s
|
0m0.249s
|
0m0.920s
|
user
|
0m0.016s
|
0m0.016s
|
0m0.020s
|
0m0.008s
|
0m0.036s
|
0m0.004s
|
sys
|
0m0.068s
|
0m0.060s
|
0m0.228s
|
0m0.228s
|
0m0.212s
|
0m0.288s
|
Teste 3
Remover os 10000 arquivos criados anteriormente:
#time rm -rf particao/
ext3
|
ext4
|
jfs
|
reiserfs
|
xfs
|
zfs
|
|
real
|
0m2.936s
|
0m3.053s
|
0m15.308s
|
0m5.388s
|
0m12.319s
|
0m33.657s
|
user
|
0m0.244s
|
0m0.228s
|
0m0.172s
|
0m0.480s
|
0m0.244s
|
0m0.172s
|
sys
|
0m2.680s
|
0m2.808s
|
0m5.096s
|
0m4.808s
|
0m9.181s
|
0m11.005s
|
Teste 4
Criar 10000 diretórios:
#time for i in $(seq 10000); do mkdir dir$i; done
ext3
|
ext4
|
jfs
|
reiserfs
|
xfs
|
zfs
|
|
real
|
4m16.148s
|
5m8.983s
|
4m28.631s
|
4m9.001s
|
4m29.034s
|
4m32.876s
|
user
|
0m37.666s
|
0m44.183s
|
0m36.114s
|
0m34.458s
|
0m41.175s
|
0m29.742s
|
sys
|
3m38.578s
|
4m29.733s
|
3m53.671s
|
3m44.546s
|
3m36.074s
|
3m33.845s
|
Teste 5
Rodar o comando find nos subdiretórios buscando por um arquivo não existente:
#time find . -name arquivo -exec ls {} \;
ext3
|
ext4
|
jfs
|
reiserfs
|
xfs
|
zfs
|
|
real
|
0m1.595s
|
0m2.301s
|
0m0.947s
|
0m2.234s
|
0m1.137s
|
1m14.661s
|
user
|
0m0.080s
|
0m0.080s
|
0m0.040s
|
0m0.068s
|
0m0.104s
|
0m0.116s
|
sys
|
0m1.500s
|
0m1.844s
|
0m0.896s
|
0m2.144s
|
0m1.016s
|
0m26.150s
|
Teste 6
Remover todos os 10000 diretorios criados anteriormente:
#time rm -rf particao/
ext3
|
ext4
|
jfs
|
reiserfs
|
xfs
|
zfs
|
|
real
|
0m6.031s
|
0m6.229s
|
0m16.875s
|
0m8.333s
|
0m18.624s
|
1m17.433s
|
user
|
0m0.144s
|
0m0.148s
|
0m0.220s
|
0m0.200s
|
0m0.232s
|
0m0.168s
|
sys
|
0m5.688s
|
0m5.996s
|
0m6.700s
|
0m8.041s
|
0m8.649s
|
0m25.442s
|
Teste7
Baixando um arquivo de 200 MB da rede local usando o wget:
#time wget http://192.168.56.101/teste.exe
ext3
|
ext4
|
jfs
|
reiserfs
|
xfs
|
zfs
|
|
real
|
1m15.047s
|
1m10.764s
|
1m12.075s
|
1m15.698s
|
1m3.559s
|
1m24.298s
|
user
|
0m0.240s
|
0m0.116s
|
0m0.112s
|
0m0.304s
|
0m0.144s
|
0m0.184s
|
sys
|
0m24.106s
|
0m17.253s
|
0m19.397s
|
0m23.605s
|
0m14.901s
|
0m22.257s
|
Teste 8
Remover o arquivo de 200 MB
#time rm -rf teste.exe
ext3
|
ext4
|
jfs
|
reiserfs
|
xfs
|
zfs
|
|
real
|
0m0.229s
|
0m0.053s
|
0m0.029s
|
0m0.079s
|
0m0.020s
|
0m1.871s
|
user
|
0m0.012s
|
0m0.000s
|
0m0.000s
|
0m0.000s
|
0m0.000s
|
0m0.000s
|
sys
|
0m0.148s
|
0m0.056s
|
0m0.028s
|
0m0.076s
|
0m0.020s
|
0m0.128s
|
Teste 9
Criar um arquivo de 500 MB usando o /dev/zero:
#time dd if=/dev/zero of=teste count=1050 bs=500000
ext3
|
ext4
|
jfs
|
reiserfs
|
xfs
|
zfs
|
|
real
|
0m36.855s
|
0m23.009s
|
0m43.667s
|
0m36.175s
|
0m20.006s
|
0m25.787s
|
user
|
0m0.000s
|
0m0.000s
|
0m0.004s
|
0m0.000s
|
0m0.000s
|
0m0.008s
|
sys
|
0m21.733s
|
0m6.200s
|
0m17.081s
|
0m19.137s
|
0m4.540s
|
0m2.768s
|
Teste 10
Ler o arquivo de 500 MB criado anteriormente redirecionando para o /dev/null:
#time cat teste > /dev/null
ext3
|
ext4
|
jfs
|
reiserfs
|
xfs
|
zfs
|
|
real
|
0m12.074s
|
0m6.819s
|
0m7.622s
|
0m11.822s
|
0m8.646s
|
0m32.077s
|
user
|
0m0.024s
|
0m0.036s
|
0m0.036s
|
0m0.016s
|
0m0.036s
|
0m0.004s
|
sys
|
0m5.064s
|
0m4.788s
|
0m4.376s
|
0m8.105s
|
0m5.112s
|
0m2.648s
|
Teste 11
Dividir o arquivo de 500 MB em vários de 10 MB usando o comando split:
#time split --bytes=10485760 teste
ext3
|
ext4
|
jfs
|
reiserfs
|
xfs
|
zfs
|
|
real
|
0m45.588s
|
0m28.491s
|
0m28.869s
|
0m54.243s
|
0m27.239s
|
1m22.092s
|
user
|
0m0.032s
|
0m0.032s
|
0m0.024s
|
0m0.016s
|
0m0.036s
|
0m0.004s
|
sys
|
0m25.154s
|
0m12.437s
|
0m14.409s
|
0m37.022s
|
0m10.505s
|
0m5.720s
|
8 - CONCLUSÃO
Seguindo todas as dicas aqui mostradas é possível ter um squid muito robusto e que atenda na maioria dos casos, mesmo assim o Squid possui algumas limitações e problemas em termos de desempenho, foi por isso que foi criado o projeto Lusca. Recomendo a utilização do Lusca como web/Proxy cache. Para maiores informações acesse o site do projeto: http://www.lusca.org/
9 - REFERENCIA
http://wiki.squid-cache.org/SquidFaq
http://etutorials.org/Server+Administration/Squid.+The+definitive+guide/Chapter+7.+Disk+Cache+Basics/7.1+The+cache_dir+Directive/
http://www.comfsm.fm/computing/squid/FAQ.html
http://www.linofee.org/~jel/proxy/Squid/rel-notes-1_1.html#cache
http://www.visolve.com/squid/squid24s1/logfiles.php
http://webdeveloper.earthweb.com/repository/javascripts/2001/04/41291/byteconverter.htm
http://www.cyberciti.biz/faq/linux-increase-the-maximum-number-of-open-files/
http://wiki.squid-cache.org/SquidFaq/WindowsUpdate
Bom proveito.
Assinar:
Postagens (Atom)