web-dev-qa-db-ja.com

OSXで作成されたZFSプールをLinuxシステムにインポートすることができません

テストプラットフォームとして機能するデュアルブートLinux/OSXラップトップ間で使用するさまざまなファイルシステムを実験しています。 BSDバリアントであるにもかかわらず、互換性のあるファイルシステムを見つけるのに多くの問題がありましたが、OpenZFSによる実装に落ち着きました。

最新のOpenZFS0.6.3-1が両方のシステムにインストールされています。私は最初、/ dev/disk0s6を使用してOSX内からプールを作成しました。ドライブをマウントして書き込み可能にすることで、OSXではすべてが正常に機能します。

$ zpool status
  pool: Data
 state: ONLINE
  scan: none requested
config:

    NAME        STATE     READ WRITE CKSUM
    Data        ONLINE       0     0     0
      disk0s6   ONLINE       0     0     0

errors: No known data errors

$ zpool import
   pool: Data
     id: 16636970642933363897
  state: ONLINE
 action: The pool can be imported using its name or numeric identifier.
 config:

    Data        ONLINE
      disk0s6   ONLINE

しかし、zpoolをエクスポートしてLinuxに再起動すると、-fを使用してもプールをインポートできません。

$ zpool import -f Data
cannot import 'Data': one or more devices are already in use

$ zpool import
   pool: Data
     id: 16636970642933363897
  state: UNAVAIL
 status: One or more devices contains corrupted data.
 action: The pool cannot be imported due to damaged devices or data.
   see: http://zfsonlinux.org/msg/ZFS-8000-5E
 config:

    Data                                         UNAVAIL  insufficient replicas
      ata-Corsair_Force_GT_135004090FF015790001  UNAVAIL

OSXを再起動すると、プールが破損しておらず、正常に読み込まれることがわかります。

私は何が間違っているのですか?

2
Zhro

OpenZFS GitHubで何人かの優秀な人々と多くのトラブルシューティングを行った後、これがバグであることを確認できます。

本当の問題は、ディスクの最後のパーティションを使用してプールを作成したことです。これは、Linuxでは、パーティションがディスクの端と十分に一致している場合、破損と混同される可能性があります。

ZFSは、冗長性のためにターゲットデバイス上に4つのラベルを作成し、最初に2つ、最後に2つ作成します。 Linuxを起動した後にZFSがディスクを評価すると、最初に/ dev/sdaが検出され、ディスクの最後(最後のパーティションから)の最後の2つのラベルと部分的に一致します。次に、ディスクの先頭にラベルがないため、デバイスが破損していると誤って判断します。

解決策は、ディスクの最後に少なくとも10MBの空き領域のバッファーを追加することでした。

詳細については、こちらをご覧ください: https://github.com/zfsonlinux/zfs/issues/2742

2
Zhro

わかりました。これは間違いなく、ZFSの経験が浅いためです。任意のコンテキストから特定のパーティションを参照できる従来のファイルシステムとは異なり、ZFSは、データの場所を参照するために使用される正確な情報を、どこからロードされても保持しているようです。

たとえば、zpoolを作成し、Linuxには存在しない「/ dev/disk0s6」によってOSXからデバイスを参照しました。/dev/disk0s6から/ dev/sda6へのシンボリックリンクを作成しましたが、すべて正常に動作します。

これらの質問を参照する:

冗長性のないZFS RAID0プール

再起動するとZFSミラーの片側が使用できなくなったのはなぜですか?

デバイスを参照するときに、移植性を考慮する必要があるように見えます。たとえば、2つのOS間で変更されないパーティションのUUIDを使用します。

この情報は、ZFSを初めて使用する他の人にも役立つと思います。

編集:この答えは間違っています!以下の正解をご覧ください。

1
Zhro