Aqui estão alguns recursos:
"Alterar raiz" ou "chrooting" é um método para ampliar parte de seu sistema de arquivos, de modo que, por exemplo, /path
se refira ao que era anteriormente acessível em /mnt/path
. A "raiz" na expressão "chroot" refere-se ao sistema de arquivos raiz /
, não ao usuário raiz. (Embora normalmente você precise de privilégios de usuário root para fazer chroot.)
Preparação
Todas as etapas deste guia deverã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 a saída de fdisk -l
.
Certifique-se de que as arquiteturas do sistema no qual você inicializou (por exemplo, é um LiveCD de 32 bits) e o sistema que você deseja acessar (por exemplo, é uma instalação de 32 bits no disco rígido) coincidem. Você pode determinar a arquitetura inicializada usando uname -m
.
Verifique se todos os módulos do kernel que você precisa foram carregados.
Configure sua rede, se necessário (por exemplo, para instalar pacotes atualizados).
Inicialize sua partição swap, 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 /boot
diretório estiver em uma partição diferente da sua /
e você quiser manipular arquivos nele (por exemplo, se você estiver trabalhando com o GRUB, executando uma atualização do kernel, etc.), também será necessário 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 quaisquer outras partes do seu sistema de arquivos ( /var
, /usr
) que residem em partições separadas, mas às quais você precisa acessar. Geralmente, quando você está fazendo um chroot para corrigir algo que não precisa acessar / home, não precisa se preocupar com isso.
(Também é possível montar sistemas de arquivos depois de executar o chroot, mas é mais inteligente fazê-lo antes. O motivo é que, quando você faz isso depois, o ambiente externo / do kernel não sabe sobre os sistemas de arquivos montados, por isso, se você esquecer de desmontá-los antes de sair do chroot, o sistema também não saberá desmontá-los quando desligar. Isso pode danificar esses sistemas de arquivos.)
Se você configurou sua rede e deseja usá-la no sistema com chroot, copie-o /etc/resolv.conf
para poder resolver nomes de domínio:
cp -L /etc/resolv.conf /mnt/etc/resolv.conf
Agora você está pronto para mudar 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 executar o chroot em outra (por exemplo, x86_64). A solução é usar um LiveCD que tenha a mesma arquitetura do sistema que você deseja. chroot em.)
Neste ponto, você ainda está executando o kernel com o qual inicializou, mas todos os caminhos /path
se referem ao que costumava ser /mnt/path
.
Se você estiver fazendo alguma coisa com o GRUB, precisará garantir que seu /etc/mtab
arquivo esteja atualizado:
grep -v rootfs /proc/mounts > /etc/mtab
Também pode ser útil neste momento:
source /etc/profile
export PS1="(chroot) $PS1" # add a reminder to your prompt
Faça seu trabalho sujo
Neste ponto, você pode executar qualquer solução de problemas que precisar fazer:
- reinstalar 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
- reinstalar pacotes usando seu gerenciador de pacotes
- tanto faz
Limpando
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}
Por fim, tente desmontar o disco rígido:
umount /mnt
Se você receber um erro dizendo que / mnt (ou qualquer outra partição) está ocupado, isso pode significar uma das duas coisas:
Um programa foi deixado em execução 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.
Neste último caso, simplesmente desmonte o ponto de montagem incorreto primeiro. Para obter um lembrete de todos os pontos de montagem atuais, execute mount
sem parâmetros.
Finalmente:
reboot
chroot.sh
na raiz de todos os sistemas que uso, cujo conteúdo corresponde mais ou menos ao acima. Quando preciso fazer chroot nesse sistema a partir de um LiveCD ou algo assim, basta montar o sistema de arquivos raiz e executar o script chroot. Não há mais buscas frenéticas pelos comandos certos.SHELL=/bin/bash chroot /mnt
se o SHELL padrão do livecd não estiver no ambiente chroot (o defalut zsh do systemrescuecd é um exemplo) para corrigir, por exemplo,!
no Vim./run
esses dias commount --bind /run /mnt/run
.