Cómo desfragmentar en linux
Cómo desfragmentar en linux.
Me sorprendo con las afirmaciones que veo en otros sitios, en ellas se asegura que en linux no es necesario desfragmentar.
Estas equivocado amigo, en linux también puede ser necesario desfragmentar un disco. Lo que pasa es que los sistemas de archivos linux periodizan mucho mejor los archivos que otros sistemas, por ejemplo que windows.
En sistemas Fat y Fat32 los archivos se van acoplando correlativamente (uno detrás de otro), el efecto negativo es, que cuando (ejemplo) subes un archivo a una carpeta ya creada, también lo inserta correlativamente sea cual sea el anterior archivo.
En los sistemas de archivos NTFS este efecto se intento corregir, logrando una pequeña mejora aun insuficiente. Los sistemas de archivos linux como EXT2,3 y 4, JFS, ZFS, XFS, ReiserFS y BTRFS, tratan los archivos de otra forma, digamos que dejan más espacio en blanco para que puedas subir archivos y no tengas problemas de fragmentanción.
El porqué y el cómo, es algo más complejo y largo de explicar pero con la siguiente imagen te puedes hacer una idea de como tratan los archivos los diferentes sistemas.
Desfragmentar en linux - Sistemas de archivos
En discos no muy grandes o en maquinas un poco más antiguas es altamente recomendable desfragmentar el disco, no con tanta frecuencia como en Windows pero si cuando notes que la carga de archivos demora demasiado. En este articulo vemos como desfragmentar un disco en linux de forma segura.
Cómo desfragmentar en linux
Existen herramientas como e2fsprogs o fsck, pero no las recomiendo (tienes que desmontar el disco). Yo te propongo un script perl que funciona realmente bien, ofreciendo unos resultados espectaculares.
Creamos el script.
sudo nano desfrag.pl
Copia y pega el script.
# SoloLinux.es
# defragmenter script for linux
trap 'abort' 1 2 15
renice 19 $$ > /dev/null
abort()
{
echo -e "\nAborting"
rm -f tmpfile dirlist
exit 1
}
fail()
{
echo -e "\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 ] ; 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 "Generando la lista de archivos..."
#stupid script to find max directory depth
find -xdev -type d -printf "%d\n" | sort -n | 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=0 | \
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 -e "$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 ]; then
continue
fi
#We could be this paranoid but it would slow it down 1000 times
#if ]; 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 then
echo -e "\r $numfiles files left \c"
cat "$i" > /dev/null
else
echo -e "\r $numfiles files left - Reordenando archivos con tamaño de $filesize ... \c"
fi
datestamp=`find "$i" -printf "%s"`
cp -a -f "$i" tmpfile
if (( $? )) ; then
fail
fi
# check the file hasn't been altered since we copied it
if ] ; then
continue
fi
mv -f tmpfile "$i"
if (( $? )) ; then
fail
fi
done
echo -e "\nDesfragmentacion concluida"
rm -f dirlist
Guarda el archivo y cierra el editor nano.
El script necesita permisos para ejecutarse, se los concedemos.
chmod u+x desfrag.pl
Llego el momento de ejecutarlo. El script desfragmentador permite desfragmentar todo el disco sin tener que desmontarlo, pero no es necesario. Cuando trabajamos en linux lo hacemos sobre /HOME, y eso es lo que debes desfragmentar.
Ejecuta el siguiente comando.
sudo ./desfrag.pl /home
El proceso comenzara a listar los archivos a reordenar, se paciente.
Inicio de la desfragmentacion en linux
Dependiendo del tamaño del disco y de tu sistema, el tiempo del proceso puede variar.
La desfragmentacion del disco a terminado
Nota final:
Es importante que una vez comience la desfragmentación cierres todas las ventanas y aplicaciones del sistema, no lo toques hasta que termine el proceso, déjalo trabajar.
Este script es super recomendado para los que hacen un uso intensivo de las descargas (por ejemplo torrent), bajan de la red una gran cantidad de datos y también los borran.
Una vez termine el proceso de desfragmentación debes reiniciar el sistema, no te preocupes el script no a borrado nada, solo lo cambio de sitio (aun así, debes tener una copia de seguridad). Al reiniciar el sistema notaras enseguida que tu linux corre más ligero.
En algunos sistemas puede aparecer un aviso de error en la linea 26 y 27, no te preocupes no pasa nada, es porque no hemos definido el tamaño de los archivos. El script continuara su proceso sin la intervención del usuario.
Canales de Telegram: Canal SoloLinux – Canal SoloWordpress
Espero que este articulo te sea de utilidad, puedes ayudarnos a mantener el servidor con una donación (paypal), o también colaborar con el simple gesto de compartir nuestros artículos en tu sitio web, blog, foro o redes sociales.
Read the full article