Ubuntu 14.04をアップグレードしたところ、サーバー上に2つのZFSプールがありました。 ZFSドライバーとカーネルバージョンとの戦いでいくつかの小さな問題がありましたが、それは現在解決されています。 1つのプールがオンラインになり、正常にマウントされました。他はしませんでした。ツールの主な違いは、1つはディスクのプール(ビデオ/音楽ストレージ)であり、もう1つはraidzセット(ドキュメントなど)でした。
私はすでにプールのエクスポートと再インポートを試みましたが、役に立ちませんでした。インポートしようとすると、次のようになります。
root@kyou:/home/matt# zpool import -fFX -d /dev/disk/by-id/
pool: storage
id: 15855792916570596778
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:
storage UNAVAIL insufficient replicas
raidz1-0 UNAVAIL insufficient replicas
ata-SAMSUNG_HD103SJ_S246J90B134910 UNAVAIL
ata-WDC_WD10EARS-00Y5B1_WD-WMAV51422523 UNAVAIL
ata-WDC_WD10EARS-00Y5B1_WD-WMAV51535969 UNAVAIL
/dev/disk/by-id
にあるもののシンボリックリンクも存在します。
root@kyou:/home/matt# ls -l /dev/disk/by-id/ata-SAMSUNG_HD103SJ_S246J90B134910* /dev/disk/by-id/ata-WDC_WD10EARS-00Y5B1_WD-WMAV51*
lrwxrwxrwx 1 root root 9 May 27 19:31 /dev/disk/by-id/ata-SAMSUNG_HD103SJ_S246J90B134910 -> ../../sdb
lrwxrwxrwx 1 root root 10 May 27 19:15 /dev/disk/by-id/ata-SAMSUNG_HD103SJ_S246J90B134910-part1 -> ../../sdb1
lrwxrwxrwx 1 root root 10 May 27 19:15 /dev/disk/by-id/ata-SAMSUNG_HD103SJ_S246J90B134910-part9 -> ../../sdb9
lrwxrwxrwx 1 root root 9 May 27 19:15 /dev/disk/by-id/ata-WDC_WD10EARS-00Y5B1_WD-WMAV51422523 -> ../../sdd
lrwxrwxrwx 1 root root 10 May 27 19:15 /dev/disk/by-id/ata-WDC_WD10EARS-00Y5B1_WD-WMAV51422523-part1 -> ../../sdd1
lrwxrwxrwx 1 root root 10 May 27 19:15 /dev/disk/by-id/ata-WDC_WD10EARS-00Y5B1_WD-WMAV51422523-part9 -> ../../sdd9
lrwxrwxrwx 1 root root 9 May 27 19:15 /dev/disk/by-id/ata-WDC_WD10EARS-00Y5B1_WD-WMAV51535969 -> ../../sde
lrwxrwxrwx 1 root root 10 May 27 19:15 /dev/disk/by-id/ata-WDC_WD10EARS-00Y5B1_WD-WMAV51535969-part1 -> ../../sde1
lrwxrwxrwx 1 root root 10 May 27 19:15 /dev/disk/by-id/ata-WDC_WD10EARS-00Y5B1_WD-WMAV51535969-part9 -> ../../sde9
リストされているさまざまな/dev/sd*
デバイスを調べると、それらは正しいデバイスであるように見えます(raidzアレイにあった3つの1TBドライブ)。
各ドライブでzdb -l
を実行し、ファイルにダンプして、差分を実行しました。 3つの唯一の違いはGUIDフィールドです(これは予想されると思います)。それぞれの3つのラベルはすべて基本的に同一であり、次のとおりです。
version: 5000
name: 'storage'
state: 0
txg: 4
pool_guid: 15855792916570596778
hostname: 'kyou'
top_guid: 1683909657511667860
guid: 8815283814047599968
vdev_children: 1
vdev_tree:
type: 'raidz'
id: 0
guid: 1683909657511667860
nparity: 1
metaslab_array: 33
metaslab_shift: 34
ashift: 9
asize: 3000569954304
is_log: 0
create_txg: 4
children[0]:
type: 'disk'
id: 0
guid: 8815283814047599968
path: '/dev/disk/by-id/ata-SAMSUNG_HD103SJ_S246J90B134910-part1'
whole_disk: 1
create_txg: 4
children[1]:
type: 'disk'
id: 1
guid: 18036424618735999728
path: '/dev/disk/by-id/ata-WDC_WD10EARS-00Y5B1_WD-WMAV51422523-part1'
whole_disk: 1
create_txg: 4
children[2]:
type: 'disk'
id: 2
guid: 10307555127976192266
path: '/dev/disk/by-id/ata-WDC_WD10EARS-00Y5B1_WD-WMAV51535969-part1'
whole_disk: 1
create_txg: 4
features_for_read:
愚かなことに、私はこのプールの最近のバックアップを持っていません。ただし、再起動前はプールは正常であり、Linuxはディスクを正常に認識します(smartctlを実行して再確認しています)
したがって、要約すると:
/dev/disk/by-id/
から参照されるディスクを使用して作成されました。/dev/disk/by-id
からさまざまな/dev/sd
デバイスへのシンボリックリンクは正しいようですzdb
は、ドライブからラベルを読み取ることができます。これらのディスクを適切なアレイに戻すためにzpool/zfsを介して呼び出すことができるある種の黒魔術はありますか?データを失うことなくzpool create zraid ...
を実行できますか?とにかく私のデータはなくなっていますか?
私が得ていたこの特定のエラーメッセージを何度もグーグルした後:
root@kyou:/home/matt# zpool import -f storage
cannot import 'storage': one or more devices are already in use
(後世と検索インデックスのためにここに含まれています)私はこれを見つけました:
https://groups.google.com/a/zfsonlinux.org/forum/#!topic/zfs-discuss/VVEwd1VFDmc
同じパーティションを使用していて、ZFSがロードされる前のブート中にそれらをmdraidに追加していました。
dmesg
にいくつかのmdadm行が表示されたことを思い出しました。
root@kyou:/home/matt# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md126 : active raid5 sdd[2] sdb[0] sde[1]
1953524992 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]
これらのドライブは、かつて、ソフトウェアRAID5アレイの一部でした。何らかの理由で、アップグレード中にドライブを再スキャンすることを決定し、ドライブがかつてmd配列の一部であったことを発見し、それを再作成することを決定しました。これは次のように検証されました:
root@kyou:/storage# mdadm --examine /dev/sd[a-z]
これらの3つのドライブは、多くの情報を示しました。今のところ、アレイを停止します。
root@kyou:/home/matt# mdadm --stop /dev/md126
mdadm: stopped /dev/md126
そして、インポートを再実行します。
root@kyou:/home/matt# zpool import -f storage
アレイをオンラインに戻しました。
次に、バックアップ用にそのプールのスナップショットを作成し、それらに対してmdadm --zero-superblock
を実行します。
Ubuntuにはいくつかの 厄介なudevの問題 がありますが、Red Hat/CentOS側には見られません。可能であれば、WWNベースのデバイス名を使用することをお勧めします。これは、影響を受けにくいように思われるためです。
見たことがありますか: 再起動するとZFSミラーの片側が使用できなくなったのはなぜですか?
Debian Wheezyで3.13シリーズのカーネルにアップグレードしようとすると、ほぼこの問題に遭遇しました。あなたはあなたのコメントに正しいです。これはudevのバグです。残念ながら、ソートすることはできませんでしたが、0.6.2バージョンのZOLとの互換性については、他のカーネル、特に3.11シリーズを調べる価値があります。 0.6.3が出るまで、古いカーネルを使用してください。