De fato:
- Fedora Linux 28 - isso usa o
dracut
initramfs. - Inicialize em um shell initramfs, adicionando
rd.break
como uma opção na linha de comando do kernel. cd /sysroot
usr/bin/pivot_root . mnt
-> pivot_root
falha com "Argumento inválido", correspondendo a um errno
valor de EINVAL
.
Não há explicação para isso em man 2 pivot_root
:
EINVAL
put_old não está abaixo de new_root .
Por que falha? E como o próximo comentarista respondeu: "Então, como o Linux sairia do espaço do usuário inicial?"
Ao contrário do
initrd
, o Linux não permite desmontar oinitramfs
. Aparentemente, isso ajudou a manter o código do kernel simples.Em vez de
pivot_root
, você pode usar oswitch_root
comando. Ele implementa o seguinte procedimento. Observe queswitch_root
exclui todos os arquivos da raiz antiga, para liberar a memória do initramfs, portanto, você precisa ter cuidado onde executa esse comando.Observe que os comandos do shell sugeridos são apenas equivalentes grosseiros ao código C. Os comandos realmente não funcionarão a menos que estejam todos embutidos no seu shell, porque o primeiro comando exclui todos os programas e outros arquivos do initramfs :-).
https://github.com/torvalds/linux/blob/v4.17/Documentation/filesystems/ramfs-rootfs-initramfs.txt
Do comentário no syscall pivot_root em fs/namespace.c :
Eu enviei um patch para o projeto man-pages sobre isso , então em versões futuras dele,
man 2 pivot_root
mencionarei este caso.