技術

ZFSのプールのデバイス名がおかしくなった

FreeNAS 8が出た後もFreeNAS Legacyとして開発が継続していたFreeNAS 0.7系が、最近NAS4Freeという名前に変わりましたね(もしくはフォークした?FreeNAS 0.7系のプロジェクトを直接的に継承したもののようです。)。
私も少し前にLegacyからNAS4Freeにアップグレードしました。
WebGUIから普通にアップグレード出来たので本当に中身はあまり変わってないみたいです。

で、NAS4Freeをしばらく使ってたんですが、ある日ZFSのプールを確認してみると1つだけデバイス名がおかしくなってる事に気づきました。
(先に書いておきますが、この問題の原因はNAS4Freeではないです。)

freenas:~# zpool status tank
  pool: tank
 state: ONLINE
  scan: resilvered 44K in 0h0m with 0 errors on Sun Nov 25 22:19:43 2012
config:

	NAME                     STATE     READ WRITE CKSUM
	tank                     ONLINE       0     0     0
	  raidz2-0               ONLINE       0     0     0
	    ada2                 ONLINE       0     0     0
	    ada3                 ONLINE       0     0     0
	    ada5                 ONLINE       0     0     0
	    ada6                 ONLINE       0     0     0
	    ada7                 ONLINE       0     0     0
	    ext2fs/aaa           ONLINE       0     0     0

errors: No known data errors

(resilveredの時間がおかしいのはすぐにキャンセルしたから。)

なんだよ ext2fs/aaa って!
上の結果から予想するに、 ext2fs/aaa という謎のデバイスが ada4 のフリをしてるみたいだけど、プールは普通に使えてるという。
でもさ、ZFSのプールの構成ディスクなわけだからext2fsな訳ないじゃんw

とにかくext2fsというのは置いといて、aaaというのはGEOM LABELで付けたラベルっぽいし、aaaという適当な名前からも自分で設定して忘れてる可能性大だと判断しました。

freenas:~# glabel status
                  Name  Status  Components
            ext2fs/aaa     N/A  ada4
            (以下略)

freenas:~# glabel list ada4
Geom name: ada4
Providers:
1. Name: ext2fs/aaa
   Mediasize: 2000398934016 (1.8T)
   Sectorsize: 512
   Stripesize: 4096
   Stripeoffset: 0
   Mode: r0w0e0
   secoffset: 0
   offset: 0
   seclength: 3907029168
   length: 2000398934016
   index: 0
Consumers:
1. Name: ada4
   Mediasize: 2000398934016 (1.8T)
   Sectorsize: 512
   Stripesize: 4096
   Stripeoffset: 0
   Mode: r0w0e0

で、確認してみたら案の定GEOM LABELだったので消してみることにしました。

freenas:~# zpool export tank
freenas:~# glabel destroy aaa
freenas:~# glabel status
                  Name  Status  Components
            (略)

ラベルが消えたっぽいので再起動したが、なんと ext2fs/aaa が復活w

manで調べたら glabel destroy は This command does not touch on-disk metadata! と書いてあるので永続的に反映されないみたいです。

clear なら ディスクのメタデータを弄ってくれるらしいので使ってみました。

freenas:~# zpool export tank
freenas:/# glabel clear ada4
Can't clear metadata on ada4: Invalid argument.
glabel: Not fully done.

実行できない。どゆこと〜?

検索したらこういう記事を発見しました。
ほんのり技術系のブログ

少々問題が違うんですが、そのなかでGEOMのメタデータを消す方法として、 dd でパーティションの情報を消す。なんて少々荒っぽい方法が載ってたんですが、まぁraidz2だしディスク1台分データが消えても問題ないよねということで、思い切って実行してみました。

freenas:~# glabel destroy aaa
freenas:~# glabel status
                  Name  Status  Components
            (略)
freenas:~# dd if=/dev/zero of=/dev/ada4 bs=512 count=1 skip=1

しかしこれで再起動してもだめ。
(ちなみに、リンク先と同じくZFSのプールには影響無いみたいでした。)

調べてみると、「glabel label ラベル名 デバイス名」でラベルを付けた場合は、 /dev/label/ラベル名 になるらしく、元々 aaa というラベルは glabel で付けたわけじゃなかったみたいです。
(ただし、ラベルの仕組み自体はGEOM LABELで動いてるのは間違いないです。)

さらに調べると、「tunefs -L ラベル名 デバイス名」でUFSなパーティションにラベルを付けることができ、その場合は /dev/ufs/ラベル名 になるらしい。

で、ext2版を探したらありました。

freenas:~# tune2fs -L "" /dev/ada4
tune2fs 1.42.6 (21-Sep-2012)

コレでラベルが消え、再起動したらZFSプールのデバイス名も直りました。

タイトルには「ZFSのプールのデバイス名がおかしくなった」って書いてますけど、状況証拠的に「自分でおかしくしたのにその事を忘れてる」だけっぽいですすいません(;´Д`)

コメントを残す

メールアドレスが公開されることはありません。



※画像をクリックして別の画像を表示

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください