Ir para o conteúdo
TURNKEYGNU / LINUX
AplicativosDocumentaçãoBlogCapturas de telaGitHubTurnKey Hub
文Português
EnglishEspañol中文日本語PortuguêsDeutsch
Principal/Como: Chroot em um sistema quebrado via vivo CD/ISO ou sistema Linux alternativo

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
TURNKEYGNU / LINUX

Controle sua infraestrutura sem começar do zero.

Explorar o TurnKey
SobreDocumentaçãoPerguntas frequentesBlogGitHub
Livre e de código abertoSeguro por padrãoPronto para implantar