Sous Linux, comment vérifiez-vous si un disque est fragmenté?


28

Au démarrage, fsck signale parfois la segmentation d'un disque: "5,3% non contigu".

Comment puis-je obtenir ces informations moi-même? Existe-t-il une invocation fsck spécifique?

Réponses:


27

Vous pouvez exécuter fsck.ext2 en toute sécurité sur un système de fichiers ext2 ext3 ou ext4 même s'il est monté comme ceci

sudo fsck.ext2 -fn /dev/sdXY

Si le lecteur est monté, il générera de nombreuses erreurs, mais l'argument -n lui dit de ne pas toucher le lecteur.

$ 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

Merci! fsck.ext2 a trouvé plusieurs erreurs sur ma partition domestique. Maintenant, je voudrais le réparer. Cela soulève la question: comment réparer ma partition domestique, que je dois garder montée pour me connecter?
Michael

3
@Michael Si votre lecteur est monté, une vérification sur celui-ci signalera toujours des erreurs. Quoi qu'il en soit, si vous souhaitez vérifier le système de fichiers au prochain redémarrage, exécutez-le sudo tune2fs -C 16000 /dev/sda1et redémarrez.
Rucent88

1
fsck vérifie ce qui se trouve sur le disque / stockage, mais s'il est monté, il y aura des choses en cours (à moitié écrites). C'est pourquoi vous verrez des erreurs, ce ne sont pas de vraies erreurs, ce sont de fausses erreurs. Ignore les.
ctrl-alt-delor

8

La famille ext moderne de systèmes de fichiers prend en compte l'équilibrage et la contiguïté lors de l'allocation des fichiers. En ext3 et ext4, l'équilibrage est généralement pris en charge en appliquant les entrées de journal dans l'ordre, et en ext4 en particulier, en pré-allouant les extensions du système de fichiers pour augmenter les blocs contigus. La poursuite des niveaux de fragmentation inférieurs à 20% pourrait ne pas valoir la peine, surtout si votre système accède à plusieurs fichiers à plusieurs reprises. Je suggère de poursuivre ces tactiques pour augmenter la vitesse de lecture pour un système à disque unique:

  • augmenter la RAM: cela augmente le cache du système de fichiers

  • augmenter la taille des blocs: en passant de 1k à 4k, vous obtenez de meilleures performances sur les lectures de fichiers proches ou supérieurs à la taille de votre bloc

  • si vous êtes pédant, vous pouvez organiser les gros fichiers et les petits fichiers en partitions selon leur taille de bloc, vous ne voudrez peut-être le faire que si vous avez stocké des photos, des vidéos et du code source dans des répertoires séparés

  • augmentez votre paramètre de lecture anticipée à l'aide de l'utilitaire hdparm et / ou du mode ordinateur portable

  • sauvegarder et restaurer votre système de fichiers de manière linéaire, comme avec tar

Si vous disposez de plusieurs disques et que vous utilisez le striping raid et / ou LVM, vous devez prendre en compte d'autres facteurs, tels que la taille du stripe.


4

Oui, il existe une fsckinvocation spécifique (en tant que root ou sudo):

$ fsck /dev/sdXY

Remplacez X et Y par les paramètres corrects pour votre cas (par exemple /dev/sda1).

NE PAS EXÉCUTER CELA SUR UNE CLOISON MONTÉE! Cela peut sérieusement endommager votre système de fichiers.

Pour plus d'informations sur Linux et la défragmentation, voir ma réponse ici .


Si vous n'avez pas besoin d'exécuter spécifiquement fsck, mais que vous souhaitez simplement vérifier la fragmentation de votre lecteur, le script suivant (tiré d' ici ) devrait faire l'affaire:

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

Vous pouvez ensuite l'exécuter sur le répertoire (ou point de montage) en question:

$ frag_check.pl $HOME/
  1.32410691664555% non contiguous files, 1.05380668862427 average fragments.

C'est juste appeler fsck sur la partition, et comme nous le savons tous les deux, cela détruira une partition montée. Existe-t-il un moyen d'utiliser fsck d'une manière en lecture seule, dites-moi-comment-fragmenté-mon-disque?
Peltier

Pas autant que je sache, @Peltier. Je pensais que vous pouvez démarrer dans un niveau d'exécution inférieur, démonter le disque correspondant et exécuter fsck. Dans tous les cas, sérieusement, vous pouvez presque certainement ignorer la fragmentation sur la plupart des systèmes Linux.
terdon

@Peltier, voir ma réponse mise à jour.
terdon

1
Ouais, c'est lent. Rappelez-vous qu'il a fallu ~ 2-3 minutes sur mon 500 Go / home / partition. Encore une fois, je le souligne, la fragmentation des disques n'est plus vraiment un problème. Surtout si vous utilisez un système de fichiers EXT3-4.
terdon

1
@KentFredric Ah! Oui en effet. Je comprends ce que tu veux dire maintenant. J'ai édité en conséquence, merci. Supprimons les commentaires pour supprimer l'encombrement.
terdon

0

Vous pouvez utiliser un outil comme e2defrag pour obtenir ces informations.

N'oubliez pas qu'en raison de la nature des systèmes de fichiers Linux, la défragmentation n'est normalement pas nécessaire.


Pourriez-vous détailler votre réponse? J'ai essayé d'obtenir ces informations e4defrag -c, mais cela n'a pas fonctionné.
Peltier

@Peltier Pointez-le sur un point de moint Ext3 ou Ext4 après l' -coption comme dernier argument. Et ... "n'a pas fonctionné"? Quelle est l'erreur que vous obtenez?
gertvdijk

Il dit "Terminé". Je ne l'ai cependant pas pointé directement vers l'appareil, mais vers le point de montage. J'essaie à nouveau avec l'appareil.
Peltier

Notez que cela prend beaucoup de temps, alors que fsck est très rapide.
Peltier

Je viens de l'essayer à nouveau avec l'appareil, cela dit seulement "Terminé".
Peltier
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.