如果 /dev/root 遺失,如何確定根裝置?

如果 /dev/root 遺失,如何確定根裝置?

在我現在使用的發行版 Arch Linux ARM 上,Linux 啟動時沒有初始 RAM 磁盤,這意味著核心完成了掛載根檔案系統的所有工作。該系統安裝在 SD 卡上,上面有一個腳本,需要確定它所在的檔案系統的設備節點。該設備節點可以根據我啟動設備的方式而改變(例如,我將其連接到另一個已經運行的設備)。

我能夠使用確定安裝點df -k --output=target ${0} | sed "1d"。為了確定源設備,我運行df -k --output=source ${0} | sed "1d".如果我啟動到 Arch Linux,最後一個指令的結果就會輸出/dev/root哪個不存在。當然,在某些系統上,udev 會創建一個到真實根設備的符號鏈接/dev/root,但我的系統不會這樣做。我可以查看 的內容,/proc/cmdline但它在核心的正常運行時間內保持不變,因此這意味著它不可靠。

當我得到 時/dev/root,如何確定它所代表的真正底層塊設備?

答案1

回答來自這裡的評論很簡單。只需致電:

findmnt -n -o SOURCE /

前提findmnt是存在...

答案2

mount命令將顯示它:

mount | sed -n 's|^/dev/\(.*\) on / .*|\1|p'

答案3

我發現這篇博文對於在 Linux 中尋找根裝置和主磁碟非常有幫助。

您需要lsblk安裝實用程序,該實用程式由util-linuxCentOS/RHEL 提供。例如,這樣的變體將為您提供根設備的磁碟名稱:

lsblk -oMOUNTPOINT,PKNAME -rn | awk '$1 ~ /^\/$/ { print $2 }'
sda3

findmnt來自同一個套件將為您提供實際的底層根設備名稱:

findmnt -oTARGET,SOURCE -rn /
/ /dev/mapper/vg01-lv_root

這兩個實用程式的標誌-P將為您提供相同格式的信息,適合eval在 shell 中使用:

findmnt -oTARGET,SOURCE -Pn /
TARGET="/" SOURCE="/dev/mapper/vg01-lv_root"

lsblk -oMOUNTPOINT,PKNAME -Pn | grep 'MOUNTPOINT="/"'
MOUNTPOINT="/" PKNAME="sda3"

答案4

您可以使用stat /和檢查設備主/次編號,或使用指令rdev自動解釋該編號。

相關內容