Bem-vindo: Qua, 27 de Novembro 2024, 1:32 Pesquisa avançada

Será preciso desfragmentar HD que rode o GNU/Linux?

Secção dedicada a Noticias! Aqui poderá partilhar todas as notícias relativas ao Ubuntu. No entanto, poderá publicar também notícias sobre software livre em geral: outras distribuições e até conferências

Será preciso desfragmentar HD que rode o GNU/Linux?

Mensagempor Luciano Fernandes » Sex, 12 de Agosto 2011, 2:38

HDs com Linux precisam mesmo ser desfragmentados? Descubra aqui a resposta para essa pergunta que ronda a cabeça de vários usuários.




Você já desfragmentou o disco do seu computador? Se o sistema operacional que utiliza é o Windows, certamente já teve que utilizar algum desfragmentador.

Mas e o Linux, não precisa desfragmentar? Bom, com o Linux a coisa é um pouco diferente, mas isso não quer dizer que nunca precisará realizar esta tarefa.

Para entender melhor o assunto tratado neste artigo, é recomendado que você leia antes algum material sobre desfragmentação de discos. O Portal Baixaki possui dois ótimos artigos a respeito: “Desfragmentação de disco: por que fazer e como ocorre?” e “Guia completo sobre desfragmentação de disco”. Vale a pena conferir e ficar por dentro do assunto!

Desfragmentação no Linux?

Há tempos existe uma discussão quanto ao fato de precisar ou não desfragmentar discos que abrigam sistemas Linux. Existem usuários que defendem com todas as forças a ideia de que o sistema operacional do pinguim não requer desfragmentação frequente devido ao fato de os usuários não conseguirem copiar e colar arquivos em qualquer pasta do sistema.



No entanto, existe também o outro lado da moeda, ou seja, os usuários que dizem ser necessário desfragmentar todo e qualquer disco, independente do sistema operacional utilizado. Mas afinal, quem está certo?

Os dois lados da história

Na verdade, ambas as visões estão corretas de alguma maneira. De fato, não é qualquer usuário que consegue copiar arquivos para dentro das pastas do sistema, é preciso ter a senha de acesso do chamado “super usuário” (root) para isso.

Além de proteger os arquivos principais, essa restrição de acesso faz com que apenas a pasta pessoal dos utilizadores do sistema fique fragmentada. Como os arquivos ali contidos normalmente nada têm a ver com o núcleo do SO, não afetam em nada o desempenho do computador.


O sistema de arquivos utilizado pelo Linux também ajuda para que a fragmentação do disco não seja tão grande. Isso porque a forma com a qual o sistema operacional do pinguim gerencia a movimentação de arquivos (copiar, colar, criar, recortar e excluir) evita que lacunas sejam criadas no disco, exceto quando o HD está muito cheio.

Embora a fragmentação das pastas pessoais não afete diretamente o sistema, ela pode ser responsável pela demora na abertura de arquivos e documentos, por exemplo.

Nesse caso sim é preciso fazer alguma coisa para organizar o disco novamente e diminuir o esforço mecânico do HD na hora de ler algum arquivo ou acessar um diretório na sua pasta.

Como desfragmentar o disco no Linux?

Não é difícil encontrar na internet comandos que permitam a desfragmentação do disco no Linux. O Baixaki escolheu dois algoritmos para a realizaçãod dos procedimentos. O primeiro deles permite que o usuário saiba quão desfragmentada está a sua pasta pessoal ou qualquer outro diretório do computador.

O segundo algoritmo, por sua vez, realiza a tarefa de desfragmentar o disco e tornar o acesso aos arquivos mais veloz. Confira abaixo o passo a passo de como utilizar esses algoritmos sem problemas.

Analisando a pasta pessoa do sistema

01. O primeiro passo na análise do disco é baixar os algoritmos necessários. Abra uma janela do Terminal e digite o seguinte comando:
gedit defragmentation.pl &

02. Uma janela do editor de texto padrão do Linux será exibida. Copie e cole o código presente neste link (ou através da caixa abaixo) para dentro do arquivo criado. Salve as alterações feitas e feche a janela.
Código: Selecionar todos
#!/usr/bin/perl -w

#this script search for frag on a fs
use strict;

#number of files
my $files = 0;
#number of fragment
my $fragments = 0;
#number of fragmented files
my $fragfiles = 0;

#search fs for all file
open (FILES, "find " . $ARGV[0] . " -xdev -type f -print0 |");

$/
 = "\0";

while (defined (my $file = <FILES>)) {
        open (FRAG, "-|", "filefrag", $file);
        my $res = <FRAG>;
        if ($res =~ m/.*:\s+(\d+) extents? found/) {
                my $fragment = $1;
                $fragments += $fragment;
                if ($fragment > 1) {
                        $fragfiles++;
                }
                $files++;
        } else {
                print ("$res : not understand for $file.\n");
        }
        close (FRAG);
}
close (FILES);

print ( $fragfiles / $files * 100 . "% non contiguous files, " . $fragments / $files . " average fragments.\n"); 


03. Agora é preciso tornar este arquivo PL um executável. Para isso, digite o seguinte comando:
chmod +x defragmentation.pl

04. Para executar o arquivo e verificar como está a fragmentação da sua pasta, utilize o comando:
sudo ./fragmentation.pl /home/USUARIO*

*Subtitua USUARIO pelo seu nome de usuário no sistema.

05. Pronto! O resultado da análise é exibido no próprio Terminal, como mostra a imagem abaixo.


Desfragmentando a pasta

01. Os passos para desfragmentar uma pasta são bem parecidos com os listados acima. Primeiro é preciso criar um arquivo chamado defrag.pl e copiar o código presente neste link para dentro dele, salvando as alterações realizadas logo em seguida. O código pode ser também copiado desta caixa abaixo:
Código: Selecionar todos
#!/bin/bash
# defrag v0.08 by Con Kolivas <kernel@kolivas.org
# Braindead fs-agnostic defrag to rewrite files in order largest to smallest
# Run this in the directory you want all the files and subdirectories to be
# reordered. It will only affect one partition. It works best when run twice.
# Are you really crazy enough to be using this? It might blow your data
# into tiny little useless chunks.


trap 'abort' 1 2 15

renice 19 
$$ > /dev/null

abort
()
{
    echo -
"\nAborting"
    
rm -f tmpfile dirlist
    
exit 1
}

fail()
{
    echo -
"\nFailed"
    
abort
}

declare -
i filesize=0
declare -i numfiles=0

#The maximum size of a file we can easily cache in ram
declare -i maxsize=$((`awk '/MemTotal/ {print $2}' /proc/meminfo`*1024))
(( 
maxsize-= `awk '/Mapped/ {print $2}' /proc/meminfo` ))
(( 
maxsize/= 2))

if [[ -
a tmpfile || -a dirlist  ]] ; then
    
echo dirlist or tmpfile exists
    
exit 1
fi

# Sort in the following order:
# 1) Depth of directory
# 2) Size of directory descending
# 3) Filesize descending
# I made this crap up. It's completely unvalidated.

echo "Creating list of files..."

#stupid script to find max directory depth
find -xdev -type d -printf "%d\n" sort -uniq dirlist

#sort directories in descending size order
cat dirlist | while read d;
do
    
find -xdev -type d -mindepth $d -maxdepth $d -printf "\"%p\"\n" | \
        
xargs du -bS --max-depth=| \
        
sort -k 1,1nr -k 2 |\
        
cut -f2 >> tmpfile
    
if (( $? )) ; then
        fail
    fi

done

rm 
-f dirlist

#sort files in descending size order
cat tmpfile | while read d;
do
    
find "$d-xdev -type f -maxdepth 1 -printf "%s\t%p\n" | \
        
sort -k 1,1nr | \
        
cut -f2 >> dirlist
    
if (( $? )) ; then
        fail
    fi
done

rm 
-f tmpfile

numfiles
=`wc -l dirlist | awk '{print $1}'`

echo -
"$numfiles files will be reordered\n"

#copy to temp file, check the file hasn't changed and then overwrite original
cat dirlist | while read i;
do
    (( --
numfiles ))
    if [[ ! -
f $i ]]; then
        
continue
    
fi

    
#We could be this paranoid but it would slow it down 1000 times
    #if [[ `lsof -f -- "$i"` ]]; then
    #    echo -e "\n File $i open! Skipping"
    #    continue
    #fi

    
filesize=`find "$i" -printf "%s"`
    
# read the file first to cache it in ram if possible
    
if (( filesize maxsize ))
    
then
        
echo -"\r $numfiles files left                                                            \c"
        
cat "$i> /dev/null
    
else
        echo -
"\r $numfiles files left - Reordering large file sized $filesize ...                \c"
    
fi

    datestamp
=`find "$i" -printf "%s"`
    
cp --"$itmpfile
    
if (( $? )) ; then
        fail
    fi
    
# check the file hasn't been altered since we copied it
    
if [[ `find "$i" -printf "%s"` != $datestamp ]] ; then
        
continue
    
fi

    mv 
-f tmpfile "$i"
    
if (( $? )) ; then
        fail
    fi
done

echo -"\nSucceeded"

rm -f dirlist


02. Novamente, é preciso tornar o documento PL um executável. Basta digitar o comando abaixo no Terminal para que isso aconteça.
chmod +x defrag.pl

03. Feito isso, finalmente é hora de executar o arquivo e deixar que ele faça todo o trabalho pesado organizando as pastas e arquivos presentes no seu diretório pessoal. Para isso, utilize o comando abaixo:
sudo ./defrag.pl /home/USUARIO*

*Subtitua USUARIO pelo seu nome de usuário no sistema.

O processo de desfragmentação pode levar algum tempo. Tudo depende da quantidade de arquivos presentes na pasta pessoal e também quanto eles ocupam de espaço no disco. Uma mensagem será exibida no Terminal quando o processo for concluído, por isso fique de olho.

Apenas para lembrar

Embora não seja muito comum usuário do Linux desfragmentarem o disco, às vezes esse procedimento pode ser necessário. Se ao executar o arquivo defragmetation.pl o número de arquivos não contínuos for muito grande, é recomendado que a desfragmentação seja realizada.

Fique de olho! Às vezes você pode estar sofrendo com lentidão para abrir um documento devido à fragmentação dos arquivos. A solução é bem simples e pode facilitar muito a vida dos usuários.


Você está de acordo com as REGRAS do Fórum?! Já tirou suas dúvidas sobre o Fórum no FAQ!?

Caso tenha gostado do post, por favor, prestigie a fonte para este e outros assuntos afins :!: :obrigado: o :ubuntued: agradece sua preferência, volte sempre! ;)

:idea: CREATION SOURCE: :arrow: Tecmundo (Elaine Martins)


Vivamos a LIBERDADE com total DIGNIDADE!
Editado pela última vez por Luciano Fernandes em Sáb, 22 de Setembro 2012, 7:06, em um total de 1 vez.
"[...] For we can do nothing against the TRUTH, but for the TRUTH..."
Avatar do usuário
Luciano Fernandes
Nuntius Express
 
Mensagens: 1070
Registrado em: 26 Junho, 2011
Localização: Rio de Janeiro, Brazil.

Re: Será preciso desfragmentar HD que rode o GNU/Linux?

Mensagempor Claudio Novais » Sáb, 27 de Agosto 2011, 14:06

Ola Luciano, tinha marcado este tópico como importante e por isso deixei-o para hoje, pois pensei que era realmente uma pergunta. Mas, na verdade, é uma pergunta com resposta à qual foi um grande prazer tê-la lido!

De facto, tal como é referido no link que você disponibilizou, desfragmentar o disco não é algo tão necessário no Linux como é no Windows! O sistema de ficheiros funciona de maneira mais ótima ( ≉perfeita ) e por isso a probabilidade de estar fragmentada é muito inferior. Para melhorar ainda mais esse facto, como normalmente a zona do sistema e programas está sempre igual, ou quase, então o desempenho nunca terá grande impacto com o passar do tempo.

Mas cuidado! Tal como é referido, a fragmentação existe pelo simples facto de que dificilmente se guardará os ficheiros sempre continuamente, haverá sempre fragmentação! E é nesse aspeto que este site que você referiu se torna perfeito: traz material capaz de analisar o nosso sistema para tirar as dúvidas do que foi referido em teoria! Para ter a certeza de que essa teoria está certa!

Ora, a minha /home não é formatada há muito tempo e já passaram por ela vários Ubuntus! Qual foi o meu resultado? Bem, até a mim me surprendeu, foi menos de 1%!!!!
Imagem
Depois disso, também fiz uma análise à raiz (onde estão os programas e ficheiros do sistema) e resultado foi o seguinte:
Imagem
Em suma, é uma excelente matéria que o Luciano aqui apresenta! Aliás, é tão importante que vou marcá-lo como um próximo artigo para o Ubuntued! ;)

Abraço
Avatar do usuário
Claudio Novais
Editor do Ubuntued
 
Mensagens: 16869
Registrado em: 25 Maio, 2011

Re: Será preciso desfragmentar HD que rode o GNU/Linux?

Mensagempor Miguel Fonseca » Qua, 12 de Outubro 2011, 3:19

Boas Luciano Fx2, mais um excelente post da tua parte!

Já agora uma pergunta, que é claro é feita não só ao Luciano, mas a todos os participantes deste forum na esperança de algum me poder esclarecer a dúvida.

O processo de desfragmentação apenas funciona para o sistema de ficheiros do tipo ext, ou poderei utilizar o script para desfragmentar outro tipo desistema de ficheiros?

No meu caso, o disco externo que está em ntfs.

Cumps.
It is only in Love and Murder, that we still remain sincere! - Friedrich Durrenmatt
Avatar do usuário
Miguel Fonseca
Bleeding-edge Helper
 
Mensagens: 2512
Registrado em: 10 Junho, 2011


Voltar para Notícias

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 90 visitantes