Monte(8) con soporte(2)

Monte(8) con soporte(2)

Tengo un software que desmontará una partición mediante programación (si no está ocupada) y la volverá a montar una vez finalizado todo el trabajo.

Si ejecuto esto en la terminal:

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

Entiendo esto en /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

Así que hice un analizador de información de montaje y obtuve los datos para restaurar el montaje, pero estoy teniendo que convertir las opciones de montaje ( rw,relatime) y las superopciones (la última parte en /mountinfo: rw,sync,dirsync,...) con mountoptionsy data:

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

Mi enfoque fue convertir las opciones de montaje en las apropiadas mountflagsy darle opciones especiales directamente data, pero luego aparece este error:

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

Así que hice una función para copiar los atributos en las súper opciones que simplemente coinciden con los datos específicos del sistema de archivos, y ahora funciona. Pero todavía tengo un problema: ¿cómo puedo configurar, por ejemplo, syncsi dirsyncno están en los indicadores de opciones de montaje y si no son para atributos específicos de vfat?

Si se puede realizar a través del montaje de la línea de comandos, también se puede realizar en la versión de la línea de comandos, ¿verdad?

Respuesta1

Algunos de los parámetros dados amount(8)se traducen a indicadores especificados en el mountflagsparámetro paramount(2):

  • synces MS_SYNCHRONOUS;
  • dirsynces MS_DIRSYNC;
  • relatimees MS_RELATIME;
  • rwes el valor predeterminado, por lo que no se puede especificar; rosería MS_RDONLY.

Respuesta2

Entonces hice un mountinfoanalizador[…]

Es mejor que utilices setmntent()los getmntent()que se proporcionan en la biblioteca de tiempo de ejecución de GNU C.

Mi enfoque fue convertir las opciones de montaje en las apropiadas mountflagsy ofrecer opciones especiales directamente adata[…]

Lo que debes hacer es tomar los datos mnt_optsque te dieron getmntent()y procesarlos en flagsy data. El mountcomando del util-linuxpaquete se basa en una biblioteca para esto, llamadamontaje de biblioteca. Parte de ella está basada en tablas, a partir de largas tablas específicas de Linux.

Otras lecturas

  • "El mtabarchivo".Manual de referencia de la biblioteca GNU C. 2.23. Fundación de Software Libre. 2016.
  • Karel Zak (2012). "Opciones de montaje".Manual de referencia de libmount. 2.21. Archivos del kernel de Linux.

información relacionada