Parece que você está falando sobre o Debian.
Isto diz-lhe tudo se o tiver usando o sistema tradicional de inicialização . Especificamente:
The "/sbin/init" program is executed as the first program and performs
the main boot process. The Debian normally uses the traditional
sysvinit scheme with the sysv-rc package. See init(8), inittab(5), and
"/usr/share/doc/sysv-rc/README.runlevels.gz" for the exact
explanation. This main boot process essentially goes through the
following.
The Debian system goes into runlevel N (none) to initialize the system by following the "/etc/inittab" description.
The Debian system goes into runlevel S to initialize the system under the single-user mode to complete hardware initialization etc.
The Debian system goes into one of the specified multi-user runlevels (2 to 5) to start the system services.
O que acontece por nível de execução é que tudo em /etc/rcX.d
é executado, em ordem alfabética, em que X
é o nível de execução.
Então, se você cd /etc/rcS.d
, verá um monte de links simbólicos para /etc/init.d
, que começam com um número. O número está lá para determinar o pedido. Os que começam com S
são executados quando o nível de execução é inserido, e aqueles que começam com K
são executados quando o nível de execução é encerrado. O nível de execução "S" é usado apenas para inicialização, portanto, não há links K
.
Pise com cuidado aqui se você modificar ou renomear qualquer coisa. Certifique-se de testar seus scripts antes de se submeter a um processo de inicialização.
Ok, vamos tentar responder a pergunta agora, com as informações acima como fundo necessário.
Sob o Debian o /etc/rc.S/S11mountall.sh
é onde o crucial "mount everything in fstab" acontece. No entanto, fstab
é consultado para montar o sistema de arquivos raiz em /etc/rc.S/S07checkroot.sh
.
Se você usar fstab
para automontar um novo /etc
, tudo em /etc/rc.S/S12*
e mais alto usará o /etc
no volume "overlay". No entanto, você precisa de um /etc/fstab
válido no volume raiz no momento anterior.
Outras coisas que /etc
é consultado incluem /etc/hostname
, possivelmente algumas coisas relacionadas a udev
(que é extremamente importante). Você precisa examinar todos os scripts de /etc/rc.S/S11*
e inferior para saber exatamente. Se você realmente não quiser /etc
até que ele seja montado a partir de uma partição externa, você está olhando para modificar esses scripts. Provavelmente não será tão simples quanto trocar a ordem de /etc/rc.S/S12mountall.sh
para, por exemplo, /etc/rc.S/S00mountall.sh
, mas você possivelmente poderia adicionar um novo script que inclua /etc
de uma partição externa anteriormente.
Você pode usar o comando Linux mount --bind
para montar o /etc
original do volume raiz em algum lugar (como /etc_from_rootfs
) para copiá-lo quando fizer alterações em fstab
ou outros arquivos consultados antes de /etc/rc.S/S12mountall.sh
.
O kernel do Linux não faz o que o Windows faz, que é usar e requerer a presença do registro antes e durante a inicialização. O próprio kernel inicializará bem (mas não terrivelmente usualmente em 99% das instâncias) sem /etc
, mas cabe aos programas userspace chamados depois (começando com init
), que então olham para /etc
, para obter um ambiente de usuário decente pronto.
Som complicado? É por isso que ouvir @MattDMo é provavelmente prudente.