Probleme beim Mounten von HFS + -Laufwerken

12

Ich habe ein Problem beim Mounten einiger hfsplus-Laufwerke. Ich brauche sie nur schreibgeschützt. (Das Deaktivieren des Journals ist keine Option.) Ich habe viel recherchiert und festgestellt, dass das Problem aufgrund von Änderungen von Kernel-Version 2.6.37 auf 2.6.38 begann.

Schauen Sie sich diesen Link unter bugs.launchpad.net an .

Also habe ich es mit Linux Kernel Version 2.6.37 und niedriger getestet und es hat gut funktioniert, wie es sollte.

Die obigen Versionen, einschließlich meiner Version 3.2.0-54-generisch (Ubuntu 12.04), funktionierten beim Mounten von hfsplus-Images und -Disketten nicht einwandfrei. Ich brauche also das hfsplus-Modul aus einer funktionierenden Version wie 2.6.31-14-generic von Ubuntu 9.

Ich benutze diese Befehle in diesem Fall mit einem HFS + DD-Image. Aber ich habe dies mit anderen physischen hfsplus-Laufwerken und anderen Images gemacht. Sie funktionieren alle mit Kernel 2.6.37 und niedriger, jedoch nicht mit neueren Versionen:

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

Ich muss diese Informationen hinzufügen, um zu "beweisen", dass das Problem nach Kernel 2.6.38 liegt. Guck dir das an. Das ist ein NTFS- und HFS + -Treiber von Paragon.

"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

Um das Problem zu beheben, habe ich gerade /lib/modules/2.6.27/kernel/fs/hfsplus.koauf meinen aktuellen 3.2.0-54-generischen Kernel kopiert . Das hat aber nicht funktioniert. Wie bekomme ich den funktionierenden hfsplus-Teil in mein aktuelles 3.2.0-54-generisches Kernel-Ubuntu 12.04-Linux? Oder wie kann ich meinen Kernel so reparieren, dass er genau wie in 2.6.37 funktioniert?

Der beste Hinweis, den ich gesehen habe, war dieser .

Krayt
quelle

Antworten:

18

Diese Frage ist etwas alt, aber ich bin darauf gestoßen, als ich unter den gleichen Umständen versucht habe, eine HFS + -Partition bereitzustellen, und habe die Lösung gefunden. Ich bin nicht ganz sicher, wie es mit der Kernel-Version zusammenhängt, meine ist 3.13 (3.13.7-1 x86_64, Debian).

Kurze Antwort

Geben Sie die Größe der Partition sowie deren Versatz an.

Lange Antwort

Holen Sie sich zuerst die Informationen der Partition von Parted in Bytes. Sie benötigen die Start- und die Größen-Nummern. Hier ist ein Beispiel für eine getrennte Sitzung (wie Sie sich vorstellen können, lautet mein Festplatten-Image /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

Wenn ich versuche, die Partition nur mit dem Offset (Start) bereitzustellen, wird der gleiche Fehler wie bei Ihnen angezeigt:

# 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

Übrigens müssen Sie losetup nicht verwenden, mount erledigt das automatisch für Sie. Wenn ich nun die Größe der Partition hinzufüge (sizelimit), funktioniert es perfekt:

# 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)
mcy
quelle
4
Ihre Lösung kümmert sich um die Meldung "Ungültiger sekundärer Volume-Header" für mich, aber der Fehler "HFS + Superblock kann nicht gefunden werden" bleibt bestehen :(
krumpelstiltskin
1
Immer noch beide Fehler in dmesg bekommen, obwohl ich sowohl Offset als auch Sizelimit angegeben habe
wkarl
nicht klar, wie Numberoffset=1offset=0
hoch
16

Beachten Sie, dass alle anderen Personen, die auf diese Frage stoßen, während sie nach derselben Fehlermeldung suchen, eine andere mögliche Ursache für diesen Fehler haben.

Während die von mcy bereitgestellte Antwort funktionieren sollte, wenn die Partition tatsächlich eine HFS + -Partition ist, lautet der Standardpartitionstyp für einen Mac ab OSX Yosemite "Core Storage", der für die Verarbeitung logischer Volumes verwendet wird. Dies bedeutet, dass Sie tatsächlich ein logisches Volume (mit HFS + -Dateisystem) in der Partition "Core Storage" bereitstellen möchten.

Um festzustellen, ob Ihre Partition vom Typ "Apple Core Storage" ist, können Sie Folgendes verwenden gdisk: AF05ist der Code für "Apple Core Storage", während af00der Code für "Apple HFS / HFS +" ist.

Wenn Ihre Festplatte "Apple Core Storage" verwendet, können Sie sie mithilfe der in dieser Antwort enthaltenen Anleitung bereitstellen.

lgpasquale
quelle
1
Vielen Dank! Dies war genau das Problem, mit dem ich konfrontiert war. Verknüpfte Lösung funktioniert gut.
Michael Ambrose