概括
我有一台帶有 1TB 內部磁碟的 Dell Inspiron 17-5767 筆記型電腦,我允許最初發貨的 Windows 10 繼續擁有並主宰一切(這是我的遊戲作業系統)。此外,我有兩個外部驅動器,我可以從其中啟動當前和未來的 Linux 作業系統。我目前的設定如下:
- USB 3.0 連接埠 #0:Seagate Expansion+ 931.5 GiB(1000204885504 位元組)外部 HDD 識別為 /dev/sdb
- 目前有一個全尺寸的空 ext4 分區,但一直在努力用 12 個分區的最佳對齊分區方案來取代它(困難點在於對齊)
- USB 3.0 連接埠 #1:238.5 GiB(256060514304 位元組)三星 SSD 840 Pro 識別為 /dev/sdc
- 使用Fedora LiveCD 的安裝程式(帶有「自訂」選項)進行分區,並將我的Fedora LXDE 和Lubuntu linux 發行版放置在單一LVM 中,其中包含共用交換空間、共用使用者空間、單獨的根目錄和單獨的外部開機分割區(透過這裡的外部,我只是指不在 LVM 中,而是在同一磁碟上其他地方的自己單獨的主分割區中)
- 該驅動器的物理和邏輯塊大小均為 512,並且根據parted 的“align-check opt x”實用程式進行了最佳對齊,並且 fdisk 也對對齊感到滿意(任何實用程式都沒有對齊投訴)
- UEFI BIOS 嘗試在內部啟動之前從 USB 啟動,因此我會彈出 grub 並顯示所有可用選項
目標
我正在嘗試複製類似於 /dev/sdb 驅動器上的 /dev/sdc 的情況,但使用 5 個 Linux 發行版。我已經涵蓋了我的專案的這方面,因為我是一位經驗豐富的多重引導者。但我目標的另一部分是讓 /dev/sdb 上的分區得到最佳對齊,就像 /dev/sdc 的情況一樣,這就是我遇到麻煩的地方。
環境
我目前正在相對較新且升級的 Fedora LXDE 安裝中進行工作,並且我得到的結果在我相對較新且升級的 Lubuntu 安裝中也完全可重複。
報告的磁碟參數
[root@frank ~]# cat /sys/class/block/sdb/queue/physical_block_size
4096
[root@frank ~]# cat /sys/class/block/sdb/queue/logical_block_size
512
[root@frank ~]# cat /sys/class/block/sdb/queue/minimum_io_size
4096
[root@frank ~]# cat /sys/class/block/sdb/queue/optimal_io_size
33553920
[root@frank ~]# cat /sys/class/block/sdb/alignment_offset
0
[root@frank ~]# fdisk -l /dev/sdb
Disk /dev/sdb: 931.5 GiB, 1000204885504 bytes, 1953525167 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 33553920 bytes
Disklabel type: gpt
Disk identifier: 9428D9DB-746C-40CA-B189-060F92A10E3C
Device Start End Sectors Size Type
/dev/sdb1 65535 1953467279 1953401745 931.5G Linux filesystem
Partition 1 does not start on physical sector boundary.
[root@frank ~]#
問題
因此,根據物理區塊大小的報告,該磁碟似乎是 4k(高級格式),而不是像其他磁碟機那樣的 512b,儘管出於向後相容的目的,它使用的邏輯磁區大小為 512b。我可以看出 GNU parted 實用程式假設區塊大小為 512,因為當它計算最佳 IO 間隔時
(optimal_io_size + alignment_offset) / physical_block_size = optimal_sector_interval
它的值為 65535,這是它將自動啟動第一個分區的位置,並且align-check子實用程式將分區對齊傳遞為最佳的唯一方法是如果它以65535的倍數開始。您認為它將physical_io_size 視為512 而不是4096,結果是有意義的
(33553920 + 0) / 512 = 65535.
然而,parted 不能使用 4096 塊大小,這是可以理解的,因為這樣的話方程式將計算為
(33553920 + 0) / 4096 = 8191.875.
這個答案會讓高中代數老師滿意,但顯然作為一個扇區間隔沒有意義,人們期望一個離散值(即整數!)。無論如何,因為我想創建 12 個分區,其中一些分區的大小只有 256MiB,所以在 GNU Parted 中使用百分比是不可能做到的,長話短說,我只能滿足最佳對齊的對齊檢查堅持使用“unit s 「並自己進行模組化算術,以確保我的分區以65535 秒的間隔開始,這是parted 希望我這樣做的方式。根據我的研究,我認為確保我的分區也以這些間隔結束並不重要,因此我的大多數分區之間都留有間隙(顯然不大於 65535)。
再一次,parted 認為我的結果是最佳對齊的,將物理區塊大小視為 512 而不是 4096。
Partition 1 does not start on physical sector boundary.
Partition 2 does not start on physical sector boundary.
Partition 3 does not start on physical sector boundary.
Partition 4 does not start on physical sector boundary.
Partition 5 does not start on physical sector boundary.
Partition 6 does not start on physical sector boundary.
Partition 7 does not start on physical sector boundary.
Partition 8 does not start on physical sector boundary.
Partition 9 does not start on physical sector boundary.
Partition 10 does not start on physical sector boundary.
Partition 11 does not start on physical sector boundary.
Partition 12 does not start on physical sector boundary.
所以,parted 喜歡的,fdisk 不喜歡的。所以然後我嘗試使用gParted 重做我的分割方案,讓它使用1 MiB 作為單位大小,它在2048 秒開始第一個分割區,就像你在我的另一個磁碟(/dev/sdc) 上看到的那樣。然後 fdisk 很高興,不再抱怨扇區對齊,但隨後 GNU parted 未能通過最佳模式的對齊檢查測試,儘管它可以通過最小模式。
然而,我確實發現,在這兩種情況下,mkswap(我用它在放置在 /dev/sdb11 上的 LVM 中建立交換卷)給了我以下警告:
[root@frank ~]# mkswap /dev/strange_quark_experimental/swap
mkswap: warning: /dev/strange_quark_experimental/swap is misaligned
因此,無論parted 認為磁碟是最佳對齊還是最小對齊,mkswap 都會發現我的交換卷未對齊,而且無論fdisk 是否滿意對齊,mkswap 也會發現我的交換卷未對齊。
理論
所有這些給我留下的印像是,我可能必須忽略至少一個磁碟報告或分割實用程式的警告,但我不確定是哪一個。也有可能所有報告一開始都是不可靠的,因為包含 HDD 的 USB 相容外殼可能會錯誤報告至少一個磁區參數。例如,也許它實際上不是 AF 驅動器?或者可能錯誤報告了最佳 IO 大小。或者也許兩者兼而有之?而且,相信我,我也考慮過這是 PEBKAC 案例的可能性,因為我可能只是誤解瞭如何在 4k 驅動器上對齊分割區。我不知道。
無論發生什麼,一旦我相信我的分割區是最佳對齊的並且 mkswap,或者至少是我最應該信任的實用程序,我會很高興繼續我的實際 Linux 安裝,停止抱怨對齊。
幫助
請幫我理解為什麼我似乎無法讓parted和其他磁碟實用程式就最小對齊(僅在使用gParted或gdisk分割區時實現)以外的任何內容達成一致,並請告訴我我是否真的應該擔心太多關於我的情況下最佳對齊相對於最小對齊的優點,因為如果效能或磁碟運行狀況的差異太小,我不會浪費更多時間。否則,我希望能夠充分利用磁碟的高級格式化優勢。
答案1
如果您仍然對奇怪的數字 65535 感到困惑。我最近也被這個問題迷惑了。我尋找答案並發現了這個:http://gparted-forum.surf4.info/viewtopic.php?id=17839
簡而言之,當硬碟透過 USB-SATA 適配器連接到 PC 時,optimal_io_size 可能無效。
解決方案就是忽略這個數字並堅持 1MiB 邊界建議。