我有一个 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 使用另一个值?
答案1
虽然有点晚了,但我的 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
现在我们必须计算分区的位置,此时扇区大小仍然为 4096 字节:
63 sectors * 4096 bytes = 258048 bytes
并将其与以下内容一起使用losetup
:
$ sudo losetup /dev/loop0 /dev/sdb -o 258048
$ sudo mount /dev/loop0 /mnt
您的分区现在应该被挂载在/mnt
。
对于长期修复,我曾经sfdisk
转储分区布局:
$ sudo sfdisk -d /dev/sdb > sdb.partitions.sfdisk.text
通过在适当的位置将起始扇区乘以 8 来修复分区表 - 在这里我意识到我的分区表从一开始就有点混乱。
我使用以下命令编辑了分区表转储nano sdb.partitions.sfdisk.text
:
/dev/sdb1 : start= 63, size=623708785, Id=83
到:
/dev/sdb1 : start= 504, size=623708785, Id=83
然后扩展分区以使用所有可用空间(我通过其他方式确定):
/dev/sdb1 : start= 504, size=625141944, Id=83
最后一步是使用以下命令写回分区表:
$ sudo sh -c 'cat sdb.partitions.sfdisk.text | sfdisk /dev/sdb'
答案2
获取临时访问权限的另一种方法(实际上改进了此处提到的方法)是使用losetup
和kpartx
。这是我所做的:
losetup -f /dev/sdl
kpartx -a /dev/loop2
现在我们可以使用/dev/mapper/loop2pX
而不是/dev/sdlX
。
答案3
这是当今大容量(>= 512 GB)外置硬盘的常见功能。扇区大小由外置硬盘外壳中的 USB 板转换,此技巧似乎用于兼容各种操作系统(如旧版 Windows XP)。
Saikee 对此进行了彻底的测试和描述: http://forums.justlinux.com/showthread.php?153881-3TB-硬盘用作外部USB连接或内部Sata连接
关于您的第二个问题,我没有找到任何人可以改变并修复此行为,即使理论上似乎是可能的,但驱动器不会接受写入。
答案4
像 WD 品牌这样的新外置硬盘使用预定义格式。因此,结果无论如何都不能保证。如果您仍想尝试,我建议低级格式化。这可能或不得工作。