简短回答

简短回答

我在安装某些 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

我必须添加此信息来“证明”问题出在内核 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

为了修复这个问题,我刚刚复制/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 中一样工作?

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

答案1

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

简短回答

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

长答案

首先从 Parted 获取分区信息(以字节为单位);您需要 Start 和 Size 数字。以下是 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

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

# 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

顺便说一句,您不需要使用 losetup,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)

答案2

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

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

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

如果您的磁盘使用“Apple Core Storage”,则可以使用这个答案来挂载它。

答案3

这里列出的两个答案对我没有帮助。相反,我安装了hfsprogs

$ sudo apt-get install hfsprogs 

$ sudo fsck.hfsplus -f /dev/sdg2

完成后,只需在文件管理器中单击该驱动器即可正常安装它。

相关内容