我在安装某些 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”类型,您可以使用gdisk
:AF05
是“Apple Core Storage”的代码,而af00
是“Apple HFS/HFS+”的代码。
如果您的磁盘使用“Apple Core Storage”,则可以使用这个答案来挂载它。
答案3
这里列出的两个答案对我没有帮助。相反,我安装了hfsprogs
:
$ sudo apt-get install hfsprogs
$ sudo fsck.hfsplus -f /dev/sdg2
完成后,只需在文件管理器中单击该驱动器即可正常安装它。