Problèmes de montage de lecteurs HFS +

12

J'ai un problème pour monter certains disques hfsplus. J'ai juste besoin qu'ils soient montés en lecture seule. (désactiver le journal n'est pas une option) J'ai fait beaucoup de recherches et j'ai découvert qu'en raison des changements de la version 2.6.37 du noyau à la version 2.6.38, le problème a commencé.

Jetez un œil à ce lien sur bugs.launchpad.net .

Je l'ai donc testé avec la version 2.6.37 et inférieure du noyau Linux et cela a bien fonctionné comme il se doit.

Les versions ci-dessus, y compris ma version générique 3.2.0-54 (Ubuntu 12.04), ne fonctionnaient pas correctement avec le montage d'images et de disques hfsplus. J'ai donc besoin du module hfsplus d'une version de travail comme 2.6.31-14-generic de Ubuntu 9.

J'utilise ces commandes dans ce cas avec une image HFS + DD. Mais je l'ai fait avec d'autres lecteurs physiques hfsplus et d'autres images. Ils fonctionnent tous avec le noyau 2.6.37 et inférieur mais pas avec les versions plus récentes:

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

Je dois ajouter ces informations pour "prouver" que le problème est postérieur au noyau 2.6.38. Jetez un oeil à cela. Il s'agit d'un pilote NTFS et HFS + de 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

Pour résoudre le problème, je viens de copier /lib/modules/2.6.27/kernel/fs/hfsplus.kodans mon noyau générique 3.2.0-54 actuel. Mais ça n'a pas marché. Comment puis-je obtenir la partie hfsplus qui fonctionne dans mon noyau Ubuntu 12.04 générique 3.2.0-54 générique actuel? Ou comment réparer mon noyau pour qu'il fonctionne comme dans 2.6.37?

Le meilleur indice que j'ai vu était celui-ci .

Krayt
la source

Réponses:

18

Cette question est un peu ancienne mais je l'ai rencontrée en essayant de monter une partition HFS + dans les mêmes circonstances et j'ai trouvé la solution. Je ne sais pas trop comment cela est lié à la version du noyau, le mien est 3.13 (3.13.7-1 x86_64, Debian).

Réponse courte

Indiquez la taille de la partition ainsi que son décalage.

Longue réponse

Obtenez d'abord les informations de la partition de Parted, en octets; vous avez besoin des numéros de début et de taille. Voici un exemple de session Parted (comme vous pouvez le deviner, mon image de disque dur est /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

Si j'essaie de monter la partition en fournissant uniquement le décalage (démarrage), j'obtiens la même erreur que vous:

# 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

Au fait, vous n'avez pas besoin d'utiliser losetup, mount le fait automatiquement pour vous. Maintenant, si j'ajoute la taille de la partition (sizelimit), cela fonctionne parfaitement:

# 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
la source
4
votre solution prend en charge le message "en-tête de volume secondaire non valide" pour moi, mais l'erreur "impossible de trouver le HFS + superbloc" persiste :(
krumpelstiltskin
1
Toujours obtenir les deux erreurs dans dmesg même si j'ai spécifié à la fois offset et sizelimit
wkarl
pas clair quel devrait être le décalage - pour moi, la valeur Numberde mon appareil est 1, offset=1et les offset=0deux échouent
MichaelChirico
16

Pour toute autre personne tombant sur cette question tout en recherchant le même message d'erreur, notez qu'il existe une autre cause possible de cette erreur.

Alors que la réponse fournie par mcy devrait fonctionner si la partition est en fait une partition HFS +, à partir d'OSX Yosemite, le type de partition par défaut pour un Mac est "Core Storage", qui est utilisé pour gérer les volumes logiques. Cela signifie que ce que vous voulez réellement monter est un volume logique (en utilisant le système de fichiers HFS +) à l'intérieur de la partition "Core Storage".

Pour voir si votre partition est de type "Apple Core Storage" vous pouvez utiliser gdisk: AF05est le code pour "Apple Core Storage", tandis que af00est le code pour "Apple HFS / HFS +".

Si votre disque utilise "Apple Core Storage", vous pouvez utiliser le guide fourni dans cette réponse pour le monter.

lgpasquale
la source
1
Je vous remercie! C'était exactement le problème auquel j'étais confronté. La solution liée fonctionne bien.
Michael Ambrose