Wie kann man das verwendete Dateisystem ermitteln?
-
Die Frage sagts schon: Wie kann man das verwendete Dateisystem mit dem eine Festplatte, Diskette oder was auch immer formatiert ist, ermitteln? Beispielsweise habe ich eine Festplatte und möchte wissen ob da, ext2 oder ext2, xfs drauf ist.
-
nicht mit c++ mitteln, dass gehört in das entsprechende OS-Forum
-
Hallo,
dixidix schrieb:
Die Frage sagts schon: Wie kann man das verwendete Dateisystem mit dem eine Festplatte, Diskette oder was auch immer formatiert ist, ermitteln? Beispielsweise habe ich eine Festplatte und möchte wissen ob da, ext2 oder ext2, xfs drauf ist.
Siehe http://linux.die.net/man/3/getmntent
MfG,
Probe-Nutzer
-
ich habe das hier gefunden.
http://www.linuxmanpages.com/man2/statfs.2.phpWie kann man das dann zurückgeben? Etwa so?
unsigned long getFsType(const char *mountpoint) { struct statfs s; statfs(mountpoint, &s); unsigned long type=s.f_type; return type; }
-
dixidix schrieb:
ich habe das hier gefunden.
http://www.linuxmanpages.com/man2/statfs.2.phpAuch ok.
dixidix schrieb:
Wie kann man das dann zurückgeben? Etwa so?
unsigned long getFsType(const char *mountpoint) { struct statfs s; statfs(mountpoint, &s); unsigned long type=s.f_type; return type; }Ja, so geht das, würde ich aber noch kürzer schreiben, wenn da nichts weiter getan wird (aber müsste type (s.f_type) nicht vom Typ long sein (warum unsigned?)):
:long getFsType(const char *mountpoint) { struct statfs s; statfs(mountpoint, &s); return s.f_type }MfG,
Probe-Nutzer
-
Ja, so geht das, würde ich aber noch kürzer schreiben, wenn da nichts weiter getan wird (aber müsste type (s.f_type) nicht vom Typ long sein (warum unsigned?)):
Mit unsinged, war das nur so dahin getippt, aber danke für den Tipp.
wenn da nichts weiter getan wird
Ich will eigentlich nur eine Ausgabe haben, die mir den Namen des Dateisystems zurückgibt.
Das müsste ich dann wohl irgendwie hiermit verknüpfen.File system types: ADFS_SUPER_MAGIC 0xadf5 AFFS_SUPER_MAGIC 0xADFF BEFS_SUPER_MAGIC 0x42465331 BFS_MAGIC 0x1BADFACE CIFS_MAGIC_NUMBER 0xFF534D42 CODA_SUPER_MAGIC 0x73757245 COH_SUPER_MAGIC 0x012FF7B7 CRAMFS_MAGIC 0x28cd3d45 DEVFS_SUPER_MAGIC 0x1373 EFS_SUPER_MAGIC 0x00414A53 EXT_SUPER_MAGIC 0x137D EXT2_OLD_SUPER_MAGIC 0xEF51 EXT2_SUPER_MAGIC 0xEF53 EXT3_SUPER_MAGIC 0xEF53 HFS_SUPER_MAGIC 0x4244 HPFS_SUPER_MAGIC 0xF995E849 HUGETLBFS_MAGIC 0x958458f6 ISOFS_SUPER_MAGIC 0x9660 JFFS2_SUPER_MAGIC 0x72b6 JFS_SUPER_MAGIC 0x3153464a MINIX_SUPER_MAGIC 0x137F /* orig. minix */ MINIX_SUPER_MAGIC2 0x138F /* 30 char minix */ MINIX2_SUPER_MAGIC 0x2468 /* minix V2 */ MINIX2_SUPER_MAGIC2 0x2478 /* minix V2, 30 char names */ MSDOS_SUPER_MAGIC 0x4d44 NCP_SUPER_MAGIC 0x564c NFS_SUPER_MAGIC 0x6969 NTFS_SB_MAGIC 0x5346544e OPENPROM_SUPER_MAGIC 0x9fa1 PROC_SUPER_MAGIC 0x9fa0 QNX4_SUPER_MAGIC 0x002f REISERFS_SUPER_MAGIC 0x52654973 ROMFS_MAGIC 0x7275 SMB_SUPER_MAGIC 0x517B SYSV2_SUPER_MAGIC 0x012FF7B6 SYSV4_SUPER_MAGIC 0x012FF7B5 TMPFS_MAGIC 0x01021994 UDF_SUPER_MAGIC 0x15013346 UFS_MAGIC 0x00011954 USBDEVICE_SUPER_MAGIC 0x9fa2 VXFS_SUPER_MAGIC 0xa501FCF5 XENIX_SUPER_MAGIC 0x012FF7B4 XFS_SUPER_MAGIC 0x58465342 _XIAFS_SUPER_MAGIC 0x012FD16DDie Funktion gibt ja nur Nummern aus, also müsste ich das dann noch umbiegen. Also das z.B nicht
0xEF53sondern
EXT2_SUPER_MAGICrauskommmt.
Was mich nur wundert, dass die hier gleich sind?
EXT2_SUPER_MAGIC 0xEF53 EXT3_SUPER_MAGIC 0xEF53
-
dixidix schrieb:
Ich will eigentlich nur eine Ausgabe haben, die mir den Namen des Dateisystems zurückgibt.
Das müsste ich dann wohl irgendwie hiermit verknüpfen.Ja, wenn der Name benötigt wird, müsste man das noch in "Klartext übersetzen".
dixidix schrieb:
Was mich nur wundert, dass die hier gleich sind?
Das bedeutet in der Tat, dass diese beiden Systeme nicht unterscheidbar sind. Wenn du es so genau benötigst, dann solltest du vielleicht doch getmntent verwenden, da soll der Name in mnt_fsname zurückgegeben werden.
MfG,
Probe-Nutzer
-
ext3 ist das selbe wie ext2, oder besser speichert und organisiert die daten auf exakter art und weise wie ext2. der einzigste unterschied besteht darin, dass ext3 noch ein journal auf der platte speichert und verwaltet. da es aber möglich ist ext3 auch als ext2 zu mounten und man auch mit dem ext2 treiber lesend und schreibend zugreifen kann haben sie die gleiche superblock identifikation. um also ext2 und ext3 zu unterscheiden müsstest auf existenz eines journals testen. wie dass aber im detail funktioniert kann ich auch nicht sagen, vielleicht mal in den sourcen von tune2fs stöbern

-
du kannst die ext3-journal-datei unter /.journal finden. allerdings wird die normalerweise von dem system versteckt, wenn das ganze als ext3 gemountet ist. bei einem mount für ext2 bin ich mir sicher. die datei ist aber auf alle fälle vorhanden, wenn es ext3 ist.
-
Aha, danke, mal schauen.
edit: erst mal noch etwas als Grundlage, funktionieren tut das zwar, aber egal was man für einen Mountpoint angibt, es kommt immer das gleiche raus und nicht mal das was in der Liste steht.
es wird nur diese Zahl ausgegeben:16914836müsste dann dies hier sein
0x1021994Muss hier noch was beachtet werden?
#include <sys/statfs.h> #include <iostream> long getFsType(const char *mountpoint) { struct statfs s; statfs(mountpoint, &s); return s.f_type; } int main( int argc, char **argv) { const char *mp = "/dev/sda"; cout<<"Found system "<< getFsType(mp)<<" at " << mp <<endl; return 0; }