我在 Arch Linux 上安装 hfs+ 分区时遇到了一些问题。
当我运行时sudo mount -t hfsplus /dev/sda2 /mnt/mac
出现此错误:
mount: wrong fs type, bad option, bad superblock on /dev/sda2,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so.
跑步dmesg | tail
可得:
[ 6645.183965] cfg80211: Calling CRDA to update world regulatory domain
[ 6648.331525] cfg80211: Calling CRDA to update world regulatory domain
[ 6651.479107] cfg80211: Calling CRDA to update world regulatory domain
[ 6654.626663] cfg80211: Calling CRDA to update world regulatory domain
[ 6657.774207] cfg80211: Calling CRDA to update world regulatory domain
[ 6660.889864] cfg80211: Calling CRDA to update world regulatory domain
[ 6664.007521] cfg80211: Exceeded CRDA call max attempts. Not calling CRDA
[ 6857.870580] perf interrupt took too long (2503 > 2495), lowering kernel.perf_event_max_sample_rate to 50100
[11199.621246] hfsplus: invalid secondary volume header
[11199.621251] hfsplus: unable to find HFS+ superblock
有没有办法挂载这个分区?
编辑:
使用sudo mount -t hfsplus -o ro,loop,offset=409640,sizelimit=879631488 /dev/sda2 /mnt/mac
摆脱hfsplus: invalid secondary volume header
dmesg | tail
答案1
很可能是因为 HFS 卷未挂载,所以 HFS 分区被包装在 CoreStorage 卷中(自 OS X 10.10 以来为默认设置)。您可以使用以下输出来验证是否是这种情况fdisk -l
:
HFS+ 使用两个卷标头,一个 1024 插入设备,另一个从设备末端开始的次级 1024。根据规范,安装分区时,次级标头应正好位于分区末尾的 1024 字节处,但由于 CoreStorage 包装了 HFS 卷,情况不再如此,因此它会中止。您可以传递-o sizelimit=N
到mount
以手动指定 HFS 卷大小并修复此问题,但如何获取的魔法值N
?
该testdisk
实用程序可以扫描分区,提示 HFS 分区的真正结束位置。要小心——在 testdisk 中选择错误的选项可能会损坏您的分区表!
- 使用 启动 TestDisk
testdisk /dev/sdX
,然后OK
选择驱动器 - 选择
Intel
MBR 或EFI GPT
GPT 格式的驱动器 - 按
Analyse
然后Quick Search
-
所指示的分区看起来非常接近(但略小)之前报告的实际分区大小 623463232 个扇区
fdisk -l
。由于 TestDisk 输出使用扇区,我们需要将其乘以驱动器的逻辑扇区大小(通常为 512 或 4096 字节)以获得 HFS 卷大小(以字节为单位)。这是我们在安装 HFS 卷时
N
将使用的值。-o sizelimit=N
按
q
几次退出程序- 挂载磁盘:
mount /dev/sdXn -t hfsplus -o ro,sizelimit=N
答案2
另一个选择是,如果您有 OS X 计算机,则删除 CoreStorage。如果您正在使用解密,这也会删除解密,并且您必须等到解密完成(插入电源并启动 OS X,甚至恢复)。
您需要启动到您未想到的磁盘,最好是互联网恢复(如果可用,重启时按 command-option-r)。打开终端并执行以下操作:
diskutil cs list
输出应显示您的 CoreStorage 卷和所有内容,其中一个是其可恢复状态。如果它显示是,那么您就可以继续。接下来您将运行:
diskutil cs revert /dev/ diskXsY
(其中 X 是磁盘号,Y 是分区号)。
之后,您可以使用相同的“diskutil cs list”命令检查其状态。如果它未加密,它应该已经恢复为标准 GPT 分区布局,您可以尝试在 Arch 中再次安装它。它应该仍被记录,这将使其保持只读状态,如果您想切换,您可以在磁盘实用程序中执行此操作。
如果它是加密的,该过程将需要一段时间,但“diskutil cs list”将以百分比形式显示进度。
我自己在 Arch 上安装非 CoreStorage HFS+ 驱动器和分区时没有遇到任何问题。我最终移动了数据,重新分区为 ext4,然后将数据移回它们。