Infelizmente, não há nenhuma padronização em como as EFIs lidam com esse tipo de coisa, mas o comportamento que você descreve é bastante comum, na minha experiência. O problema é que as EFIs são muito "mais inteligentes" na identificação de dispositivos de inicialização do que as BIOS, e muitas EFIs removem entradas de inicialização inválidas quando são identificadas como tal. Assim, quando você desconectar uma unidade USB e iniciar o computador novamente, ele notará que há uma entrada de inicialização inválida para a unidade USB e a excluirá da lista de inicialização. Não conheço nenhuma solução in-EFI para esse tipo de problema.
Isso não quer dizer que não há soluções alternativas, no entanto. Especificamente, você pode instalar um gerenciador de inicialização EFI em seu disco interno que faça o que quiser - ou seja, inicializar o Windows quando a unidade flash USB não estiver conectada e inicializar o Ubuntu a partir da unidade USB quando estiver conectado. Em seguida, deixe este gerenciador de inicialização definido como o programa de inicialização padrão.
Infelizmente, o GRUB do AFAIK Ubuntu não pode ser configurado dessa forma, então você precisa procurar em outro lugar. A regra que você quer seguir é simples o suficiente para que um programa realmente simples possa ser escrito para fazer o trabalho, mas o que eu sei pode fazer é muito mais complexo: o gerenciador de inicialização do rEFInd. Eu recomendo que você tente instalá-lo e configurá-lo da seguinte maneira:
- Inicialize no Ubuntu.
- Verifique se o que (se houver) está montado em
/boot/efi
. (Digitardf -h
permitirá que você veja as partições atualmente montadas.) - Se
/boot/efi
corresponder a uma partição na unidade USB, desmonte-a e monte a partição do sistema EFI (ESP) do seu disco rígido. (Como observado no link, o ESP é uma partição FAT com um código de tipo específico. Talvez seja necessário rastreá-lo comgdisk
,parted
ou GParted.) - Instale o pacote Debian rEFInd na página de downloads do rEFInd. Não instale o PPA; instale o pacote Debian (ou use o arquivo
.zip
e executerefind-install
manualmente). - Edite
/boot/efi/EFI/refind/refind.conf
e faça as seguintes alterações:- Opcionalmente, defina
timeout -1
. Se isso estiver definido, o menu rEFInd não aparecerá, a menos que você mantenha pressionada uma tecla enquanto o rEFInd inicia. Você pode querer adiar a configuração até que você tenha testado a instalação. - Defina
default_selection "vmlinuz,Microsoft"
. Isso faz com que o rEFInd inicialize o Linux se encontrar um kernel Linux e Windows se o kernel do Linux não estiver presente - isto é, se a unidade USB do Linux estiver desconectada. A substituição devmlinuz
porgrub
também deve funcionar e vale a pena tentar sevmlinuz
não funcionar.
- Opcionalmente, defina
- Reinicialize e teste o sistema.
Se você tentar sem definir o valor timeout
, deverá ver o menu rEFInd e destacar a opção Windows (que pode ser a única opção) se a unidade USB estiver desconectada; mas a opção do Ubuntu deve ser destacada por padrão se a unidade USB estiver conectada. Se isso funcionar, definir timeout -1
causará uma inicialização direta no sistema operacional desejado.
Se o rEFInd não detectar a instalação do Ubuntu com a unidade USB conectada, tente pressionar Esc. Se uma opção do Ubuntu aparecer, tente definir scan_delay 1
(ou possivelmente algum valor mais alto).
O maior problema com o uso do rEFInd é que haverá um atraso quando ele for inicializado, varrer os sistemas operacionais e assim por diante. Isso deve levar apenas um ou dois segundos quando a unidade USB não estiver conectada e talvez outros dois ou três segundos quando a unidade USB estiver conectada. Um gerenciador de inicialização mais especializado para lidar com essa tarefa específica pode ser capaz de fazer o trabalho com menos de um atraso, mas eu não sei de qualquer programa desse tipo.