ext4 Ubuntu 18.04 Dateisystemfehler „Struktur muss bereinigt werden“

ext4 Ubuntu 18.04 Dateisystemfehler „Struktur muss bereinigt werden“

Ich möchte eine 24-TB-Festplatte so vorbereiten, dass sie eine große Anzahl von Verzeichnissen und Dateien in einem einzigen Verzeichnis speichern kann (bitte sagen Sie mir nicht, dass ich diese Strategie ändern soll, es handelt sich um eine Struktur, die von einer Software verwendet wird, die für uns eine Blackbox ist, daher können wir diesen Ansatz nicht ändern). Wie ich ausführlich recherchiert habe, kann das ext4-Dateisystem Milliarden von Dateien in einem Verzeichnis speichern, aber es sollte mit einigen speziellen Flags und Parametern vorbereitet werden. Das hier habe ich basierend auf meiner Recherche verwendet:

sudo mke2fs -T news /dev/sdb1
sudo tune2fs -O dir_index /dev/sdb1
sudo tune2fs -O large_dir /dev/sdb1
sudo tune2fs -O dir_nlink /dev/sdb1


sudo mkdir /hdd
sudo gedit /etc/fstab

- add following to the end of the file:
/dev/sdb1    /hdd    ext4    defaults,noatime    0    0

sudo mount /hdd

Um die Struktur zu testen, habe ich Bash-Skripte vorbereitet, die Verzeichnisse und Dateien in einem einzigen Verzeichnis erstellen. So etwas wie das hier:

for ((i = 1000000; i <= 200000000; i++))
do
  sudo mkdir "/hdd/largedir/$i" -p
  sudo cp "sample-file.jpg" "/hdd/largedir/$i"
  if (( $i % 1000 == 0 ));
  then
    echo "$i created";
  fi;
done

Als ich das System nach stundenlanger Arbeit überprüfte, wurde dieser Fehler ausgegeben:

Structure needs cleaning

Bei meinen Tests wird dieser Fehler nicht für alle Dateien und Verzeichnisse ausgegeben. Ich kann beispielsweise ein Verzeichnis mit dem Namen „10000“ erstellen, aber kein Verzeichnis mit dem Namen „1000“. Ich habe auch den Hash-Algorithmus mit diesem Befehl geändert:

sudo tune2fs -E "hash_alg=tea" /dev/sdb1

und habe das System neu gestartet und neu gemountet, aber das Problem besteht immer noch. Weiß jemand, was das Problem ist und warum diese Situation im Dateisystem aufgetreten ist? Ist das ext4-Dateisystem nicht stark genug für eine so große Struktur? Ich habe auf einigen Seiten gelesen, dass man für eine große Anzahl von Dateien xfs statt ext4 verwenden soll. Stimmt das wirklich?

Sie sehen, dass während des Dateivorgangs weder Stromausfälle noch Systemabstürze aufgetreten sind. Ich hätte ein solches Verhalten nicht erwartet, als alles in Ordnung war.

-- BEARBEITET für weitere Informationen: --

Die Inode-Informationen für die Festplatte lauten wie folgt:

Filesystem        Inodes     IUsed     IFree IUse% Mounted on
/dev/sdb1      421216256 183643803 237572453   44% /hdd

Die Platzinformationen lauten wie folgt:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1        26T  3.1T   21T  13% /hdd

Ich habe das Dateisystem überprüft und es ist ext4 (wie in verschiedenen Tools angezeigt). Beispielsweise zeigt gparted das Partitionsdateisystem als ext4 an. Was die Funktionen betrifft, war keine der oben genannten Funktionen auf meinem Ubuntu 18.04 LTS standardmäßig aktiviert. Bei meinen alten Tests bin ich auf mehrere Fehler gestoßen und bin schließlich zu diesem gekommen.

Antwort1

Mit dem Befehl sudo mke2fs -T news /dev/sdb1erstellen Sie nicht unbedingt ein ext4-Dateisystem, sondern einext2Dateisystem.

Vorausgesetzt, Ihr Ubuntu 18.04 hat im Wesentlichen die gleiche /etc/mke2fs.confDatei wie mein Debian 10, dann dir_indexist es bereits als aktueller Basis-Funktionssatz für alle ext2/3/4-Dateisysteme aktiviert, die mit modern erstellt wurden mke2fs. Und dir_nlinkist standardmäßig aktiviert für dieext4Dateisystemtyp.

Auf der mke2fs.conf(5)Manpage steht: "Wenn weder der Benutzer noch die mke2fs.confDatei einen Standarddateisystemtyp angeben, mke2fswird ein Standarddateisystemtyp von verwendetext3wenn ein Journal über eine Kommandozeilenoption angefordert wurde, oderext2wenn nicht."

Laut der /etc/mke2fs.confDatei -T newsgibt die Option nur die inode_ratio = 4096Option an, sonst nichts. Wenn Sie also nicht die mkfs.ext4Form anstelle der einfachen verwenden mke2fs, erhalten Sie möglicherweise eineext2Dateisystem, das auf Dateien mit einer durchschnittlichen Größe von 4 KB oder weniger zugeschnitten ist.

Debian hat nicht die fs_type =im [defaults]Abschnitt von angegebene und Sie schließen die Option für Ihren Befehl mke2fs.confnicht ein . Wenn also Ubuntus mit Debian identisch ist (was normalerweise der Fall ist), hat Ihr Befehl Ihnen möglicherweise eine 24 TB-jmke2fsmke2fs.confext2Dateisystem, das wahrscheinlich von niemandem besonders gut getestet wurde.

Auf der ext4(5)Manpage steht, dass die 64bitDateisystemfunktion bei Bedarf automatisch eingestellt wird. Das könnte erklären, warum die Tools keine Fehler gemeldet haben. Außerdem heißt es dort, dass die dir_indexFunktion von Ext2-Dateisystemen ignoriert wird.

Aus früheren Erfahrungen mit Multi-Terabyte ext3-Dateisystemen hätte ich enorme Zeitaufwande für die Erstellung und Überprüfung von Dateisystemen erwartet. Für Ihren Anwendungsfall dir_indexkann das Vorhandensein oder Fehlen dieser Funktion für Sie über die Anwendungsleistung entscheiden.

Könnten Sie bitte die tatsächliche tune2fs -l /dev/sdb1Ausgabe Ihrer ursprünglichen Frage bearbeiten, damit wir nicht raten müssen, was passiert sein könnte oder nicht?

„Struktur muss bereinigt werden“ scheint der Standardtext zu sein, der dem EUCLEANKernel-Fehlercode entspricht, der angibt, dass das Dateisystem beschädigt ist und eine Dateisystemprüfung erforderlich ist. Bei einem Dateisystem dieser Größe wird dies ziemlich viel Zeit und RAM in Anspruch nehmen. Und natürlich muss das Dateisystem während der Prüfung ausgehängt werden.

Antwort2

Tatsächlich bin ich nach vielen Tests zu dem Punkt gekommen, dass ext4 anscheinend nicht in der Lage ist, so etwas zu tun (Milliarden von Dateien in einem Verzeichnis zu speichern). Und nach meinen Recherchen, wie dies unter Linux funktioniert, zeigen die Ergebnisse (tatsächlich auch meine praktischen Tests), dass ich für ein solches Szenario XFS anstelle von ext4 verwenden sollte, das wirklich für diese Aufgabe ausgelegt ist.

verwandte Informationen