Como a opção de montagem _netdev no / etc / fstab funciona?

24

Gostaria de saber qual é o mecanismo exato (implementação) usado para adiar a montagem até que a interface de rede seja ativada quando alguém usar a _netdevopção /etc/fstab?
Não systemdalterar esse comportamento?
Além disso, o que a delay_connectopção para sshfs fornece o _netdevque não fornece ?

Na mount página do manual :

_netdev
O sistema de arquivos reside em um dispositivo que requer acesso à rede (usado para impedir que o sistema tente montar esses sistemas de arquivos até que a rede seja ativada no sistema).

Na sshfs página do manual :

-o delay_connect
atrasar a conexão com o servidor

Piotr Dobrogost
fonte

Respostas:

25

SysV Init

O /etc/init.d/mountall.shscript init monta apenas sistemas de arquivos locais:

mount -a -t nonfs,nfs4,smbfs,cifs,ncp,ncpfs,coda,ocfs2,gfs,gfs2,ceph -O no_netdev

Outros sistemas de arquivos são montados por scripts init separados, como por exemplo /etc/init.d/mountnfs.sh, que declaram (via cabeçalhos LSB) sua dependência $network. Assim, eles são agendados mais tarde, após a criação da rede, enquanto mountall.shpodem ser executados muito mais cedo.

systemd

As unidades de montagem local são puxadas por local-fs.target, as remotas por remote-fs.target. systemd-fstab-generatorvarre /etc/fstab, gera unidades de montagem e as atribui aos destinos acima com base em condições semelhantes às acima.

delay_connect

Essa opção significa que o sshfs não iniciará a conexão SSH com o servidor remoto no momento da montagem, mas somente o fará na primeira operação do sistema de arquivos que realmente a exigir. Isso atrasa o relatório de erros, mas pode ser uma solução alternativa útil em alguns casos, por exemplo, se o sistema init não tiver informações suficientes para ordenar a operação de montagem corretamente. "A rede" sendo "ativa" é um termo bastante flexível , e mesmo que se possa adicionar dependências extras arbitrárias para montar unidades, isso não ajuda se o evento acionador não fizer parte da transação de inicialização (na linguagem systemd).

Ferenc Wágner
fonte
Então, você está dizendo que _netdevnão pretende ser um argumento transmitido ao processo que executa mount (e que é específico ao tipo de montagem ext4/btrfs/cifs/fuse), mas que deve ser lido por outros processos / scripts que, com base nesse sinalizador, decidem quando durante o processo de inicialização, essas montagens devem ser executadas. Sim? Nesse caso, desconfio que essa seja a razão pela qual esse argumento começa com sublinhado para diferenciá-lo de outros argumentos formais .
Piotr Dobrogost
Sim. Se você passar a _netdevopção para o mountcomando, ela ficará visível, /proc/mountsmas não terá outro efeito.
Ferenc Wágner
Pergunta bônus; isso está documentado em algum lugar?
Piotr Dobrogost
11
O manual de montagem contém: "OPÇÕES DE MONTAGEM INDEPENDENTE DO ARQUIVO DE SISTEMA - Algumas dessas opções são úteis apenas quando aparecem no /etc/fstabarquivo." Bem, _netdev(documentado um pouco mais tarde), é um bom exemplo disso.
Ferenc Wágner
2
A opção _netdev é ignorada no mount (8) por padrão. As opções são usadas apenas por initscripts. - bugzilla.redhat.com/show_bug.cgi?id=607309#c4
Piotr Dobrogost
18

A partir man systemd.mountda versão 231 do systemd:

As unidades de montagem referentes aos sistemas de arquivos locais e de rede são diferenciadas por suas especificações de tipo de sistema de arquivos. Em alguns casos, isso não é suficiente (por exemplo, montagens baseadas em dispositivo de bloco de rede, como iSCSI); nesse caso, _netdev pode ser adicionado à cadeia de opções de montagem da unidade, o que força o systemd a considerar a unidade de montagem como uma montagem de rede.

Piotr Dobrogost
fonte
Awsome! Não faço ideia por que essa resposta ainda não foi votada.
Valentin Bajrami
1

Upstart/Udev

Para upstarte / ou udevsistemas baseados, isso é um pouco diferente.

Parece udevque ainda tentará montar os sistemas de arquivos NFS e netfsé uma rede de segurança para quando isso falhar.

Por favor me corrija se eu estiver errado. De qualquer forma, essa resposta é relevante apenas para alguns sistemas legados recentes (Ubuntu 14.04 LTS, RHEL6).

Quattro
fonte