逻辑扇区大小根据是通过 USB 还是直接 SATA 连接而变化

use*_*404 4 linux hard-drive partitioning gpt advanced-format

我有一个 3TB WD 磁盘(在 My Book Essential 外置驱动器中)。我在 Linux 下使用 parted 用 GPT 磁盘标签对其进行分区,并通过 USB 电缆从我的笔记本电脑加载数据。然后我打开它并切换到另一台计算机(台式机)上的内部 SATA 驱动器。

Linux(两台计算机上的 Fedora 14)无法识别该磁盘。parted 表示无法识别的磁盘标签。它还报告逻辑扇区大小为 512 字节:“扇区大小(逻辑/物理):512 字节/4096 字节。当我通过 USB 将它连接到我的笔记本电脑时,它被报告为 4096/4096。

我试图通过将所有扇区偏移量乘以 8 来重新分区它,但它仍然无法识别数据。(并不是说我非常惊讶。)

如果我在台式机上切换到 USB 连接,它会切换回 4096 字节的逻辑扇区。所以看起来是 USB 控制器板使它使用 4096 字节的逻辑扇区。老实说,考虑到它是硬件扇区大小,4096 对我来说更有意义,但是有没有办法让 USB 或 SATA 使用另一个值?

小智 8

有点晚了,但在我的 IOMEGA 硬盘盒的 USB 端口断开后,我遇到了类似的问题。我切换到另一个 USB-2-SATA 机箱只是为了发现,我无法安装 EXT4 分区。出于某种原因,IOMEGA 案例报告的逻辑扇区大小为 4096,但我的新案例说它只有 512 字节。这搞砸了 MS-DOS 分区表。

这让我发疯了,因为testdisk在更改扇区大小时,我能够访问分区,但我发现无法在系统范围内更改扇区大小。事实证明,这不是必需的,因为 EXT4 不关心扇区大小,您只需找到要访问的分区的开头即可。

快速修复:使用环回设备移动到分区的正确位置。

永久修复:相应地重写分区表。

在我的情况下,受影响的驱动器是/dev/sdb.

我的快速修复相对容易,因为我只有一个从扇区 63 开始的分区。

$ sudo sfdisk -d /dev/sdb
# partition table of /dev/sdb
unit: sectors

/dev/sdb1 : start=       63, size=623708785, Id=83
Run Code Online (Sandbox Code Playgroud)

现在我们必须计算分区的位置,当扇区大小仍然是 4096 字节时:

63 sectors * 4096 bytes = 258048 bytes
Run Code Online (Sandbox Code Playgroud)

并将其用于losetup

$ sudo losetup /dev/loop0 /dev/sdb -o 258048
$ sudo mount /dev/loop0 /mnt
Run Code Online (Sandbox Code Playgroud)

您的分区现在应该安装在/mnt.

对于长期修复,我曾经sfdisk转储分区布局:

$ sudo sfdisk -d /dev/sdb > sdb.partitions.sfdisk.text
Run Code Online (Sandbox Code Playgroud)

通过在适当的情况下将起始扇区乘以 8 来修复分区表——在这里我意识到我的分区表从一开始就有点搞砸了。

我编辑了分区表转储nano sdb.partitions.sfdisk.text

/dev/sdb1 : start=       63, size=623708785, Id=83
Run Code Online (Sandbox Code Playgroud)

到:

/dev/sdb1 : start=      504, size=623708785, Id=83
Run Code Online (Sandbox Code Playgroud)

然后扩展分区以使用所有可用空间(我通过其他方式确定):

/dev/sdb1 : start=      504, size=625141944, Id=83
Run Code Online (Sandbox Code Playgroud)

最后一步是写回分区表:

$ sudo sh -c 'cat sdb.partitions.sfdisk.text | sfdisk /dev/sdb'
Run Code Online (Sandbox Code Playgroud)