Fdisk

GPT 磁碟在外部對接托架和內部交換托架中看起來不同

  • March 28, 2021

我有一個硬碟,用於通過 USB 2.0 擴展塢進行備份。該磁碟有一個 GPT 和一個單獨的 ext4 分區。通過擴展塢一切都很好,但是如果我將磁碟連接到內部 SATA 埠,或者將其放入 PC 的交換托架中,GPT 就不再存在了。

這是磁碟在擴展塢中時得到的結果,一切正常:

$ sudo fdisk -l /dev/sdg
Disk /dev/sdg: 1.8 TiB, 2000398934016 bytes, 488378646 sectors
Disk model: 001-1CH164
Units: sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 2C0A0696-2318-4BBD-9329-0115AB5AC313
Device     Start       End   Sectors  Size Type
/dev/sdg1    512 488378367 488377856  1.8T Linux filesystem

$ sudo parted /dev/sdg print
Model: ST2000DM 001-1CH164 (scsi)
Disk /dev/sdg: 2000GB
Sector size (logical/physical): 4096B/4096B
Partition Table: gpt
Disk Flags:
Number  Start   End     Size    File system  Name      Flags
1      2097kB  2000GB  2000GB  ext4         MUSICBUP

以下是磁碟位於內部交換托架或任何其他內部 SATA 埠時相同命令的輸出:

$ sudo fdisk -l /dev/sdg
GPT PMBR size mismatch (488378645 != 3907029167) will be corrected by write.
Disk /dev/sdg: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors
Disk model: ST2000DM001-1CH1
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x00000000
Device     Boot Start        End    Sectors  Size Id Type
/dev/sdg1           1 3907029167 3907029167  1.8T ee GPT
Partition 1 does not start on physical sector boundary.

$ sudo parted /dev/sdg print
Error: /dev/sdg: unrecognised disk label
Model: ATA ST2000DM001-1CH1 (scsi)
Disk /dev/sdg: 2000GB
Sector size (logical/physical): 512B/4096B
Partition Table: unknown
Disk Flags:

版本:fdisk from util-linux 2.33.1parted (GNU parted) 3.2

作業系統:Debian 10 剋星4.19.0-14-amd64 #1 SMP Debian 4.19.171-2 (2021-01-30) x86_64 GNU/Linux

smartctl資訊(兩種情況相同):

=== START OF INFORMATION SECTION ===
Model Family:     Seagate Barracuda 7200.14 (AF)
Device Model:     ST2000DM001-1CH164
Serial Number:    Z1E6Q80D
LU WWN Device Id: 5 000c50 065bb1ceb
Firmware Version: CC27
User Capacity:    2,000,398,934,016 bytes [2.00 TB]
Sector Sizes:     512 bytes logical, 4096 bytes physical
Rotation Rate:    7200 rpm
Form Factor:      3.5 inches
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   ACS-2, ACS-3 T13/2161-D revision 3b
SATA Version is:  SATA 3.1, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is:    Sun Mar 28 13:00:17 2021 CEST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

我已經嘗試過:將分區向右移動,gparted以確保它與 MiB 對齊。這沒有幫助,實際上parted已經告訴我分區已最佳對齊(在對接時)。

我注意到的一件事是,在外部對接(4096)和內部(512)中,邏輯扇區大小不同。

當然,我將數據複製到其他地方,我可以在它連接到 PC 時重新格式化它,但我想從中學到一些東西,看看是否有辦法糾正目前的 GPT。有任何想法嗎?

不幸的是,GPT 仍然取決於邏輯扇區大小,在您的情況下它會有所不同:

Sector size (logical/physical): 4096 bytes / 4096 bytes
Sector size (logical/physical): 4096B/4096B

對比

Sector size (logical/physical): 512 bytes / 4096 bytes
Sector size (logical/physical): 512B/4096B

差異通常是因為某些控制器/USB 橋接器模擬了錯誤的扇區大小。

losetup您可以通過使用with--sector-size參數來解決它:

losetup --find --show --partscan --sector-size 4096 /dev/sdg

然後檢查/dev/loopXpY設備。

如果您獲得另一個不強制使用 4K 邏輯扇區大小的 USB 機箱,則必須為 512 字節扇區重新創建分區表。不可能創建一個適用於兩種扇區大小的分區表 - 您可以使用 LVM 來創建,但 LVM 不是分區表格式。

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