簡體   English   中英

掛載點歸因

[英]Mount point attribution

我正在閱讀docker的源代碼,它檢查是否已通過這樣的測試條件掛載了一個目錄,其背后的原理是什么?

func Mounted(mountpoint string) (bool, error) {
    mntpoint, err := os.Stat(mountpoint)
    if err != nil {
        if os.IsNotExist(err) {
                return false, nil
        }
        return false, err
    }
    parent, err := os.Stat(filepath.Join(mountpoint, ".."))
    if err != nil {
        return false, err
    }
    mntpointSt := mntpoint.Sys().(*syscall.Stat_t)
    parentSt := parent.Sys().(*syscall.Stat_t)
    return mntpointSt.Dev != parentSt.Dev, nil
}

在Linux上的stat(2)手冊頁中:

st_dev字段描述此文件所在的設備。 major(3)minor(3)宏可用於分解此字段中的設備ID。)

因此,所討論的代碼正在執行的是在目錄及其父目錄上調用stat系統調用,並檢查它們是否駐留在不同的設備上。 僅當它們位於不同的文件系統上時,這才是正確的,這將表明所討論的目錄是安裝點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM