Monte uma unidade externa no momento da inicialização apenas se estiver conectada

70

Eu tenho uma entrada para um disco rígido externo no meu fstab:

UUID="680C0FE30C0FAAE0" /jgdata ntfs noatime,rw

Mas às vezes essa unidade não está conectada no momento da inicialização. Isso me deixa no meio da inicialização, com um prompt para "Continuar aguardando, pressione S ou pressione M", mas nenhuma tecla pressionada tem qualquer efeito nesse estágio (incluindo Ctrl- Alt- Delete, nem mesmo caps lock).

Antes de escrever um script para verificar a saída fdisk -l, como posso montar esta unidade no momento da inicialização apenas se ela estiver presente? Seria útil ter uma entrada fdisk para esta unidade, para que eu possa digitar em mount /jgdatavez de precisar de um nome de dispositivo.

Jeremy
fonte

Respostas:

73

Você está no caminho certo. Eu encontrei uma maneira que é um pouco mais limpa e melhor.

A opção correta para adicionar fstabé nofail, no entanto, ela precisa vir depois auto. Se você mudar para noauto, ele nunca será montado durante a inicialização. Se você adicionar nobootwaitao carregador de inicialização, poderá perder algo sério, como montar a partição antes de fsckconcluir a verificação ou não montar uma partição usada no processo de inicialização.

Após fazer as alterações acima, o sistema iniciará normalmente (e aumentará o volume) se o dispositivo estiver conectado enquanto o sistema estiver desligado. Também será inicializado normalmente se o dispositivo não estiver presente no momento da inicialização.

O único inconveniente é que, se você conectar o dispositivo enquanto o sistema estiver em execução, dependendo da configuração (muitas variáveis ​​a serem testadas), o dispositivo poderá não ser montado imediatamente. Isso pode ser remediado com uma simples mount -aou mount /specific_deviceou uma reinicialização.

Bryan Gonzalez
fonte
2
Todos os exemplos que posso encontrar nos programas on-line antes do auto. Existe alguma documentação para a ordem correta?
Hackeron
'man fstab' não fornece a precisão de uma ordem necessária (verificada no centos 7 e no Ubuntu 14.04). No entanto, ele diz "nofail não relata erros para este dispositivo se ele não existir". Gostaria de saber se isso ajudará a não esperar o tempo limite na inicialização se o volume nfs não estiver acessível.
tisc0
16

Eu tive o mesmo problema - dei um passo extra

Se você usar a nofailopção /etc/fstab, o sistema procurará seu disco (e partição) no momento da inicialização. Se o dispositivo estiver conectado, o sistema de arquivos será montado. Caso contrário, a inicialização continuará normalmente.

Veja o wiki do arco: https://wiki.archlinux.org/index.php/Fstab

Exemplo

UUID=XXXXXXXXXXXXXXX    /myhdd ntfs  auto,nofail,noatime,rw,user    0   0

Eu tentei inicializar o sistema com e sem o dispositivo conectado, e ele funciona bem.

O que não consegui é montar automaticamente quando o disco é conectado após a inicialização (quando não é conectado na inicialização). Eu devo usar mount -acomo root para montar tudo de novo.

user898384
fonte
13

a opção noauto permite que o processo de inicialização continue?

ele não monta automaticamente se presente, mas o torna conhecido se estiver presente, para que um mount / jgdata simples funcione ... então um mount / jdata com script não precisaria de uma verificação de saída, apenas pegue o erro e continue inicializando

edit: após algumas leituras, o bootwait provavelmente é uma opção mais correta a ser aprovada ... (geralmente usada para compartilhamentos de rede que podem não estar presentes até mais tarde no processo de inicialização, mas ainda podem causar um travamento, idk)

e o script de montagem pode ser adicionado da seguinte maneira: https://stackoverflow.com/questions/2062543/running-a-script-with-the-help-of-grub-and-menu-lst

RobotHumans
fonte
Obrigado pela resposta. Apenas para esclarecer, as opções devem ser adicionadas à linha fstab, correto? (EDIT: Nvm, pesquisei parece que nobootwait é o que eu preciso..)
Jeremy
11
Eu usei a opção nobootwait no fstab, funciona perfeitamente, obrigado.
Jeremy
5
/dev/xvdh1 /myfs xfs defaults,nofail,x-systemd.device-timeout=30 0 0

trabalhou para mim.

nofail ... Não relate erros neste dispositivo se ele não existir.
x-systemd.device-timeout = 30 ... A inicialização levará 30 segundos a mais se o dispositivo não existir (o padrão é 90 segundos).

Fonte: https://wiki.archlinux.org/index.php/fstab#External_devices

user313829
fonte
Esta é a melhor e mais simples resposta. Note-se que esta é a nova sintaxe para versões mais recentes do OS que usam systemd, substituindo o antigo nobootwaitsintaxe
cxrodgers
Isso funcionou para mim. Key estava adicionando o tempo limite do dispositivo; apenas usando nofail, a inicialização falharia devido ao tempo limite do udev. (provavelmente exclusivo para dispositivos USB)
BobHy
1

A maneira recomendada de montar durante a inicialização é instruir o sistema através do arquivo fstab . Olhando para o seu Ask, pude ver que você está quase lá, não possui apenas as instruções que configuram o dispositivo para usar as opções de montagem automática, permitindo que o sistema monte o dispositivo quando disponível.

Então, basta reescrever a linha no seu fstab para ficar como abaixo:

# <file system>           <dir>       <type>    <options>         <dump> <pass>
UUID="680C0FE30C0FAAE0"   /jgdata      ntfs      user,auto,rw       0     0

Após alterar e salvá-lo, tente montá-lo manualmente:

$ sudo mount -a

É importante observar que:

  1. você precisa ter certeza sobre o UUID do dispositivo. Os UUIDs são gerados pelos utilitários do sistema de arquivos make (mkfs. *) Quando você cria um sistema de arquivos.
  2. Essas <options>precisam ser escritas seguindo um formato muito específico, separado por vírgulas, mas sem espaços após cada vírgula. Tenha cuidado com isso ;-)
  3. Não tenho certeza se isso funcionará sem problemas, porque você está tentando montar automaticamente um sistema de arquivos NTFS, que pode ser manuseado usando os utilitários NTFS-3G . Embora minhas instruções devam funcionar corretamente, nunca tentei o NTFS de montagem automática antes. Portanto, se falhar, eu recomendo que você consulte esta seção Montando partições do Windows para usos alternativos do NTFS.

Obrigado!

crncosta
fonte
Eu acho que ele recebe mais do que você disse, mas está travando quando o disco não é detectado. É por isso que sugeriu uma solução para o "bom caminho"
RobotHumans
Obrigado pela resposta. Para sua informação, o sudo blkidcomando é uma boa maneira de descobrir UUIDs.
Jeremy
Eu apenas tentei essa linha exata no fstab. Quando o HDD está conectado, o sistema inicializa normalmente. Mas, durante a inicialização, quando o disco rígido externo não está conectado, ele ainda me pede para Aguardar / Ignorar / Recuperar manualmente. Como esse prompt não excede o tempo limite, se eu não estiver no terminal, a caixa não será inicializada se o disco rígido externo não estiver conectado.
Jeremy
Você precisa adicionar a opção nofail.
kkron
0

Eu tenho o mesmo problema. Estive editando o fstab para comentar a entrada quando sei que não vou ter a unidade presente na próxima vez que inicializar. Então, quando eu tenho a unidade presente, simplesmente edito o fstab para remover o comentário e emitir mount -a. Esta não é uma solução perfeita. Seria ótimo se eu descobrisse uma maneira de o sistema montar automaticamente a unidade, se presente, ou ignorá-la automaticamente, se não estiver presente. O mesmo problema ocorre se você tiver compartilhamentos NFS montados automaticamente e o servidor não estiver presente.


fonte
11
Confira a resposta que aceitei, basta adicionar nobootwait às opções de montagem no fstab.
Jeremy