Montar (8) com o suporte (2)

1

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?

    
por rnunes 18.05.2016 / 11:27

2 respostas

1

Alguns dos parâmetros fornecidos para mount(8) são traduzidos para sinalizadores especificados em o parâmetro mountflags para mount(2) :

  • sync é MS_SYNCHRONOUS ;
  • dirsync é MS_DIRSYNC ;
  • relatime é MS_RELATIME ;
  • rw é o padrão, por isso não pode ser especificado; ro seria MS_RDONLY .
por 18.05.2016 / 11:34
1

So I made a mountinfo parser […]

É melhor usar setmntent() e getmntent() fornecidos na biblioteca de tempo de execução GNU C.

My approach was to convert the mount options into the appropriate mountflags and to give special options straight to data […]

O que você precisa fazer é retirar mnt_opts dado a você por getmntent() e processá-los em flags e data . O comando mount do pacote util-linux depende de uma biblioteca para isso, chamada libmount . Algumas delas são baseadas em tabelas, a partir de tabelas específicas do Linux.

Leitura adicional

  • " O arquivo mtab ". O Manual de Referência da Biblioteca GNU C . 2,23. Fundação Software Livre. 2016.
  • Karel Zak (2012). " Montar opções ". Manual de Referência do libmount . 2,21. Arquivos Kernel do Linux.
por 18.05.2016 / 12:45