Làm thế nào để sử dụng / kiểm tra p Pivot_root?


9

Tôi muốn kiểm tra pivot_rootlệnh di chuyển hệ thống tệp gốc của quy trình hiện tại vào thư mục put_oldvà tạo new_roothệ thống tệp gốc mới.

Nhưng tôi luôn nhận được lỗi sau:

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

Tôi sử dụng fedora làm gốc, tôi có Archlinux trong thư mục nhà của tôi

[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

Tôi cũng cố gắng gọi chức năng linux pivot_root("/chroot_test", "/chroot_test/old-root"); Có lỗi tương tự.

Bất cứ ý tưởng về điều này?

Cập nhật số 1

Tôi cũng thử kiểm tra pivot_roottrong Docker. Tôi gắn arch-root này vào Docker container. Nhưng nhận được lỗi sau: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

Giải pháp

Tôi đã tìm thấy giải pháp:

Chạy dockervới--privileged=true

Vì vậy, chúng ta có thể kiểm tra p Pivot_root trong thùng chứa docker.


Từ âm thanh của bài đăng này, nó có vẻ như là một lỗi đối với tôi: github.com/lxc/lxc/issues/61 . Chủ đề này nghe có vẻ liên quan: list.linuxcontainers.org/pipermail/lxc-users/2014-Janemony/ chủ
slm

Phải, tôi đang thử kiểm tra chức năng của Docker và tính năng lxc sử dụng p Pivot_root
vvilp

Câu trả lời:


5

Bạn có thực sự chắc chắn rằng đó arch-rootlà trên một hệ thống tập tin riêng biệt có thể được gắn kết và bỏ qua?

pivot_root, cũng như hiện tại switch_root, hoạt động bằng cách tung hứng thông tin về các hệ thống tập tin được gắn trong kernel.

Hệ thống tệp gốc mới phải là "gốc" của hệ thống tệp, bạn không thể vượt qua "." là gốc mới trừ khi "." là thư mục gốc của một hệ thống tập tin gắn kết.

Tôi tin rằng cách dễ nhất nếu bạn muốn thử pivot_roottừ thiết lập hiện tại của mình (giả sử arch-root là thư mục con chứ không phải thư mục gốc) là tạo một tmpfshệ thống tập tin để chuyển sang và sao chép những thứ cần thiết ở đó.

Một cái gì đó dọc theo những dòng này có thể giúp bạn bắt đầu: (điều chỉnh 500M cho phù hợp du -sh arch-root)

mkdir / ramroot
mount -n -t tmpfs -o size = 500M none / ramroot
cd arch-root # (chứa nội dung hệ thống tập tin gốc)
tìm thấy . -depth -xdev -print | cpio -pd --quiet / ramroot
cd / ramroot
mkdir oldroot
p Pivot_root. cũ
thực hiện chroot. thùng / sh

Cảm ơn bạn rất nhiều, vì bây giờ tôi đang thử nghiệm nó trong một container docker. nó hoạt động Tôi sẽ thử phương pháp của bạn sau
vvilp

Tôi nghĩ có một cách tối thiểu hơn nhiều để đáp ứng yêu cầu này mount --bind /chroot-test /chroot-test && cd /chroot-test. (Phần thứ hai đảm bảo rằng .đề cập đến thử nghiệm mới / chroot, chứ không phải thử nghiệm cũ / chroot). Đây là theo man7.org/linux/man-pages/man8/switch_root.8.html#NOTES
sourcejedi

Bạn có thể cần phải thực hiện unshare -mtrước p Pivot_root. bugzilla.redhat.com/show_orms.cgi?id=1361043
koalo 18/07/18

2

Từ trang người đàn ông , tôi tin rằng đây là vấn đề của bạn:

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.

Theo như trên, không phải put_oldhoặc các new_roothệ thống tập tin nên nằm trên cùng một hệ thống tập tin như current_root.

Người giới thiệu


Cảm ơn bạn đã trả lời của bạn. Tôi cập nhật câu hỏi. Tôi cũng thử kiểm tra trong Docker. Nhưng hoạt động không được phép
vvilp

1
Tóm tắt của bạn là sai. new_rootput_old có thể nằm trên cùng một FS, chỉ là không nên cư trú trên cùng một FS như gốc hiện tại .
iBug

@iBug - ty cố định.
slm
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.