テストプラットフォームとして機能するデュアルブート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を再起動すると、プールが破損しておらず、正常に読み込まれることがわかります。
私は何が間違っているのですか?
OpenZFS GitHubで何人かの優秀な人々と多くのトラブルシューティングを行った後、これがバグであることを確認できます。
本当の問題は、ディスクの最後のパーティションを使用してプールを作成したことです。これは、Linuxでは、パーティションがディスクの端と十分に一致している場合、破損と混同される可能性があります。
ZFSは、冗長性のためにターゲットデバイス上に4つのラベルを作成し、最初に2つ、最後に2つ作成します。 Linuxを起動した後にZFSがディスクを評価すると、最初に/ dev/sdaが検出され、ディスクの最後(最後のパーティションから)の最後の2つのラベルと部分的に一致します。次に、ディスクの先頭にラベルがないため、デバイスが破損していると誤って判断します。
解決策は、ディスクの最後に少なくとも10MBの空き領域のバッファーを追加することでした。
詳細については、こちらをご覧ください: https://github.com/zfsonlinux/zfs/issues/2742
わかりました。これは間違いなく、ZFSの経験が浅いためです。任意のコンテキストから特定のパーティションを参照できる従来のファイルシステムとは異なり、ZFSは、データの場所を参照するために使用される正確な情報を、どこからロードされても保持しているようです。
たとえば、zpoolを作成し、Linuxには存在しない「/ dev/disk0s6」によってOSXからデバイスを参照しました。/dev/disk0s6から/ dev/sda6へのシンボリックリンクを作成しましたが、すべて正常に動作します。
これらの質問を参照する:
再起動するとZFSミラーの片側が使用できなくなったのはなぜですか?
デバイスを参照するときに、移植性を考慮する必要があるように見えます。たとえば、2つのOS間で変更されないパーティションのUUIDを使用します。
この情報は、ZFSを初めて使用する他の人にも役立つと思います。
編集:この答えは間違っています!以下の正解をご覧ください。