Puede ejecutar fsck.ext2 de manera 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
La familia moderna 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, mediante la asignación previa de extensiones del sistema de archivos para aumentar los bloques contiguos. Es posible que no valga la pena buscar 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 sistema de un solo 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, obtiene un mejor rendimiento en las lecturas de archivos cercanos o más grandes que su tamaño de bloque
-
si es pedante, puede organizar archivos grandes y archivos pequeños en particiones por su tamaño de bloque, es posible que solo quiera hacer esto si almacenó 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
-
haga una copia de seguridad y restaure su sistema de archivos de forma lineal, como con tar
Si tiene varios discos y utiliza bandas de raid y/o LVM, debe tener en cuenta otros factores, como el tamaño de banda.
Sí, hay un fsck
específico invocación (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 fsck específicamente, pero solo desea verificar la fragmentación de su unidad, la siguiente secuencia de comandos (tomada de aquí) debería funcionar:
#!/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.