Como sobrescrever arquivos residentes no ESP na inicialização do Linux

5

Eu tenho um sistema de inicialização dupla de 64 bits executando o Windows 7 e o Linux Mint 17 Cinnamon. Eu uso o rEFInd para escolher graficamente qual sistema inicializar.

Um pouco sobre o rEFInd:

  • É um bootloader EFI.
  • Ele usa arquivos de configuração externos baseados em texto (* .conf)
  • Arquivos de configuração podem fazer referência a outros.  No entanto, em tempo de execução, apenas os arquivos externos  referenciados pelo primeiro arquivo ( refind.conf ), são honrados.
  • Propriedades específicas que são referenciadas  várias vezes são tratadas como uma cascata -  ou seja, cada referência substitui todas as anteriores  referências; apenas o último é honrado.

... Eu tenho alguns arquivos de configuração armazenados no meu disco efi. No (efi) tempo de inicialização, esses arquivos de configuração são carregados:

  • refind.conf - o arquivo padrão de configurações padronizadas. Este arquivo faz referência aos dois arquivos a seguir, em ordem.
  • settings.conf - um slate limpo e separado para minhas configurações favoritas. É referenciado pelo refind.conf. Qualquer configuração aqui irá sobrescrever o refind.conf.
  • auto_settings.conf - contém configurações tratadas dinamicamente por meios programáticos. Também é referenciado por refind.conf . Todas as configurações aqui substituirão refind.conf .

Além desses arquivos, eu também tenho alguns arquivos alternativos que são programaticamente trocados com auto_settings.conf :

  • auto_default.conf - quando o conteúdo desse arquivo está contido em auto_settings.conf , isso gera o estado padrão do meu sistema. Isso mostra um menu no momento da inicialização, o que me levou a escolher entre o Windows e o Linux. O sistema aguarda minha entrada.
  • auto_mint.conf - quando o conteúdo deste arquivo está contido dentro do refind.conf, o rEFInd pula o menu da GUI e segue diretamente para a inicialização do Linux Mint.
  • auto_win7.conf - quando o conteúdo deste arquivo está contido dentro do refind.conf, o rEFInd pula as janelas GUI e de inicialização.

Isso é tudo (eu acho) que você precisa saber sobre o rEFInd para resolver esse problema.

Em seguida, o sistema:

Quando eu inicializo meu sistema, ele me pergunta qual sistema operacional carregar. Digamos que eu escolha janelas.

Ele inicializa o Windows.

Então, eu quero entrar no Linux.

Eu posso clicar com o botão direito na minha área de trabalho e clicar em "Boot to Linux".

Usando o registro, criei uma entrada no menu de contexto da área de trabalho que aciona um arquivo em lote personalizado. Essa entrada do registro, ao chamar o arquivo em lotes, também passa argumentos específicos para o arquivo em lotes que determina sua função em tempo de execução.

Então, neste momento, meu arquivo de lote (carinhosamente chamado bootfacilitator.bat ) está fazendo seu trabalho maravilhosamente. Na partição EFI, meu arquivo de lote substitui o conteúdo de auto_default.conf pelo conteúdo de auto_mint.conf . Se essa operação for bem-sucedida, então ela reinicia o sistema.

Additionally, upon booting windows, bootfacilitator was also called
transparently, that time for the function of replacing the contents of auto_settings.conf with the contents of auto_default.conf.

O sistema é desligado e inicializa no rEFInd, que ignora a GUI e inicializa o Linux.

Eu preciso de Linux para substituir o conteúdo de auto_settings.conf pelo conteúdo de auto_default.conf , ou estou preso em um cenário de inicialização somente do Linux. Eu não gosto. Tudo o que tenho que fazer é substituir o conteúdo de um arquivo na inicialização.

Eu tenho um script ( bootfacilitator.sh ) contido em /mnt/data/Backup/Software/Linux .

No linux, bootfacilitator.sh deve substituir o conteúdo de /mnt/efi/EFI/boot/auto_settings.conf pelo conteúdo de /mnt/efi/EFI/boot/auto_default.conf .

Além disso, tenho outros objetivos para este projeto. Eu também gostaria de ter duas entradas de menu de contexto no meu desktop linux para espelhar as entradas no menu de contexto no meu desktop do Windows: "Boot to Windows" e "Reboot Linux".

O resultado final disso é ter um fluxo de trabalho fluido de um sistema operacional para outro, com a escalabilidade para incorporar sistemas operacionais adicionais.

PS my fstab:

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/dev/sda1   /mnt/efi    vfat    defaults    0   0
UUID=f9750eee-576b-46b2-a0a1-f6ad34f4d526 /               ext4    errors=remount-ro 0       1
UUID=1f49ddc3-88d1-40e6-b706-7623a4fb47ac none            swap    sw              0       0
/dev/sda4   /mnt/osx    hfsplus defaults    0   0
/dev/sda3   /mnt/win_7  ntfs    defaults    0   0
/dev/sda5   /mnt/data   ntfs    defaults    0   0
/mnt/data/Videos    /home/rich/Videos   none    bind    0   0
/mnt/data/Documents /home/rich/Documents    none    bind    0   0
/mnt/data/Music /home/rich/Music    none    bind    0   0
/mnt/data/Pictures  /home/rich/Pictures none    bind    0   0
/mnt/data/Downloads /home/rich/Downloads    none    bind    0   0
/mnt/data/Public    /home/rich/Public   none    bind    0   0

bootfacilitator.sh :

#!/bin/sh 
#description: Re-Enables EFI multi-select boot menu (in case of forced selection scenario) 
sudo cp /mnt/efi/EFI/Boot/auto_default.conf /mnt/efi/EFI/Boot/auto_settings.conf
    
por Richard LeClair 04.01.2015 / 22:03

1 resposta

0

Algumas maneiras de conseguir isso:

  • Crie um arquivo .desktop em ~/.config/autostart/ . Isso será executado quando você efetuar login. Usa algo como sudo cp input.txt output.txt como o comando.
  • Uma solução mais robusta seria criar um job Upstart, que será executado quando o sistema for inicializado.
por 01.02.2015 / 15:40