web-dev-qa-db-ja.com

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

問題がカーネル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カーネルに。しかし、それはうまくいきませんでした。現在の3.2.0-54-genericカーネルubuntu 12.04 linuxにhfsplusの機能部分を組み込むにはどうすればよいですか?または、2.6.37のように動作するようにカーネルを修正するにはどうすればよいですか?

私が見た最高のヒントは これ でした。

12
Krayt

この質問は少し古いですが、同じ状況で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

オフセット(開始)のみを指定してパーティションをマウントしようとすると、同じエラーが表示されます。

# 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)
18
mcy

同じエラーメッセージを探しているときにこの質問に出くわした他の人にとって、このエラーには別の考えられる原因があることに注意してください。

パーティションが実際にHFS +パーティションである場合、mcyによって提供される回答は機能するはずですが、OSX Yosemite以降、Macのデフォルトのパーティションタイプは、論理ボリュームの処理に使用される「コアストレージ」です。つまり、実際にマウントしたいのは、「Core Storage」パーティション内の論理ボリューム(HFS +ファイルシステムを使用)です。

パーティションのタイプが「Apple Core Storage」であるかどうかを確認するには、gdiskを使用できます:AF05は「Apple Core Storage」のコードですが、af00は「Apple HFS/HFS +」のコードです。

ディスクが「Apple Core Storage」を使用している場合は、 この回答 で提供されているガイドを使用してマウントできます。

16
lgpasquale