En Linux, ¿cómo verifica si un disco está fragmentado?

28

En el arranque, fsck a veces informa la frgmentación de un disco: "5.3% no contiguo".

¿Cómo puedo obtener esta información yo mismo? ¿Hay una invocación específica de fsck?

Peltier
fuente

Respuestas:

27

Puede ejecutar fsck.ext2 de forma segura en un sistema de archivos ext2 ext3 o ext4 incluso si está montado de esta manera

sudo fsck.ext2 -fn /dev/sdXY

Si la unidad está montada, generará muchos errores, pero el argumento -n le dice que no toque la unidad.

$ sudo fsck.ext2 -fn /dev/sda1
e2fsck 1.42 (29-Nov-2011)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Ubuntu_Rescue: 291595/1222992 files (0.2% non-contiguous), 1927790/4882432 blocks
Rucent88
fuente
¡Gracias! fsck.ext2 encontró varios errores en mi partición de inicio. Ahora me gustaría repararlo. Esto plantea la pregunta: ¿cómo reparo la partición de mi casa, que necesito mantener montada para iniciar sesión?
Michael
3
@Michael Si su unidad está montada, ejecutar una verificación siempre reportará errores. De todos modos, si desea verificar el sistema de archivos en el próximo reinicio, ejecute esto sudo tune2fs -C 16000 /dev/sda1y reinicie.
Rucent88
1
fsck comprueba lo que hay en el disco / almacenamiento, pero si está montado, habrá cosas en progreso (medio escrito). Es por eso que verá errores, no son errores reales, son errores falsos. Ingnóralos.
ctrl-alt-delor
8

La moderna familia de sistemas de archivos ext tiene en cuenta el equilibrio y la contigüidad al asignar archivos. En ext3 y ext4, el equilibrio generalmente se realiza aplicando entradas de diario en orden, y en ext4 específicamente, preasignando extensiones del sistema de archivos para aumentar los bloques contiguos. Es posible que no valga la pena perseguir niveles de fragmentación inferiores al 20%, especialmente si su sistema accede a algunos archivos repetidamente. Sugiero seguir estas tácticas para aumentar la velocidad de lectura para un solo sistema de disco:

  • aumentar ram: esto aumenta el caché del sistema de archivos

  • aumentar el tamaño del bloque: al pasar de 1k a 4k tamaños de bloque, obtendrá un mejor rendimiento en las lecturas de archivos cercanos o mayores que el tamaño de su bloque

  • si eres pedante, puedes organizar archivos grandes y pequeños en particiones por su tamaño de bloque, es posible que solo quieras hacer esto si almacenaste fotos, videos y código fuente en directorios separados

  • aumente su configuración de lectura anticipada usando hdparm y / o la utilidad de modo portátil

  • copia de seguridad y restaurar su sistema de archivos de forma lineal, como con tar

Si tiene varios discos y está utilizando bandas de banda y / o LVM, debe considerar otros factores, como el tamaño de la banda.

memnoch_proxy
fuente
4

Sí, hay una fsckinvocación específica (como root o sudo):

$ fsck /dev/sdXY

Reemplace X e Y con los parámetros correctos para su caso (por ejemplo /dev/sda1).

¡NO EJECUTE ESTO EN UNA PARTICIÓN MONTADA! Puede dañar seriamente su sistema de archivos.

Para obtener más información sobre Linux y la desfragmentación, consulte mi respuesta aquí .


Si no necesita ejecutar específicamente fsck, pero solo desea verificar la fragmentación de su unidad, el siguiente script (tomado de aquí ) debería ser el truco:

#!/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"); 

Luego puede ejecutarlo en el directorio (o punto de montaje) en cuestión:

$ frag_check.pl $HOME/
  1.32410691664555% non contiguous files, 1.05380668862427 average fragments.
terdon
fuente
Eso es solo llamar a fsck en la partición, y como ambos sabemos, destruirá una partición montada. ¿Hay alguna manera de usar fsck en una forma de solo lectura, dime-cómo-fragmentado-mi-disco-es?
Peltier
No que yo sepa, @Peltier. Estaba pensando que puede arrancar en un nivel de ejecución inferior, desmontar el disco relevante y ejecutar fsck. En cualquier caso, en serio, casi seguro puede ignorar la fragmentación en la mayoría de los sistemas Linux.
terdon
@Peltier, mira mi respuesta actualizada.
terdon
1
Sí, es lento Eso sí, tardó ~ 2-3 minutos en mi 500 GB / inicio / partición. Una vez más, recalco, la fragmentación del disco ya no es realmente un problema. Especialmente si está utilizando un sistema de archivos EXT3-4.
terdon
1
@KentFredric ¡Ah! Si, de hecho. Ahora entiendo lo que quieres decir. Edité en consecuencia, gracias. Eliminemos los comentarios para eliminar el desorden.
terdon
0

Puede usar una herramienta como e2defrag para obtener esta información.

Tenga en cuenta que, debido a la naturaleza de los sistemas de archivos de Linux, la desfragmentación suele ser innecesaria.

Lucas Kauffman
fuente
¿Te importaría detallar tu respuesta? Intenté obtener esa información e4defrag -c, pero no funcionó.
Peltier
@Peltier Apunte a un punto moint Ext3 o Ext4 después de la -copción como último argumento. ¿Y ... "no funcionó"? ¿Cuál es el error que obtienes?
gertvdijk
Dice "Hecho". Sin embargo, no lo apunté directamente al dispositivo, sino al punto de montaje. Estoy intentando nuevamente con el dispositivo.
Peltier
Tenga en cuenta que lleva mucho tiempo, mientras que fsck es muy rápido.
Peltier
Solo lo intenté nuevamente con el dispositivo, solo dice "Listo".
Peltier