Ich möchte den pivot_root
Befehl testen, der das Root-Dateisystem des aktuellen Prozesses in das Verzeichnis verschiebt put_old
und new_root
das neue Root-Dateisystem erstellt.
Aber ich bekomme immer folgenden Fehler:
pivot_root: failed to change root from .' toold-root/': Invalid argument
Ich benutze Fedora als Basis-Root, ich habe einen Archlinux in meinem Home-Ordner
[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
Ich versuche auch, die Linux-Funktion aufzurufen pivot_root("/chroot_test", "/chroot_test/old-root")
. Habe den gleichen Fehler.
Irgendwelche Ideen dazu?
Update Nr. 1
Ich versuche auch pivot_root
in Docker zu testen . Ich mounte diesen Arch-Root in den Docker-Container. Aber erhalte den folgenden Fehler: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
Lösung
Ich habe die Lösung gefunden:
Laufen Sie docker
mit--privileged=true
So können wir pivot_root im Docker-Container testen.
Antworten:
Sind Sie wirklich sicher, dass
arch-root
sich das auf einem separaten Dateisystem befindet, das gemountet und gemountet werden kann?pivot_root
switch_root
Neben dem aktuelleren funktioniert das Jonglieren von Informationen über gemountete Dateisysteme im Kernel.Das neue Root-Dateisystem muss "das Root" eines Dateisystems sein, das Sie nicht übergeben können. " als neue Wurzel, es sei denn "." ist das Stammverzeichnis eines bereitgestellten Dateisystems.
Ich glaube, der einfachste Weg, wenn Sie es
pivot_root
von Ihrem aktuellen Setup aus versuchen möchten (vorausgesetzt, Arch-Root ist ein Unterverzeichnis und kein Root-Verzeichnis), besteht darin, eintmpfs
Dateisystem zu erstellen, zu dem Sie wechseln können, und das erforderliche Material dort zu kopieren.Etwas in diese Richtung könnte Ihnen den Einstieg erleichtern: (Passen Sie 500M an die Passform an
du -sh arch-root
)quelle
mount --bind /chroot-test /chroot-test && cd /chroot-test
. (Der zweite Teil stellt sicher, dass.
sich dies auf den neuen / chroot-Test bezieht, nicht auf den alten / chroot-Test). Dies ist laut man7.org/linux/man-pages/man8/switch_root.8.html#NOTESunshare -m
vor dem pivot_root eine ausführen. bugzilla.redhat.com/show_bug.cgi?id=1361043Auf der Manpage glaube ich, dass dies Ihr Problem ist:
Demnach sollten sich weder Dateisysteme
put_old
nochnew_root
Dateisysteme auf demselben Dateisystem wie befindencurrent_root
.Verweise
quelle
new_root
undput_old
kann auf demselben FS sein, es ist nur so, dass sich keiner auf demselben FS wie der aktuelle Root befinden sollte .