版權所有 © 2014 tutorialspoint
pivot_root() 的典型用法是在系統啟動期間,系統掛載一個臨時根檔案系統(例如 initrd),然後掛載真正的根檔案系統,並最終將後者轉換為所有相關程序或執行緒的當前根。
pivot_root() 可能會或可能不會更改使用舊根目錄的任何程序或執行緒的當前根和當前工作目錄 (cwd)。pivot_root() 的呼叫者必須確保具有根或 cwd 在舊根上的程序在任何情況下都能正常執行。確保這一點的簡單方法是在呼叫 pivot_root() 之前將其根和 cwd 更改為new_root。
上面一段話有意含糊不清,因為pivot_root() 的實現將來可能會發生變化。在撰寫本文時,如果程序或執行緒的根或 cwd 指向舊根目錄,則pivot_root() 會將它們的根和 cwd 更改為new_root。這是為了防止核心執行緒即使它們以任何方式從未訪問過檔案系統,也仍然使用其根和 cwd 使舊根目錄保持繁忙狀態。將來,可能存在一種機制,允許核心執行緒顯式放棄對檔案系統的任何訪問,這樣就可以從pivot_root() 中刪除這種相當侵入性的機制。
請注意,這也適用於當前程序:pivot_root() 可能會或可能不會影響其 cwd。因此,建議在pivot_root() 之後立即呼叫chdir("/")。
以下限制適用於new_root 和put_old
如果當前根不是掛載點(例如,在chroot(2) 或pivot_root() 之後,另請參見下文),則不是舊根目錄,而是該檔案系統的掛載點將掛載在put_old 上。
new_root 不必是掛載點。在這種情況下,/proc/mounts 將顯示包含new_root 的檔案系統的掛載點作為根 (/)。
pivot_root() 的一些更模糊的用法可能會很快導致瘋狂。
chdir (2)
chroot (2)
stat (2)
pivot_root (8)
廣告