Ubuntu 16.04 XenialにバンドルされているOpenZFSを試してみます。
プールを作成するときは、回復力のために常に/dev/disk/by-id/
(またはFreeBSDでは/dev/disk/gpt
)のシリアルでドライブを参照します。マシンが再起動すると、ドライブは常に/dev
で同じ順序になるとは限りません。マシンに他のドライブがある場合、プールは正しくマウントできない場合があります。
たとえば、14.04ボックスでzpool status
を実行すると、次のようになります。
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
ata-Hitachi_HDS722020ALA330_[..] ONLINE 0 0 0
ata-Hitachi_HDS722020ALA330_[..] ONLINE 0 0 0
ata-Hitachi_HDS722020ALA330_[..] ONLINE 0 0 0
ata-Hitachi_HUA722020ALA330_[..] ONLINE 0 0 0
しかし、16.04にこれを使って新しいプールを作成すると(省略形)、次のようになります。
zpool create pool raidz \
/dev/disk/by-id/ata-Hitachi_HDS723030ALA640_[..] \
/dev/disk/by-id/ata-Hitachi_HDS723030ALA640_[..] \
/dev/disk/by-id/ata-Hitachi_HDS723030ALA640_[..] \
/dev/disk/by-id/ata-Hitachi_HDS723030ALA640_[..]
これはzpool status
で取得します。
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
sdf ONLINE 0 0 0
sde ONLINE 0 0 0
sdd ONLINE 0 0 0
sda ONLINE 0 0 0
Zpoolはシンボリックリンクを参照するのではなく、追跡したようです。
16.04でzpoolを強制して、プールの作成時にドライブ参照を尊重する方法はありますか?それとも、ここで何をしているのかについての私の不安は見当違いですか?
I スレッドを見つけました Github上のzfsonlinuxで回避策を提案しました。最初に/dev/sdX
デバイスを使用してzpoolを作成し、次にこれを実行します。
$ Sudo zpool export tank
$ Sudo zpool import -d /dev/disk/by-id -aN
可能であれば、最初のzpool create
でこれを実行できるようにしたいと思います。
私はこのスレッドが古いものであることを知っていますが、答えがあります。インポート後にキャッシュファイルを更新する必要があります。この例は、キャッシュファイルのデフォルトの場所を示しています。
$> Sudo zpool export POOL
$> Sudo zpool import -d /dev/disk/by-id POOL
$> Sudo zpool import -c /etc/zfs/zpool.cache
$> Sudo zpool status POOL
NAME STATE READ WRITE CKSUM
POOL ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
ata-Hitachi_HDS722020ALA330_[..] ONLINE 0 0 0
ata-Hitachi_HDS722020ALA330_[..] ONLINE 0 0 0
ata-Hitachi_HDS722020ALA330_[..] ONLINE 0 0 0
ata-Hitachi_HUA722020ALA330_[..] ONLINE 0 0 0
たまにzpool import -d /dev/disk/by-id
が機能しません。
複数の環境でこれに気づきました。私はいくつかの魔法のロジックを実行して物理的に接続されたZFSデバイスを表示するだけでなく、基本的にこれを実行するインポートスクリプトを持っています。
zpool import -d /dev/disk/by-id POOL
zpool export POOL
zpool import POOL
2回目は、-d
スイッチがなくても、明示的なコマンドを使用して1回目でなくても、デバイスIDでインポートされます。
これは、数週間または1か月の期間(1年または2年前)のZFSバグが原因であった可能性があり、これは不要になりました。バグレポートを提出すべきだったと思いますが、回避するのは簡単でした。