/proc/.../mountinfo 中的第四列(根)是什麼意思?

/proc/.../mountinfo 中的第四列(根)是什麼意思?

proc手冊中,它將第四列命名mountinfo為“root”,並將其描述為“檔案系統中形成此掛載根的目錄的路徑名”。但如何理解呢?

我認為掛載的基本要素是源路徑和目標路徑,既然「掛載源」是第10列,目標是第5列,那麼根是用來做什麼的呢?

對於大多數掛載資訊來說,根只是/,似乎沒有意義。我只發現綁定安裝的根目錄與 不同/,所以它只在綁定安裝中有用?在綁定情況下,為什麼不顯示 root 中的絕對路徑?例如,綁定到 時/run/test_dir/a/run/test_dir/b根列顯示/test_dir/a,為什麼要隱藏該/run部分?

答案1

很難用語言元素來解釋它(至少用我的英語技能) - 所以我決定做一個基於示例的答案:

根目錄通常稱為最高或者最高的目錄。這只是部分正確。這個目錄假設作為最高目錄。您可以用“我將從這個目錄開始 - 我假設這是最高目錄並且上面沒有任何內容”來描述它。

一些例子來闡明「root」的意思:

  • 假設您執行一個 Web 伺服器並將網域的根設定example.com/var/www/html/example.com.現在您建立一個文件/var/www/html/example.com/test.html。如果你https://example.com/test.html在瀏覽器中打開。您將獲得創建的文件的內容。如果你設定/var/www/html為root,則必須打開https://example.com/example.com/test.html
  • 如果你chroot進入該目錄/home/test/testSystem/。這個環境的根源是/home/test/testSystem.如果您ls在 chrooted 環境中執行操作,ls /您將獲得以下內容/home/test/testSystem/

具有 root 權限的掛載點/

例如,USB 包含:

/
├── dir1
│   ├── subfile1
│   └── subfile2
├── file1
├── file2
└── file3

如果您將此 USB 掛載到/mnt您將獲得預期的正常輸出,因為您使用/USB 的目錄作為 root:

531 137 0:52 / /mnt rw,nosuid,nodev shared:75 - /dev/sdb [...]

所以在大多數情況下,掛載點的根確實是/

具有不同根的安裝點/

您可以自己嘗試一下:將檔案系統中的兩個目錄綁在一起

$ mount --bind /var/test1 /var/test2

的輸出mountinfo將類似:

564 29 0:26 /var/test1 /var/test2 rw,relatime shared:1 - ext4 /dev/sda rw [...]

位於下面的掛載點的根目錄/var/test2/var/test1。掛載來源(您已掛載的內容)是/dev/sda

回到 USB 範例:如果您現在將內容掛載/mnt/dir1到其他設備,您將獲得掛載根目錄/dir1,並且掛載來源將是/dev/sdb(USB)。該/mnt部分被丟棄在這裡。

“為什麼要隱藏 /run 部分”

簡而言之:/run被刪除,因為它是一個 tmpfs 分割區。為什麼這些部件被移除?

在 USB 範例中,我們將dir1其安裝/dev/sdb/home/test/usbmnt/.輸出將是:

564 29 0:26 /dir1 /home/test/usbmnt/ rw,relatime shared:1 - ext4 /dev/sdb rw [...]

您會看到我們將 /dir1 的內容(來自 USB,而不是來自硬碟)安裝到名為 usbmnt 的目錄中。也許將其讀作有幫助/dev/sdb/dir1

如果給出根目錄,因為/mnt/usb/dir1我們無法知道 USB 上的真實位置:可能是/dir1/usb/dir1或者也許/mnt/usb/dir1

相關內容