Sim, desde que o kernel em execução seja capaz de executar os binários a partir da distribuição montada.
Isso requer que a distribuição montada seja para a arquitetura do processador em execução ou para uma arquitetura compatível. Você não será capaz de executar binários ARM em um processador x86, por exemplo. Compatibilidade depende da CPU; por exemplo, em x86 / amd64, os binários de 64 bits são executados apenas em CPUs de 64 bits, enquanto os binários de 32 bits são executados em CPUs de 32 e 64 bits. Compatibilidade também depende do sistema operacional; por exemplo, em CPUs x86_64, o Solaris pode executar programas indiferentemente de 64 bits e 32 bits em kernels de 32 e 64 bits; Os kernels Linux de 64 bits podem rodar programas de 32 bits, mas não vice-versa; enquanto os kernels de 64 bits do OpenBSD não podem rodar programas de 32 bits.
Os executáveis vinculados estaticamente serão executados sem esforço, desde que não estejam procurando arquivos em locais fixos. Os executáveis vinculados dinamicamente podem não funcionar se a distribuição montada tiver uma versão mais recente da biblioteca C ou estiver usando uma biblioteca C diferente (por exemplo, uClibc vs. Glibc) ou estiver usando uma arquitetura diferente para a qual o host não tenha suporte (por exemplo, i386 vs amd64, armhf vs armel).
Às vezes, para fazer com que os executáveis vinculados dinamicamente funcionem, você precisará chamar o vinculador dinâmico explicitamente e colocar os diretórios de biblioteca do sistema montado primeiro no caminho de pesquisa da biblioteca.
LD_LIBRARY_PATH=/mnt/lib:/mnt/usr/lib /mnt/lib/ld-linux.so.2 /mnt/bin/foo
Uma maneira fácil de garantir que o programa do sistema montado localizará tudo o que precisa no local correto (carregador, bibliotecas, arquivos de configuração, arquivos de dados, etc.) é executá-lo em um chroot . Um chroot restringe a visão do sistema de arquivos para um único diretório e seus subdiretórios. Apenas root pode chamar o comando chroot
.
chroot /mnt /bin/foo
Como o programa está sendo executado com /mnt
como seu diretório raiz, ele não verá nada fora dessa hierarquia: não /home
(ou melhor, o de /mnt
), não /proc
, apenas o padrão estático para /dev
, etc. Os sistemas de arquivos especiais, como /proc
, podem ser montados no chroot, a partir do exterior ( mount -t proc proc /mnt/proc
) ou do interior ( mount -t proc proc /proc
). No Linux, os diretórios podem ser montados novamente em um segundo local (permanecendo onde quer que estejam) com mount --bind
ou com mount --rbind
para também replicar sistemas de arquivos montados sob o diretório especificado.
mount --rbind /dev /mnt/dev
mount --bind /home /mnt/home
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
chroot /mnt /bin/foo
O Debian e algumas outras distribuições fornecem uma ferramenta chamada schroot para automatizar tais montagens e executar outras gentilezas. É um exagero para uma coisa única, mas conveniente se você quiser mantém distribuições múltiplas .