Eu tenho o Linux (Debian Jessie) instalado em um disco rígido. Drive - sda1
, ext4fs e sda2
- swap
Eu tenho uma /chroot
pasta Há outro sistema instalado, na /chroot
pasta
Questão:
Como saber ao gerenciador de inicialização, para inicializar não o sistema principal (principal, Debian Jessie), mas o sistema em / chroot ? Provavelmente, mudar /menu.lst
e /chroot/etc/fstab
? ( vmlinuz root=/dev/sda1/chroot
?)
Ou outra variante de questão: é possível ter o linux instalado não no diretório raiz da partição, mas na pasta? ( /another_linux/bin
, /another_linux/home
, /another_linux/etc
, ...)
vmlinuz root=/dev/sda1/chroot
não vai funcionar. Provavelmente, poderia-se simular isso com um método semelhante ao utilizadoinitrd
. Veja, por exemplo, aqui . Você monta/new_root
como descrito lá, em vez decd /new_root
fazercd /new_root/chroot
e continuar.Respostas:
Isso não pode ser feito pelo gerenciador de inicialização ou pelo kernel. O parâmetro para a
root
opção do kernel , como em, seroot=/dev/sda1
parece com um nome de caminho padrão do Unix, mas esses nomes de caminho são interpretados de acordo com o sistema de arquivos atualmente montado. No momento em que aroot
opção é interpretada, não há sistemas de arquivos montados. Bem, quase nenhum. No momento da inicialização do kernel, há uma instância de umramfs
sistema de arquivos mínimo chamadorootfs
montado como raiz do processo inicial em execuçãostart_kernel()
. A interpretação real doroot
parâmetro option é feita em uma rotina chamadaname_to_dev_t()
. Uma das sintaxes suportadas é o/dev/name
formato, em que o nome é interpretado fazendo uma montagem temporária dosysfs
sistema de arquivos no diretóriorootfs
raiz e procurando uma entrada de dispositivo de bloco que corresponda ao nome em/sys/block
. Este processo é explicado em mais detalhes aqui .A configuração conforme descrita precisaria ser feita inicializando primeiro em um ambiente mínimo, como o fornecido por um
initrd
, monte o sistema de arquivos raiz real a partir de/dev/sda1
um ponto de montagem temporário, por exemplo/mnt/rootfs
, altere o diretório raiz para/mnt/rootfs/chroot
usopivot_root(8)
.Isso é semelhante à forma como os sistemas de arquivos raiz para LinuX Containers ( LXC ) são configurados. O LXC é uma implementação de virtualização no nível do sistema operacional para Linux. A virtualização no nível do sistema operacional é comumente usada em ambientes de hospedagem virtual como uma alternativa leve à virtualização completa gerenciada por um hipervisor. Na virtualização no nível do sistema operacional, um único kernel do sistema operacional é compartilhado entre várias instâncias isoladas do espaço do usuário. Cada instância, geralmente chamada de contêiner, prisão, Servidor Virtual Privado (VPE) ou Ambiente Virtual (VE), é essencialmente uma instalação de sistema operacional separada, hospedada em um diretório próprio no sistema host.
fonte
Me deparei com o mesmo problema e acabei escrevendo isso para fazê-lo funcionar sem problemas em diferentes sistemas (debian, ubuntu atualmente):
Execute o
make_chroot_initrd
script para criar uma nova imagem initrd ativada para chroot a partir da imagem existente:A nova imagem será exatamente a mesma, exceto que agora pode lidar com um
chroot=
parâmetro de inicialização.Com o grub2 como carregador de inicialização, você pode adicionar uma entrada para
/boot/grub/grub.cfg
:(ou talvez melhor
/etc/grub.d/40_custom
)(mude os arquivos / partições para combinar com os seus)
Instalação em todo o sistema
Quando estiver satisfeito com isso, você poderá tornar as alterações permanentes
(até que o pacote initramfs-tools seja atualizado).
No sistema com chroot:
A partir de agora, a imagem regular do initrd suportará a inicialização chroot.
Não é necessário usar um initrd.chroot separado que pode ficar fora de sincronia com ele.
Veja boot_chroot para detalhes.
fonte
Sim, você pode executar o truque usando os subvolumes Btrfs .
Primeiro você precisa converter ext4 para btrfs, conforme descrito aqui .
Converta seu chroot em sub-volume, se ainda não estiver:
Agora você tem o subvolume chamado path / to / chroot . Você pode verificá-lo com
sudo btrfs subvol list /
Agora você pode criar a inicialização para subvolume o registro no grub. Basta adicionar
rootflags=subvol=path/to/chroot
à string de carregamento do kernel do linux no item de menu grub ou usar isso para sondar automaticamente.fonte