安装 HFS+ 驱动器的问题

Kra*_*ayt 13 linux mount kernel ubuntu hfs+

我在安装一些 hfsplus 驱动器时遇到问题。我只需要它们以只读方式安装。(禁用日志不是一种选择)我做了很多研究,发现由于从内核版本 2.6.37 到 2.6.38 的更改,问题开始了。

在 bugs.launchpad.net 上查看此链接。

因此,我使用 Linux 内核版本 2.6.37 及更低版本对其进行了测试,它应该可以正常工作。

以上版本,包括我的 3.2.0-54-generic(ubuntu 12.04) 版本在安装 hfsplus 图像和磁盘时无法正常工作。所以我需要来自 ubuntu 9 的 2.6.31-14-generic 等工作版本的 hfsplus 模块。

在这种情况下,我将这些命令与 HFS+ DD 图像一起使用。但是我使用其他 hfsplus 物理驱动器和其他图像进行了此操作。它们都适用于内核 2.6.37 及更低版本,但不适用于较新版本:

sudo losetup -d /dev/loop0
sudo losetup /dev/loop0 -o $((512*409640)) /folder/iMac_21.dd

sudo mount -t hfsplus /dev/loop0 /mnt/hfs
mount: wrong fs type, bad option, bad superblock on /dev/loop0,
missing codepage or helper program, or other error

dmesg | tail
[84980.380254] hfs: invalid secondary volume header
Run Code Online (Sandbox Code Playgroud)

我必须将此信息添加到“证明”问题出在内核 2.6.38 之后。看看这个。那是 Paragon 的 NTFS 和 HFS+ 驱动程序。

"What's new in Paragon NTFS & HFS+ for Linux 8.5:
Support for modern Linux Kernels (up to 2.6.38);"
paragon-software.com/home/ntfs-linux-per/features.html
Run Code Online (Sandbox Code Playgroud)

为了解决这个问题,我刚刚复制/lib/modules/2.6.27/kernel/fs/hfsplus.ko到我当前的 3.2.0-54-generic 内核。但这没有用。如何将工作 hfsplus 部分放入我当前的 3.2.0-54-generic 内核 ubuntu 12.04 linux?或者如何修复我的内核使其像 2.6.37 一样工作?

我确实看到的最好的提示是这个

小智 18

这个问题有点老了,但我在相同情况下尝试挂载 HFS+ 分区时遇到了它,并找到了解决方案。我不太确定它与内核版本有什么关系,我的是 3.13(3.13.7-1 x86_64,Debian)。

简答

提供分区的大小及其偏移量。

长答案

首先从 Parted 中获取分区的信息,以字节为单位;你需要开始和大小数字。这是 Parted 会话的示例(您可以猜到,我的硬盘映像是 /mnt/macbook.dd):

$ /sbin/parted /mnt/macbook.dd
WARNING: You are not superuser.  Watch out for permissions.
GNU Parted 2.3
Using /mnt/macbook.dd
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) unit
Unit?  [compact]? b
(parted) p
Model:  (file)
Disk /mnt/macbook.dd: 160041885696B
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start       End            Size           File system  Name                  Flags
 1      20480B      209735679B     209715200B     fat32        EFI system partition  boot
 2      209735680B  159907647487B  159697911808B  hfs+         Customer
Run Code Online (Sandbox Code Playgroud)

如果我尝试通过仅提供偏移量(开始)来挂载分区,则会收到与您相同的错误:

# mount -v -t hfsplus -o ro,loop,offset=209735680 /mnt/macbook.dd /media/mac
mount: enabling autoclear loopdev flag
mount: going to use the loop device /dev/loop0
mount: wrong fs type, bad option, bad superblock on /dev/loop0,
       missing codepage or helper program, or other error
       In some cases useful info is found in syslog - try
       dmesg | tail  or so
# dmesg | tail -n2
[117791.463123] hfsplus: invalid secondary volume header
[117791.463132] hfsplus: unable to find HFS+ superblock
Run Code Online (Sandbox Code Playgroud)

顺便说一句,您不需要使用 lossup,mount 会自动为您完成。现在,如果我添加分区的大小(sizelimit),它就可以完美运行:

# mount -v -t hfsplus -o ro,loop,offset=209735680,sizelimit=159697911808 /mnt/macbook.dd /media/mac
mount: enabling autoclear loopdev flag
mount: going to use the loop device /dev/loop0
/mnt/macbook.dd on /media/mac type hfsplus (ro,offset=209735680,sizelimit=159697911808)
Run Code Online (Sandbox Code Playgroud)

  • 您的解决方案为我处理了“无效的二级卷标头”消息,但“无法找到 HFS+ 超级块”错误仍然存​​在:( (6认同)
  • 即使我指定了偏移量和大小限制,在 dmesg 中仍然出现两个错误 (2认同)

小智 18

对于在查找相同错误消息时遇到此问题的任何其他人,请注意此错误还有另一个可能的原因。

如果分区实际上是 HFS+ 分区,mcy 提供的答案应该可以工作,但从 OSX Yosemite 开始,Mac 的默认分区类型是“核心存储”,用于处理逻辑卷。这意味着您实际想要挂载的是“核心存储”分区内的逻辑卷(使用 HFS+ 文件系统)。

要查看您的分区是否属于“Apple Core Storage”类型,您可以使用gdiskAF05是“Apple Core Storage”af00的代码,而是“Apple HFS/HFS+”的代码。

如果您的磁盘使用“Apple Core Storage”,您可以使用本答案中提供的指南来安装它。