Partition

lsblk 和 fdisk 如何為同一個分區顯示不同的大小?

  • August 29, 2020

我正在執行一個 virtualbox VM,我可以看到 /dev/sda2 的大小在兩個輸出中顯示不同。此外,在 fdisk 的輸出中,/dev/sda2 和 /dev/sda5 似乎重疊

~$ lsblk /dev/sda
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0 29.3G  0 disk 
├─sda1   8:1    0  512M  0 part /boot/efi
├─sda2   8:2    0    1K  0 part 
└─sda5   8:5    0  9.5G  0 part /

~$ sudo fdisk -l /dev/sda
Disk /dev/sda: 29.3 GiB, 31457280000 bytes, 61440000 sectors
Disk model: VBOX HARDDISK   
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x8f66391d

Device     Boot   Start      End  Sectors  Size Id Type
/dev/sda1  *       2048  1050623  1048576  512M  b W95 FAT32
/dev/sda2       1052670 20969471 19916802  9.5G  5 Extended
/dev/sda5       1052672 20969471 19916800  9.5G 83 Linux

sda2分區是容器分區。它的格式與磁碟的主引導記錄(MBR)非常相似,被稱為擴展引導記錄(EBR),它本身佔用四個可能的主分區插槽之一。它的存在是為了克服 MBR 中 4 個分區的歷史限制。它在其自身內部包含擴展分區(在 Linux 中從分區 5 開始顯示)並被連結:每個進一步的擴展分區也有一個帶有兩個條目的 EBR:一個引用分區本身的數據,一個引用下一個擴展分區的 EBR如果有的話。所有擴展分區(所以這裡sda5)都它們的容器分區(這裡sda2)內,因此 fdisk 將始終報告重疊塊。

MBR的角度來看,它使用了為在其中添加擴展分區而保留的所有空間,因此它的大小必須大於所有擴展分區的大小。

從核心 API 報告給使用者空間的角度來看lsblk,分區 2 只是出於禮貌而顯示的粘合分區,不應被篡改。報告的數據大小只是 EBR 成本,此處為 1K,否則對分區 2 的讀取或寫入(這已經很糟糕,因為它會破壞到其中所有擴展分區的初始連結)也將允許對分區 5 進行讀取或寫入。它可以即使已選擇報告大小為 0,也沒關係。sda這與代表整個磁碟的自身處理不同。當您考慮進一步擴展分區與每個先前擴展分區的 EBR 連結時,這是有道理的:它們的內部 EBR 甚至不可用,只能看到它們的實際數據。

您應該考慮使用GPT分區而不是 MBR/EBR 分區:它是一種現代的分區方案,它更加理智,並且沒有這樣的限制和變通方法。或者你也可以在一個(主要的,不需要擴展的)分區中選擇LVM :這也是一種容器形式,用於在不同的抽象層對塊進行分區,並提供了很多特性。

引用自:https://unix.stackexchange.com/questions/606989