Ich muss einen Dateisystemtyp aus einem C / C ++ - Programm mithilfe des Dateisystem-Superblocks erkennen. Ich sehe jedoch keine großen Unterschiede zwischen Superblocks für ext2 und ext4. Das s_rev_level
Feld ist das gleiche (= 1), das s_minor_rev_level
ist das gleiche (= 0).
Ich könnte einige Features aus s_feature_compat
(und anderen Feature-Feldern) überprüfen und versuchen, Features zu finden, die von ext2 nicht unterstützt werden. Aber - die Person, die eine Partition formatiert, könnte einige Funktionen absichtlich deaktivieren. Diese Methode kann also ext4 erkennen, aber nicht zwischen ext2 und ext4 mit deaktivierten ext4-spezifischen Funktionen unterscheiden.
Also, wie geht das?
filesystems
ext4
ext3
ext2
HEKTO
quelle
quelle
file
mich zu fragen, was er tut, aberfile
derzeit einext4
Dateisystem mit deaktiviertem Journal als gemeldetext2
.Antworten:
Nachdem man sich einige Zeit den Code für verschiedene Dienstprogramme und den Kernel-Code angesehen hat, scheint es, dass das, was @Hauke vorgeschlagen hat, wahr ist - ob ein Dateisystem
ext2
/ext3
/ext4
nur durch die aktivierten Optionen definiert ist.Von der Wikipedia-Seite auf
ext4
:Wie höchstwahrscheinlich bereits bekannt ist, besteht eine ähnliche Kompatibilität zwischen
ext2
undext3
.Nachdem ich mir den Code angesehen hatte,
blkid
mit dem verschiedeneext
Dateisysteme unterschieden werden , konnte ich einext4
Dateisystem in etwas verwandeln , das alsext3
(und von dort bisext2
) erkannt wurde . Sie sollten dies wiederholen können mit:Erste
blkid
Ausgabe ist:Zweitens ist:
Und der letzte:
Beachten Sie, dass ich eine neue Version von verwenden musste, die
e2fsprogs
in meiner Distribution verfügbar war, um diemetadata_csum
Flagge zu erhalten. Der Grund für das Setzen und anschließende Löschen war, dass ich keine andere Möglichkeit gefunden habe, das zugrunde liegendeEXT4_FEATURE_RO_COMPAT_GDT_CSUM
Flag zu beeinflussen . Das zugrunde liegende Flag fürmetadata_csum
(EXT4_FEATURE_RO_COMPAT_METADATA_CSUM
) und schließenEXT4_FEATURE_RO_COMPAT_GDT_CSUM
sich gegenseitig aus. Durch dasmetadata_csum
DeaktivierenEXT4_FEATURE_RO_COMPAT_GDT_CSUM
wirdmetadata_csum
das letztere deaktiviert , aber durch Deaktivieren wird letzteres nicht wieder aktiviert.Schlussfolgerungen
Mangels tiefer Kenntnisse über die Interna des Dateisystems scheint es entweder:
Die Journal-Prüfsumme soll ein definierendes Merkmal eines Dateisystems sein, das so erstellt wurde,
ext4
dass Sie es eigentlich nicht deaktivieren sollten, und die Tatsache, dass ich dies verwaltet habe, ist wirklich ein Fehlere2fsprogs
. Oder,Alle
ext4
Funktionen wurden immer so konzipiert, dass sie deaktiviert werden. Wenn Sie sie deaktivieren, wird das Dateisystem in jeder Hinsicht zu einemext3
Dateisystem.In beiden Fällen ist ein hohes Maß an Kompatibilität zwischen den Dateisystemen eindeutig ein Entwurfsziel. Vergleichen Sie dies mit ReiserFS und Reiser4, bei denen Reiser4 eine vollständige Neugestaltung darstellt. Was wirklich zählt, ist, ob die vorhandenen Funktionen von dem Treiber unterstützt werden, der zum Mounten des Systems verwendet wird. Wie der Wikipedia-Artikel feststellt, kann der
ext4
Treiber auch mitext3
und verwendetext2
werden (tatsächlich gibt es eine Kernel-Option, um denext4
Treiber immer zu verwenden und die anderen loszuwerden). Das Deaktivieren von Funktionen bedeutet lediglich, dass die früheren Treiber keine Probleme mit dem Dateisystem haben und es daher keine Gründe gibt, sie daran zu hindern, das Dateisystem bereitzustellen.Empfehlungen
Es scheint am besten zu sein, zwischen den verschiedenen
ext
Dateisystemen in einem C-Programm zu unterscheidenlibblkid
. Es ist Teil vonutil-linux
und dies ist, was dermount
Befehl verwendet, um zu versuchen, den Dateisystemtyp zu bestimmen. Die API-Dokumentation finden Sie hier .Wenn Sie die Prüfung selbst durchführen müssen, müssen Sie dieselben Flags testen, die
libblkid
der richtige Weg zu sein scheinen. Obwohl in der verknüpften Datei insbesondere dasEXT4_FEATURE_RO_COMPAT_METADATA_CSUM
Flag nicht erwähnt wird, das in der Praxis getestet zu werden scheint.Wenn Sie wirklich das ganze Schwein gehen wollten, könnte das Suchen nach Journal-Prüfsummen eine todsichere Möglichkeit sein, um herauszufinden, ob ein Dateisystem ohne diese Flags vorhanden ist (oder war )
ext4
.Aktualisieren
Es ist tatsächlich etwas einfacher, in die entgegengesetzte Richtung zu gehen und ein
ext2
Dateisystem zu fördern, umext4
:Die drei
blkid
Ausgaben:Die Tatsache, dass
ext3
/ext4
features auf einem Dateisystem, das ursprünglich gestartet wurde, so einfach aktiviert werden kann,ext2
ist wahrscheinlich die beste Demonstration dafür, dass der Dateisystemtyp tatsächlich durch die Features definiert wird.quelle
Keine direkte Antwort, aber bei der Betrachtung der Ausgabe
tune2fs -l ...
für jeden Dateisystemtyp werden die folgenden Unterschiede angezeigt.Dateisystemfunktionen
EXT2 EXT3 EXT4Journalparameter
EXT2Zeigt keinen Parameter für das Journaling an.
EXT3Zeigt dies:
EXT4Zeigt dies:
quelle