為什麼我們不能有效地將分區向左擴展?

為什麼我們不能有效地將分區向左擴展?

現代檔案系統(例如 ext4 和 btrfs)支援調整大小。即使那些本質上不支援它的工具(例如 FAT)也有支援它的第三方工具。但他們總是支援向右延伸,而不是直接向左延伸。

向左擴展是透過向左複製分區(在許多情況下逐字節複製)然後向右擴展來完成的。How do I extend a partition to the left我見過的每個答案都是backup, delete partition, make a new partition

難道不是像更改分區邊界,然後移動/更新索引節點表那麼簡單嗎?

答案1

但他們總是支援向右延伸,而不是直接向左延伸。

據推測,您指的是使用磁區或邏輯區塊線性陣列的 HDD/SSD 表示形式。
最左邊的磁區/區塊的(絕對)邏輯區塊位址 (LBA) 為 0

請注意,LBA 在 ATA 介面中通常以無符號 48 位元整數表示。

向左擴展是透過向左複製分區(在許多情況下逐字節複製)然後向右擴展來完成的。

這不是一個準確的描述。
而不是“複製”分區,透過逐個磁區/區塊移動分區來重新定位分區(不是“逐字節”)。

難道不是像更改分區邊界,然後移動/更新索引節點表那麼簡單嗎?

顯然不是,因為從未提供過該操作。

分區只是檔案系統的定義容器。
分區是根據起始 LBA、結束 LBA 以及磁區/區塊的數量來實體定義的。
分區的其他屬性與本討論無關。

為分區定義的檔案系統將使用 LBA相對的到分區的開頭。
檔案系統不關心也不知道其分割區在 HDD/SSD 上的位置。
檔案系統只知道從 0(其分區的開始)開始到對應於分區末端的 LBA 的 LBA。
透過使用相對尋址,檔案系統被禁止(並因此保證)存取其分區之外的任何扇區/區塊。

如果“更改分區邊界”意味著重新定義分區的起始位置而不將檔案系統移動到分區的新起始位置,這會產生無法解決的情況。

如果您嘗試使用現有的LBA,那麼新分區區域將具有小於零的LBA,這不能用無符號整數表示。因此沒有辦法將新建立的區域尋址到原始分區的「左側」。

如果您嘗試將檔案系統中儲存的每個 LBA 重新計算為其新的相對值,那麼您正在嘗試解決幾乎不可能的任務:找到檔案系統中的每個 LBA。忽略任何 LBA,您就可以確定檔案系統最終會損壞。
即使您成功更新了每個 LBA,檔案系統也可能顯示為損壞,因為通常需要將特定的檔案系統實體定位在特定(相對)LBA 處。但是“改變分區邊界”更改了那些應位於固定(相對於分區起始)LBA 的實體的位置。

最重要的是,分割區的起始位置和該分割區內檔案系統的位置必須保持一致。

相關內容