Montierung(8) mit Montierung(2)

Montierung(8) mit Montierung(2)

Ich habe eine Software, die eine Partition programmgesteuert aushängt (wenn sie nicht beschäftigt ist) und sie nach Abschluss der Arbeit erneut einhängt.

Wenn ich dies im Terminal ausführe:

sudo mount /dev/sdb1 /mnt/fat32 -o sync,dirsync,rw,uid=1000,gid=1000,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,showexec,utf8,flush,errors=remount-ro -t vfat

Ich bekomme das hier rein /proc/self/mountinfo:

100 24 8:17 / /mnt/fat32 rw,relatime shared:61 - vfat /dev/sdb1 rw,sync,dirsync,uid=1000,gid=1000,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,showexec,utf8,flush,errors=remount-ro

Also habe ich einen Mountinfo-Parser erstellt, um die Daten zum Wiederherstellen des Mounts zu erhalten, aber ich habe Probleme mit der Konvertierung der Mount-Optionen ( rw,relatime) und der Super-Optionen (der letzte Teil in /mountinfo: rw,sync,dirsync,...) mit mountoptionsund data:

int mount(const char *source, const char *target,
          const char *filesystemtype, unsigned long mountflags,
          const void *data);

Mein Ansatz bestand darin, die Mount-Optionen in die entsprechenden Optionen umzuwandeln mountflagsund spezielle Optionen direkt an zu geben data, aber dann erhalte ich diesen Fehler:

[62857.390803] FAT-fs (sdb1): Unrecognized mount option "rw" or missing value

Also habe ich eine Funktion erstellt, um die Attribute in den Superoptionen zu kopieren, die genau den dateisystemspezifischen Daten entsprechen, und jetzt funktioniert es. Aber ich habe immer noch ein Problem: Wie kann ich beispielsweise festlegen, syncob dirsyncsie in den Mount-Optionen-Flags enthalten sind und ob sie nicht für vfat-spezifische Attribute bestimmt sind?

Wenn dies über die Einbindung in der Befehlszeile möglich ist, kann dies auch in der Befehlszeilenversion erfolgen, oder?

Antwort1

Einige der Parameter, diemount(8)werden in die im mountflagsParameter angegebenen Flags übersetzt.mount(2):

  • syncIst MS_SYNCHRONOUS;
  • dirsyncIst MS_DIRSYNC;
  • relatimeIst MS_RELATIME;
  • rwist die Standardeinstellung und kann daher nicht angegeben werden; rowäre MS_RDONLY.

Antwort2

Also habe ich einen mountinfoParser gemacht[…]

Besser ist es , die in der GNU C-Laufzeitbibliothek bereitgestellten setmntent()und zu verwenden.getmntent()

Mein Ansatz war, die Mount-Optionen in die entsprechenden Optionen umzuwandeln mountflagsund spezielle Optionen direkt andata[…]

Was Sie tun müssen, ist, die mnt_optsIhnen von gegebenen zu nehmen getmntent()und sie in flagsund zu verarbeiten data. Der mountBefehl aus dem util-linuxPaket stützt sich hierfür auf eine Bibliothek namenslibmount. Einiges davon ist tabellengesteuert und basiert auf langen Linux-spezifischen Tabellen.

Weiterführende Literatur

  • "Die mtabDatei".Das Referenzhandbuch zur GNU C-Bibliothek. 2.23. Freie Software Foundation. 2016.
  • "Karel Zak (2012)."Einhängeoptionen".libmount-Referenzhandbuch. 2.21. Linux-Kernel-Archive.

verwandte Informationen