什麼是 /dev/sdxx 節點?

什麼是 /dev/sdxx 節點?

TLDP 的這張圖片非常棒。它表明,在向用戶空間提供對檔案系統的實際讀取、寫入、開啟存取權限之前,區塊已映射到虛擬檔案系統。

在此輸入影像描述

維基百科說不同層有3個版本的檔案系統。

那麼,標準(sd 節點)是指實體節點還是在左心室容量映射的虛擬檔案系統?

或者它們只是指分區?

如果是這種情況,什麼設備代表檔案系統驅動程式/或檔案系統,或者......我只是不知道......任何人都可以連結我一些解釋核心磁碟使用情況的內容嗎?

答案1

太長了;博士:/dev/sdaX代表一個分區。我認為您的一個根本誤解是檔案系統和分割區之間的區別。分割區非常簡單 - 基本上它只是磁碟的一部分,在磁碟開頭的分割區表中定義。然而,檔案系統是一個更高級的東西。檔案系統本質上是一種資料結構,用於追蹤核心(特別是檔案系統驅動程式)能夠讀取和寫入的檔案。從技術上講,該資料結構可以放置在磁碟上的任何位置,但預計 fs 資料結構的開頭與分割區的開頭相同。

您在問題中提到了 LVM - 讓我們暫時忘記它,因為這是一個更高級的主題(我將在最後解釋 LVM)。

假設您有一個 100GB 硬碟,除了零之外什麼都沒有。在這種情況下,您將擁有一個/dev/sda100GB 的檔案(儘管例如du將其報告為零長度,因為它是一個特殊的區塊)並且只包含零。/dev/sda是核心將原始設備內容公開給使用者空間進行讀寫的方法。這就是為什麼它具有與您的磁碟相同的資料量以及與您的磁碟相同的內容。如果將第五位元翻轉/dev/sda為 1 而不是 0,核心將翻轉實體磁碟機上的第五位元以進行匹配。在您提供的圖中,此寫入將透過系統呼叫介面進入內核,然後透過 IDE 硬碟驅動程序,最後到達硬碟本身。


現在假設您想要對該磁碟機執行一些有用的操作,例如在其上儲存檔案。現在您需要一個檔案系統。 Linux 核心中有多種可用的檔案系統。它們中的每一個都使用磁碟上不同的資料結構來追蹤文件,並且它們也可能以不同的方式修改其資料結構,例如提供原子寫保證(即寫入要么成功,要么不成功;即使機器崩潰,也永遠不會有半寫入的資料)。這就是人們談論「檔案系統驅動程式」時的意思:檔案系統驅動程式是一段程式碼,它了解如何在磁碟上讀取和寫入特定檔案系統的資料結構。範例包括 ext4、btrfs、XFS 等。

所以你想儲存文件。假設您選擇 ext4 作為檔案系統。現在您需要做的是格式化磁碟,以便空檔案系統的資料結構存在於磁碟上。為此,您使用mkfs.ext4並告訴它寫入到/dev/sda.mkfs.ext4然後將寫入一個從 開頭開始的空 ext4 檔案系統/dev/sda。然後內核將寫入/dev/sda並將它們應用到實體磁碟的開頭。現在磁碟包含檔案系統的資料結構,您可以執行以下操作:掛載mount /dev/sda /mnt全新的檔案系統、將檔案移入其中等。/mnt(它知道如何將更抽象的“將這些資料寫入某某文件”轉化為需要對磁碟上的 fs 資料結構進行的具體更改),然後到 IDE 硬碟驅動程序,最後到驅動器本身。


現在,上述方法可行,但這不是人們通常做事的方式。通常他們使用分割區在驅動器上。分區基本上只是驅動器的特定部分。當您使用分割區時,您有一個分區表在磁碟機的開頭,說明每個分割區的實體位置。分割區很整潔,因為它們允許您將磁碟機劃分為多個部分,這些部分可用於不同的目的。

假設您想創建驅動器上的檔案系統,均約為 50GB(即各一半)。首先,您必須對磁碟機進行分割。為了做到這一點,您可以使用像fdisk或 這樣的工具gdisk,它們都會創建不同類型的分區表,並且您可以告訴您的工具寫入/dev/sda.完成分區後,您將得到/dev/sda/dev/sda1、 和/dev/sda2/dev/sda1/dev/sda2是核心表示磁碟中不同分割區的方式。如果您寫入 的開頭/dev/sda2,它將寫入第二個分割區的開頭,該分割區位於磁碟的中間

解釋這一點的另一種方法是談論 的內容/dev/sda/dev/sda即逐位回憶實體硬碟的內容。並且/dev/sda1是硬碟第一個分割區的逐位內容。這意味著/dev/sda有一點資料(分區標頭),然後是 的確切/dev/sda1內容/dev/sda2/dev/sda1/dev/sda2映射到磁碟上的特定區域,這些區域是您已配置的分割區。

從這裡我們可以mkfs.ext4再次使用 在 上建立一個檔案系統/dev/sda1,該系統將直接在分割頭之後開始寫入磁碟。如果我們使用mkfs.ext4on /dev/sda2,它會從分割區的開頭開始寫入,該分割區位於磁碟的中間(因此位於/dev/sda的內容的中間)。

現在,你可以做例如mount /dev/sda2 /mnt。這告訴核心從第二個分割區的開頭開始讀取檔案系統數據,並以更有用的形式將其公開給您,即該位置的檔案和目錄/mnt。同樣,核心使用檔案系統驅動程式來實際執行此映射。


現在讓我們簡單談談 LVM。 LVM 基本上只是分割的抽象。分割區非常非常直接地對應到磁碟上的實體位置。在上面的雙分割區範例中,假設您想要刪除第一個分割區並將第二個分割區擴展到新釋放的空間。由於分割區直接對應到磁碟區域,因此唯一的方法是將整個 50GB 分割區資料實際移動到磁碟的開頭,然後將分割區擴展到末尾。

LVM 旨在減輕這種痛苦。基本上,您為 LVM 提供一堆原始存儲,然後告訴它如何使用該存儲。 LVM 為您提供了一個虛擬“磁碟”,可以像分割區一樣進行劃分,但其底層儲存可以位於您為其分配的原始儲存池中的任何位置。使用上面的範例,如果您將整個磁碟提供給 LVM 使用,然後將其分成兩個,您可以刪除第一個「分割區」並擴展第二個「分割區」以立即填充該空間,因為 LVM 能夠追蹤數據在磁碟上的位置,而不要求資料嚴格「按順序」。

有關 LVM 如何工作的更多詳細信息,請參閱此答案:https://unix.stackexchange.com/a/106871/29146

答案2

/dev/sda是整個硬碟的介面。如果您有權限,您可以直接在磁碟機中的任何位置進行尋找。/dev/sda1是磁碟機上的第一個分割區。此時還沒有涉及檔案系統。分割區內可以直接有檔案系統,也可以是LVM容器。

相關內容