Resposta curta - até onde eu sei, não há solução de trabalho pronta para suas necessidades específicas. Você terá que ajustar cada initramfs de cada distribuição para suportar suas necessidades específicas.
Resposta longa - sim, é possível. Atualmente, a maioria das distribuições Linux usa um initramfs que será carregado na memória pelo bootloader e depois descompactado pelo kernel. Lá, ele executará /sbin/init
, que é responsável por configurar o espaço de usuário inicial (executando o udev, carregando módulos, iniciando o plymouth, pedindo criptografia, configurando a rede para montagens de rede,… você escolhe). Como você pode executar seus próprios scripts e avaliar os parâmetros de inicialização personalizados.
Exemplo para o Debian
Se você estiver usando Debian (deve ser o mesmo com o Ubuntu) você deve ser capaz de colocar um script em /etc/initramfs-tools/scripts/init-bottom/
que será executado antes do init ser iniciado. Para mais informações sobre o script, os diferentes diretórios e o layout dão uma olhada em man initramfs-tools . Você terá que ajustar rootmnt
e adicionar o diretório de destino.
Script de amostra (não testado) que deve ser instalado como /etc/initramfs-tools/scripts/local-bottom/00-myroot
ou /usr/share/initramfs-tools/scripts/init-top/00-myroot
:
#!/bin/sh -e
PREREQS=""
prereqs() { echo "$PREREQS"; }
case "$1" in
prereqs)
prereqs
exit 0
;;
esac
for opt in $(cat /proc/cmdline); do
case $opt in
rootdir=*)
new_mntdir="${opt#rootdir=}"
;;
esac
done
if [ -n "$new_mntdir" ] ; then
echo rootmnt="$rootmnt/$new_mntdir" >> /conf/param.conf
fi
A idéia é ajustar rootmnt
, que é usado no script initramfs init
para iniciar / executar o init real. Como o dispositivo raiz já está montado no estágio init-bootom
, você pode apenas ajustar / alterar o diretório de destino.
Para usar este script, basta adicionar um novo parâmetro de inicialização, copiar o script, torná-lo executável, regenerar seu initramfs e adicionar um parâmetro de inicialização para sua distribuição Linux, por exemplo, rootdir=/Ubuntu_Precise
.