Qual é a maneira correta de preparar o chroot para recuperar uma instalação do Linux quebrada?

43

Esta pergunta refere-se a perguntas que são feitas frequentemente. O procedimento é freqüentemente mencionado ou vinculado a locais externos, mas nem sempre é indicado de forma clara e correta. Em um objetivo de concentrar informações úteis em um único lugar, esta questão procura fornecer uma referência clara e correta para este procedimento.

Quais são os passos apropriados para preparar um ambiente chroot para um procedimento de recuperação?

Em muitos situações , reparar uma instalação do Linux interrompida é melhor feito dentro da instalação. Mas se o sistema não inicializar, como você o corrige de dentro?

Vamos supor que você consiga inicializar em um sistema alternativo. Uma vez lá, você precisa acessar sua instalação quebrada para consertá-la. Muitos recuperação How-Tos recomendamos o uso de chroot para executar programas como se você fosse realmente inicializado na instalação quebrada.

  • Qual é o procedimento básico?
  • Existem práticas recomendadas aceitas?
  • Quais variáveis precisam ser consideradas para adaptar as etapas básicas de preparação a uma tarefa de recuperação específica?

Como este é o Community Wiki, sinta-se à vontade para editar esta questão para melhorá-lo também.

    
por quack quixote 08.04.2017 / 12:57

1 resposta

64

Aqui estão alguns recursos:

"Alterar raiz" ou "chrooting" é um método para ampliar parte do seu sistema de arquivos, para que, por exemplo, /path se refira ao que anteriormente estava acessível em /mnt/path . A "raiz" na expressão "chroot" refere-se ao sistema de arquivos raiz / , não ao usuário root. (Normalmente, você precisará de privilégios de usuário root para fazer chroot.)

Preparação

  • Todas as etapas deste guia precisarão ser executadas como usuário root.

  • Supomos que seu disco rígido esteja em / dev / sda1 e seu tipo de arquivo seja ext3. Se você não souber o local e o tipo de arquivo do seu disco, leia o saída de fdisk -l .

  • Certifique-se de que as arquiteturas do sistema em que você inicializou (por exemplo, 32bit LiveCD) eo sistema que você deseja inserir (por exemplo, é um instalação no seu disco rígido). Você pode determinar o arquitetura que você inicializou usando uname -m .

  • Certifique-se de que os módulos do kernel necessários foram carregados.

  • Configure sua rede se você precisar dela (por exemplo, para instalar pacotes atualizados).

  • Inicialize sua partição de troca, se necessário (por exemplo, swapon /dev/sda3 ).

Executando o chroot

cd /
mount -t ext3 /dev/sda1 /mnt
mount -t proc proc /mnt/proc
mount -t sysfs sys /mnt/sys
mount -o bind /dev /mnt/dev

Se o seu diretório /boot estiver em uma partição diferente do seu / e você quiser manipular os arquivos nele (por exemplo, se você estiver trabalhando com o GRUB, executando uma atualização do kernel, etc.), Também precisará montar essa partição. Se estiver em / dev / sda2 e seu tipo de arquivo for ext2, faça:

mount -t ext2 /dev/sda2 /mnt/boot

Da mesma forma, para qualquer outra parte do sistema de arquivos ( /var , /usr ) que resida em partições separadas, mas que você precisa acessar. Geralmente quando você está fazendo chrooting para consertar algo, você não precisa acessar / home, então você não precisa se preocupar com isso.

(Também é possível montar sistemas de arquivos depois de ter chrootado, mas é mais inteligente fazê-lo de antemão. O motivo é que quando você o faz depois, o ambiente externo / kernel não saberá sobre os sistemas de arquivos montados, portanto você se esquece de desmontá-los antes de sair do chroot, o sistema também não saberá desmontá-los quando eles forem desligados. Isso pode danificar esses sistemas de arquivos.)

Se você configurou sua rede e deseja usá-la no sistema chrooted, copie /etc/resolv.conf para poder resolver nomes de domínio:

cp -L /etc/resolv.conf /mnt/etc/resolv.conf

Agora você está pronto para migrar para o sistema de arquivos montado:

chroot /mnt /bin/bash

(Se isso retornar um erro chroot: cannot run command '/bin/bash': Exec format error , isso geralmente indica que você inicializou com uma arquitetura (por exemplo, x86_32) e está tentando fazer chroot em outro (por exemplo, x86_64). A solução é usar um LiveCD que tenha a mesma arquitetura como o sistema que você quer chroot.)

Neste ponto, você ainda está executando o kernel com o qual iniciou, mas todos os caminhos /path se referem ao que costumava ser /mnt/path .

Se você estiver fazendo algo com o GRUB, será necessário ter certeza de que o arquivo /etc/mtab está atualizado:

grep -v rootfs /proc/mounts > /etc/mtab

Também pode ser útil fazer isso agora:

source /etc/profile
export PS1="(chroot) $PS1"  # add a reminder to your prompt

Faça o seu trabalho sujo

Neste momento, você pode realizar qualquer solução de problemas que você precise fazer:

  • resintall o GRUB no MBR do seu disco
  • redefinir uma senha esquecida
  • executar uma atualização do kernel (ou downgrade)
  • reconstrua seu initramdisk
  • corrija seu / etc / fstab
  • reinstale pacotes usando seu gerenciador de pacotes
  • qualquer que seja

Limpar

Quando terminar, verifique se todos os programas em execução foram interrompidos. Então saia do chroot:

exit

Agora desmonte todas as partições que você montou:

umount /mnt/boot # if you mounted this or any other separate partitions
umount /mnt/{proc,sys,dev}

Finalmente, tente desmontar seu disco rígido:

umount /mnt

Se você receber um erro dizendo que / mnt (ou qualquer outra partição) está ocupado, isso pode significar uma de duas coisas:

  • Um programa foi deixado rodando dentro do chroot.

  • Ou com mais frequência: ainda existe um ponto de montagem nessa montagem. Por exemplo, / mnt / usr ainda está montado ao tentar desmontar / mnt.

No último caso, simplesmente desmonte o ponto de montagem ofensivo primeiro. Para obter um lembrete de todos os pontos de montagem atuais, execute mount sem parâmetros.

Finalmente:

reboot
    
por 20.01.2015 / 08:02