Eu tenho um software que desmontará uma partição programaticamente (se não estiver ocupado) e a montará novamente após todo o trabalho estar concluído.
Se eu executar isso no 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
Eu recebo isso em /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
Então fiz um analisador mountinfo e obtive os dados para restaurar a montagem, mas estou tendo com a conversão de opções de montagem ( rw,relatime
) e super opções (a última parte em /mountinfo
: rw,sync,dirsync,
... ) com mountoptions
e data
:
int mount(const char *source, const char *target,
const char *filesystemtype, unsigned long mountflags,
const void *data);
Minha abordagem era converter as opções de montagem no mountflags
apropriado e dar opções especiais diretamente para data
, mas depois recebi este erro:
[62857.390803] FAT-fs (sdb1): Unrecognized mount option "rw" or missing value
Então eu fiz uma função para copiar os atributos nas super opções que apenas correspondem aos dados específicos do sistema de arquivos, e agora funciona. Mas ainda tenho um problema: como posso definir, por exemplo, sync
e dirsync
se eles não estiverem nos flags de opções de montagem e se não forem para atributos específicos de vfat?
Se ele pode ser feito através da montagem da linha de comando, ele também pode ser feito na versão da linha de comando, certo?