Documentação
Como: Chroot em um sistema quebrado via vivo CD/ISO ou sistema Linux alternativo
Ocasionalmente, você pode precisar resgatar um servidor TurnKey quebrado/desiniciado. Talvez você tenha tido uma falha de hardware, ou talvez você tenha quebrado algo inadvertidamente, ou talvez você tenha instalado uma atualização de buggy que quebrou coisas?
Muitas vezes, estes problemas podem ser corrigidos por "enraizamento" no sistema quebrado de um sistema funcional (Linux), em seguida, tomando as medidas necessárias para resolver o problema (reinstalar grub, reinstalar um kernel, reconstruir um initramfs, etc.). Obviamente, os passos para corrigir um sistema quebrado dependerá do que realmente tenha quebrado. Se você não tem certeza, então você provavelmente é melhor para começar um novo tópico no fóruns (necessita de conta de usuário do site gratuito para iniciar novo thread) para que possamos ajudar a diagnosticar o problema.
Neste documento, eu vou apenas aconselhar até o ponto em que você entra no chroot, e não vai entrar nos detalhes de como resolver qualquer problema específico (embora, se / quando eu tenho um chance, talvez eu vou escrever páginas de documentos para alguns dos problemas mais comuns?!).
Nota: Este guia assume que você está logado com a conta de usuário root. Caso contrário, a maioria (se não todos) dos comandos executados fora do chroot pode precisar ser prefaced por 'sudo'. Se você entrar no chroot via sudo, então ele não deve ser necessário uma vez dentro do chroot.
Então primeiro, um pouco de fundo. Se você preferir pular direto para a configurar o chrootPor favor, sinta-se livre.
O que é um "croot"
Segundo a Wikipédia, a chroot:
muda o diretório raiz aparente para o processo atual de execução e seus filhos. Um programa que é executado em um ambiente modificado não pode nomear (e, portanto, normalmente não pode acessar) arquivos fora da árvore de diretórios designada.
Como um usuário Linux, existem 2 tipos de chroot que você pode encontrar. O que eu chamo de chroot "padrão" (o que esta página de doc cobre), então há também uma "cadeia de chroot".
O propósito de uma cadeia chroot para bloquear um usuário ou processo dentro de uma determinada parte de uma árvore de diretórios. Por exemplo. um programa pode ser "chooted" em seu próprio diretório (Postfix é configurado como este, por exemplo), sem acesso ao resto do sistema de arquivos. Ou um usuário limitado pode ser "enraizado" em seu diretório home, então eles podem usar (por exemplo) SFTP, mas não podem navegar por todo o sistema de arquivos.
Um chroot "padrão" pode ser usado para investigar e possivelmente reparar um sistema não inicializável. Ele também é comumente usado para construir novos sistemas Linux. Por exemplo, o TurnKey usa um chroot "standard" (on TKLDev) para construir o TurnKey appliances. Esse é o tipo de chroot que eu vou documentar aqui.
Configurar um chroot
Preparação
A primeira coisa a fazer é garantir que o sistema de arquivos do sistema quebrado seja acessível a partir do sistema de trabalho. No caso de uma instalação de metal nu ou uma VM, a maneira mais fácil de fazer isso é, muitas vezes, apenas arrancar a partir de um Live CD/USB/ISO. Como regra geral, geralmente é melhor usar o mesmo sistema operacional que o sistema quebrado. No caso de TurnKey, você pode usar Principal (ou qualquer outro servidor; apenas Core é o menor) da mesma versão principal. Por exemplo v15.0 Core é bom de usar para corrigir qualquer v15.x appliance. Se isso não é uma opção, um sistema Debian Live também é uma boa opção. No pior cenário, você pode se safar com qualquer distro Linux relativamente recente, embora TurnKey (ou Debian) de uma versão correspondente seja preferível.
O que quer que faças DO NOT instalar sobre o topo do seu sistema quebrado! Isso vai torná-lo irrecuperável!
Alternativamente, você pode mover o disco (físico ou virtual) para outra máquina (trabalhando) (com TurnKey/Debian/etc como acima rodando). Para um servidor AWS que é também essencialmente o que você vai precisar fazer (ou seja, desanexar o volume primário do sistema quebrado e religar para um sistema de trabalho).
Encontrando o volume certo para montar
Depois de ter anexado o volume primário quebrado a um sistema de trabalho, o próximo passo é montá-lo. Para montá-lo, você precisará garantir que você tenha um local de montagem limpo e você também precisará descobrir qual disco/volume/partição você precisa montar.
Uma maneira fácil de garantir que você tem um local de montagem limpo para usar, é criá-lo! Então algo como isto:
mkdir /rescue
Garantir que você encontre a unidade correta/volume/partição(s) pode ser um pouco mais complicado, mas uma ferramenta que você pode usar é fdisk. Para ver todos os volumes anexados, execute:
fdisk -l
Aqui está a saída num servidor AWS em que estou a trabalhar. Tem uma unidade secundária (o volume raiz de outro servidor) anexada como /dev/xvdf, o volume raiz por omissão (i.e. o volume raiz do servidor de trabalho) é /dev/xvda. Que pode ser diferente para você (embora se você estiver no AWS é provavelmente o mesmo). Aqui está a saída completa:
root@core ~# fdisk -l Disk /dev/xvda: 10 GiB, 10737418240 bytes, 20971520 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: 6183BC26-31B1-41F2-9AB9-319B7C4A85B0 Device Start End Sectors Size Type /dev/xvda1 2048 6143 4096 2M BIOS boot /dev/xvda2 6144 20969471 20963328 10G Linux filesystem Disk /dev/xvdf: 10 GiB, 10737418240 bytes, 20971520 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: 0029AB38-4BE5-4009-B163-9A7B4F597FE4 Device Start End Sectors Size Type /dev/xvdf1 2048 6143 4096 2M BIOS boot /dev/xvdf2 6144 20969471 20963328 10G Linux filesystem
Se você não tiver certeza de qual volume é o único, verifique quais volumes já estão montados. Faça isso assim:
mount | grep ^/dev
Isso irá verificar todas as linhas da saída de montagem que começam com /dev. No meu caso, isso confirma o que eu já sei, o voome que eu já montei é /dev/xvda:
root@core ~# mount | grep ^/dev /dev/xvda2 on / type ext4 (rw,relatime,data=ordered) /dev/xvda2 on /tmp type ext4 (rw,relatime,data=ordered) /dev/xvda2 on /var/cache/tklbam type ext4 (rw,relatime,data=ordered)
Montando o sistema quebrado pronto para chroot
Assim que você tiver trabalhado para fora que partição você precisará montá-la. Isso é muito simples. No meu caso, a partição que eu preciso montar é /dev/xvdf2 (i.e. a segunda partição em /dev/xvf). Se você olhar acima, para a minha saída de fdisk, você verá que /dev/xvdf1 é tipo "BIOS boot" e /dev/xvdf2 é "Linux filesystem". Montar isso é tão fácil como isto:
mount /dev/xvdf2 /rescue
Se você agora verificar /rescue (ou seja, é /rescue), você deve ver algo como isto:
root@core ~# ls -l /rescue total 92 drwxr-xr-x 2 root root 4096 Apr 16 02:49 bin drwxr-xr-x 3 root root 4096 Apr 16 02:50 boot drwxr-xr-x 5 root root 4096 Oct 3 2018 dev drwxr-xr-x 100 root root 4096 Apr 16 02:50 etc drwxr-xr-x 3 root root 4096 Oct 3 2018 home lrwxrwxrwx 1 root root 29 Oct 3 2018 initrd.img -> boot/initrd.img-4.9.0-8-amd64 lrwxrwxrwx 1 root root 29 Oct 3 2018 initrd.img.old -> boot/initrd.img-4.9.0-8-amd64 drwxr-xr-x 18 root root 4096 Oct 3 2018 lib drwxr-xr-x 2 root root 4096 Mar 11 2018 lib64 drwx------ 2 root root 16384 Oct 3 2018 lost+found drwxr-xr-x 2 root root 4096 Mar 11 2018 media drwxr-xr-x 4 root root 4096 Apr 16 02:49 mnt drwxr-xr-x 2 root root 4096 Mar 11 2018 opt drwxr-xr-x 2 root root 4096 Feb 23 2018 proc drwx------ 5 root root 4096 Oct 3 2018 root drwxr-xr-x 12 root root 4096 Oct 3 2018 run drwxr-xr-x 2 root root 4096 Apr 16 02:49 sbin drwxr-xr-x 2 root root 4096 Mar 11 2018 srv drwxr-xr-x 2 root root 4096 Feb 12 2017 sys drwxrwxrwt 7 root root 4096 Apr 16 02:51 tmp drwxr-xr-x 10 root root 4096 Mar 11 2018 usr drwxr-xr-x 13 root root 4096 Oct 3 2018 var lrwxrwxrwx 1 root root 26 Oct 3 2018 vmlinuz -> boot/vmlinuz-4.9.0-8-amd64 lrwxrwxrwx 1 root root 26 Oct 3 2018 vmlinuz.old -> boot/vmlinuz-4.9.0-8-amd64
Obviamente as datas serão diferentes, mas de outra forma, que mostra que o sistema está montado como esperado. Todas as construções atuais do TurnKey incluem a partição /boot, embora em algumas versões mais antigas, se a instalação usada LVM, então a partição /boot pode precisar ser montada separadamente. Nesse caso, depois que o SO principal for montado, monte o diretório de inicialização. Ou seja, algo como isto (ajustar para o apto):
mount /dev/sdXN /rescue/boot
Onde /dev/sdXN é a partição onde a informação de inicialização reside.
Mas espere há mais...! Uma vez que o SO principal foi montado, você também precisa montar alguns diretórios especiais da máquina para que o chroot funcione corretamente. Principalmente estes são /dev, /proc e /sys. /dev/pts também vale a pena montar também. Na minha experiência, você pode fugir sem montar isso, mas você muitas vezes vai ter erros, então vale a pena montar isso para reduzir o ruído.
mount -t proc proc /rescue/proc mount -t sysfs sys /rescue/sys mount -o bind /dev /rescue/dev mount -t devpts pts /rescue/dev/pts
A enraizar
Agora você precisa simplesmente de chroot dentro.
chroot /rescue
Simples assim...!
Agora faça o que for preciso para corrigir o seu sistema. Assim que estiver feliz (ou pronto para testar) então poderá sair do chroot assim:
exit
A limpar depois.
Se você precisa parar o servidor para remover a unidade quebrada, então não é necessário limpar. Todos os componentes devem ser desmontados automaticamente como parte do processo de desligamento. Se você não precisar parar o servidor, reiniciar é a maneira mais fácil de limpar o chroot. No entanto, se você não parar o servidor que você está usando, ou por alguma outra razão gostaria de desfazer a configuração chroot, então depois que você saiu do chroot, você só precisa backtrack nos comandos acima. Ou seja, usar o umount em vez de montar, e desmontá- los na ordem inversa que foram montados. ou seja:
umount /rescue/dev/pts umount /rescue/dev umount /rescue/sys umount /rescue/proc
Se você montou uma partição de inicialização separada, desmonte isso em seguida. Ou seja, 'umount /rescue/boot'. Então, finalmente, o volume principal:
umount /rescue