Como usar / testar pivot_root?

6

Eu quero testar o comando pivot_root que move o sistema de arquivos raiz do processo atual para o diretório put_old e torna new_root o novo sistema de arquivos raiz.

Mas eu sempre recebo o seguinte erro:

pivot_root: failed to change root from .' toold-root/': Invalid argument

Eu uso o fedora como root base, eu tenho um Archlinux na minha pasta pessoal

[root@localhost arch-root]# ls
bin boot dev etc home lib lib64 mnt old-root 
opt proc root run sbin srv sys tmp usr var
[root@localhost arch-root]# pivot_root . old-root/
pivot_root: failed to change root from .' toold-root/': Invalid argument

Eu também tento chamar a função linux pivot_root("/chroot_test", "/chroot_test/old-root") ; Tem o mesmo erro.

Alguma idéia sobre isso?

Atualização 1

Eu também tento testar pivot_root no Docker. Eu montei este arch-root no container Docker. Mas receba o seguinte erro: Operation not permitted

root@00d871ce892b:/# cd test_root/
root@00d871ce892b:/test_root# ls
bin  boot  dev  etc  home  lib  lib64  mnt  old-root  opt  proc  root  run  sbin  srv     sys  test_pivot_root  test_pivot_root.c   tmp  usr  var
root@00d871ce892b:/test_root# pivot_root . tmp/
pivot_root: Operation not permitted

Solução

Encontrei a solução:

Executar docker com --privileged=true

Para que possamos testar o pivot_root no contêiner docker.

    
por vvilp 16.09.2014 / 02:32

2 respostas

3

Você tem certeza de que arch-root está em um sistema de arquivos separado que pode ser montado e desmontado?

pivot_root , bem como o mais atual switch_root , funciona manipulando informações sobre sistemas de arquivos montados no kernel.

O novo sistema de arquivos raiz deve ser "a raiz" de um sistema de arquivos, você não pode passar "." como a nova raiz, a menos que "." é o diretório raiz de um sistema de arquivos montado.

Eu acredito que a maneira mais fácil se você quiser tentar pivot_root de sua configuração atual (supondo que arch-root é um subdiretório e não um diretório raiz) é criar um sistema de arquivos tmpfs para mudar e copiar o requerido coisas lá.

Algo nesse sentido pode ajudar você: (ajuste 500M para caber du -sh arch-root )

mkdir /ramroot
mount -n -t tmpfs -o size=500M none /ramroot
cd arch-root # (containing the root filesystem contents)
find . -depth -xdev -print | cpio -pd --quiet /ramroot
cd /ramroot
mkdir oldroot
pivot_root . oldroot
exec chroot . bin/sh
    
por 16.09.2014 / 09:48
1

Na página de manual , acredito que esse é o seu problema:

The following restrictions apply to new_root and put_old:

- They must be directories.

- new_root and put_old must not be on the same file system as the current
root.

- put_old must be underneath new_root, that is, adding a nonzero number of
/.. to the string pointed to by put_old must yield the same directory as
new_root.

- No other file system may be mounted on put_old.

De acordo com o acima, o mesmo sistema de arquivos não pode ser usado tanto para o put_old quanto para o new_root .

Referências

por 16.09.2014 / 04:23