Frage Wie ext3 in ext4-Unterstützung umwandeln e4defrag?


Ich habe zwei ext3-Dateisysteme, die sehr alt sind und seit langer Zeit zu 99% voll sind, was zu einer Fragmentierung führt. Außerdem wurden sie zum Ausführen von VMs mit dynamischen Datenträgerabbildern und anderen Fragmentierung verursachenden Arbeitsauslastungen verwendet.

Ich habe vor kurzem die Dateisysteme mit den Anweisungen zu ext4 konvertiert Hier, insbesondere durch:

# tune2fs -O extents,uninit_bg,dir_index /dev/DEV
# e2fsck -fDC0 /dev/DEV

Die Dateisysteme werden jedoch immer noch nicht unterstützt e4defrag:

Failed to defrag with EXT4_IOC_MOVE_EXT ioctl:Operation not supported   [ NG ]

Ich schätze das tune2fs Befehl fehlt eine Option, aber googeln half mir nicht herauszufinden, was das sein könnte.


4
2018-06-22 06:19


Ursprung




Antworten:


Ich hatte das gleiche Problem. Ich fand das, was die Antwort hatte:

https://wiki.archlinux.org/index.php/Ext4#Migrating_files_to_extents

Dateien in Extents migrieren

Warnung: Verwenden Sie NICHT die folgende Methode mit dem Mercurial-Repository, die lokal geklont wurde, da dies das Repository beschädigen würde. Es kann auch andere feste Links im Dateisystem beschädigen.

Obwohl das Dateisystem jetzt in ext4 konvertiert wird, nutzen alle Dateien, die vor der Konvertierung geschrieben wurden, noch nicht die neuen Extents von ext4, was die Leistung großer Dateien verbessert und die Fragmentierung sowie die Dateisystemprüfzeit verringert. Um ext4 vollständig zu nutzen, müssten alle Dateien auf der Festplatte neu geschrieben werden. Ein Dienstprogramm aufgerufen e4defrag wird entwickelt und wird sich um diese Aufgabe kümmern; es ist jedoch noch nicht bereit für die Produktion.

Glücklicherweise ist es möglich, die chattr Programm, das bewirkt, dass der Kernel die Datei mithilfe von Extents neu schreibt. Es ist möglich, diesen Befehl für alle Dateien und Verzeichnisse einer Partition auszuführen (z. B. wenn /home ist auf einer dedizierten Partition): (Muss als root ausgeführt werden)

find /home -xdev -type f -print0 | xargs -0 chattr +e
find /home -xdev -type d -print0 | xargs -0 chattr +e

Es wird empfohlen, diesen Befehl zuerst an einer kleinen Anzahl von Dateien zu testen und zu überprüfen, ob alles in Ordnung ist. Es kann auch nützlich sein, das Dateisystem nach der Konvertierung zu überprüfen.

Verwendung der lsattr Befehl, ist es möglich zu überprüfen, dass Dateien jetzt Extents verwenden. Der Buchstabe 'e' sollte in der Attributliste der aufgelisteten Dateien erscheinen.

-

Hinweis: Ich hatte angenommen, dass e4defrag die Dateien für die Verwendung von Extents konvertieren könnte. Das gescheiterte ioctl ist derjenige, der das afaik macht, also bin ich etwas verwirrt darüber, warum es nicht funktioniert, aber chattr +e hat für mich gearbeitet. Nachdem du es getan hast chattr +e Die Dateien kannst du dann verwenden e4defrag auf sie. Stellen Sie sicher, dass Sie eine Sicherungskopie haben, nur für den Fall (ich hätte gedacht, das ist sicher, aber Sie wissen nie - es gibt eine Warnung hier über Hardlinks, aber ich finde keine andere Bezugnahme auf bekannte Probleme mit Hardlinks).


4
2017-12-02 11:36



Willkommen bei Ask Ubuntu! Während dies theoretisch die Frage beantworten könnte, es wäre vorzuziehen um die wesentlichen Teile der Antwort hier einzubeziehen und den Link als Referenz bereitzustellen. - Oyibo
Ich habe die Antwort wie gewünscht verbessert. - Jools