%20con%20soporte(2).png)
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 mountoptions
y 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 mountflags
y 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, sync
si dirsync
no 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
Respuesta2
Entonces hice un
mountinfo
analizador[…]
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
mountflags
y ofrecer opciones especiales directamente adata
[…]
Lo que debes hacer es tomar los datos mnt_opts
que te dieron getmntent()
y procesarlos en flags
y data
. El mount
comando del util-linux
paquete 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
mtab
archivo".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.