Linux

pivot_root(2) 導致系統崩潰

  • May 3, 2019

我正在嘗試將我的程序的根更改為我安裝在 /tmp/mount_dir 的新文件系統,並且我在其中創建了另一個目錄 /tmp/mount_dir/inner_mount_dir,並且根據手冊頁 pivot_root(2) 沒有這個系統呼叫的 glibc 包裝器,所以我自己做了

int pivot_root(const char *new_root, const char *put_old){

 return(syscall(SYS_pivot_root, new_root, put_old));

}

創建手冊頁指定的兩個嵌套目錄後,我在此程式碼中呼叫它

fprintf(stderr,"-->Changing the process's root...");
if(pivot_root(mount_dir, inner_mount_dir)){
 fprintf(stderr,"Failed..%m\n");
 return -1;
}else{
 fprintf(stderr,"Success\n");
}

系統呼叫返回成功,但問題是系統進入崩潰狀態,首先來自 gnome dash 的所有圖示都消失了,我根本無法與系統互動(系統凍結我只能首先更改視窗然後全部終止),螢幕變成一個空白的黑屏,左上角有一個“-”,好像系統正在關閉,但在該狀態下凍結,直到我強制關閉。

pivot_root() 作用於命名空間。

要僅影響您的程序(及其子程序),請首先輸入新的掛載命名空間。並且您需要確保 pivot_root 操作不會傳播回原始名稱空間,例如使用mount --make-rslave /.

如何使用 Linux 命名空間執行 chroot?

引用自:https://unix.stackexchange.com/questions/517006