FreeBSD Daily Topics

2011年9月22日ZFS活用シリーズ - scrubで直らない問題の修正(zdb - 修復編)

一度使い出したらその便利さに抜け出せなくZFS。ZFSの提供するさまざまな機能を使わなくても基本的な使い方だけでも便利なものですが、運用するうえでいくつか知っておくと便利なこともあります。数回だけ、そんなティップスを紹介していきます。

Do zdb for ZFS recovery

ZFSは壊れにくいファイルシステムだと言われてはいますが、何らかの原因で壊れることもあります。スクラブで直らない場合にはzdb(1M)で直すのが順当な修正方法となります。ただし、zdb(1M)はそもそもZFSの開発者が利用するために提供されているものなので、ドキュメントもありませんし、動作の詳細を知りたい場合にはソースコードを読む必要があります。

今回は実際にzdb(1M)を使って問題を修正する方法を紹介します。まず、もし今回のコマンドが実行できない場合、次のようにリンクを作成してから作業を開始します。

cd /dev; ln -s . dsk

基本的に、カーネルがパニックするような問題は次のように「zdb -AAA -e プール」と実行することで修正を実施します。この指定でアサーションを無視するとともに、パニックを引き起こすタイプの問題を修正するようになります。

zdb -AAA -e zpool

「-AAA」はすべての処理を実施しようとします。通常は次のようにデータブロックとメタデータプロック、メタラベル、ブロック統計データあたりをチェックするようにするだけで十分でしょう。

# zdb -cc -b -m -e zpool

Metaslabs:
	vdev          0
	metaslabs   159   offset                spacemap          free      
	---------------   -------------------   ---------------   -------------
	metaslab      0   offset            0   spacemap     33   free    23.0M
	metaslab      1   offset     20000000   spacemap     42   free    19.7M
	metaslab      2   offset     40000000   spacemap     44   free     447M
	metaslab      3   offset     60000000   spacemap     46   free     512M
	metaslab      4   offset     80000000   spacemap      0   free     512M
	metaslab      5   offset     a0000000   spacemap      0   free     512M
	metaslab      6   offset     c0000000   spacemap      0   free     512M
	metaslab      7   offset     e0000000   spacemap      0   free     512M
	metaslab      8   offset    100000000   spacemap      0   free     512M
	metaslab      9   offset    120000000   spacemap      0   free     512M
	metaslab     10   offset    140000000   spacemap      0   free     512M
	metaslab     11   offset    160000000   spacemap      0   free     512M
	metaslab     12   offset    180000000   spacemap      0   free     512M
	metaslab     13   offset    1a0000000   spacemap      0   free     512M
	metaslab     14   offset    1c0000000   spacemap      0   free     512M
	metaslab     15   offset    1e0000000   spacemap      0   free     512M
	metaslab     16   offset    200000000   spacemap      0   free     512M
	metaslab     17   offset    220000000   spacemap      0   free     512M
	metaslab     18   offset    240000000   spacemap      0   free     512M
	metaslab     19   offset    260000000   spacemap      0   free     512M
	metaslab     20   offset    280000000   spacemap      0   free     512M
	metaslab     21   offset    2a0000000   spacemap      0   free     512M
	metaslab     22   offset    2c0000000   spacemap      0   free     512M
	metaslab     23   offset    2e0000000   spacemap      0   free     512M
	metaslab     24   offset    300000000   spacemap      0   free     512M
	metaslab     25   offset    320000000   spacemap      0   free     512M
	metaslab     26   offset    340000000   spacemap      0   free     512M
	metaslab     27   offset    360000000   spacemap      0   free     512M
	metaslab     28   offset    380000000   spacemap      0   free     512M
	metaslab     29   offset    3a0000000   spacemap      0   free     512M
	metaslab     30   offset    3c0000000   spacemap     32   free     489M
	metaslab     31   offset    3e0000000   spacemap     41   free     502M
	metaslab     32   offset    400000000   spacemap     43   free     475M
	metaslab     33   offset    420000000   spacemap     45   free     512M
	metaslab     34   offset    440000000   spacemap      0   free     512M
	metaslab     35   offset    460000000   spacemap      0   free     512M
	metaslab     36   offset    480000000   spacemap      0   free     512M
	metaslab     37   offset    4a0000000   spacemap      0   free     512M
	metaslab     38   offset    4c0000000   spacemap      0   free     512M
	metaslab     39   offset    4e0000000   spacemap      0   free     512M
	metaslab     40   offset    500000000   spacemap      0   free     512M
	metaslab     41   offset    520000000   spacemap      0   free     512M
	metaslab     42   offset    540000000   spacemap      0   free     512M
	metaslab     43   offset    560000000   spacemap      0   free     512M
	metaslab     44   offset    580000000   spacemap      0   free     512M
	metaslab     45   offset    5a0000000   spacemap      0   free     512M
	metaslab     46   offset    5c0000000   spacemap      0   free     512M
	metaslab     47   offset    5e0000000   spacemap      0   free     512M
	metaslab     48   offset    600000000   spacemap      0   free     512M
	metaslab     49   offset    620000000   spacemap      0   free     512M
	metaslab     50   offset    640000000   spacemap      0   free     512M
	metaslab     51   offset    660000000   spacemap      0   free     512M
	metaslab     52   offset    680000000   spacemap      0   free     512M
	metaslab     53   offset    6a0000000   spacemap      0   free     512M
	metaslab     54   offset    6c0000000   spacemap      0   free     512M
	metaslab     55   offset    6e0000000   spacemap      0   free     512M
	metaslab     56   offset    700000000   spacemap      0   free     512M
	metaslab     57   offset    720000000   spacemap      0   free     512M
	metaslab     58   offset    740000000   spacemap      0   free     512M
	metaslab     59   offset    760000000   spacemap      0   free     512M
	metaslab     60   offset    780000000   spacemap     31   free     512M
	metaslab     61   offset    7a0000000   spacemap      0   free     512M
	metaslab     62   offset    7c0000000   spacemap      0   free     512M
	metaslab     63   offset    7e0000000   spacemap      0   free     512M
	metaslab     64   offset    800000000   spacemap      0   free     512M
	metaslab     65   offset    820000000   spacemap      0   free     512M
	metaslab     66   offset    840000000   spacemap      0   free     512M
	metaslab     67   offset    860000000   spacemap      0   free     512M
	metaslab     68   offset    880000000   spacemap      0   free     512M
	metaslab     69   offset    8a0000000   spacemap      0   free     512M
	metaslab     70   offset    8c0000000   spacemap      0   free     512M
	metaslab     71   offset    8e0000000   spacemap      0   free     512M
	metaslab     72   offset    900000000   spacemap      0   free     512M
	metaslab     73   offset    920000000   spacemap      0   free     512M
	metaslab     74   offset    940000000   spacemap      0   free     512M
	metaslab     75   offset    960000000   spacemap      0   free     512M
	metaslab     76   offset    980000000   spacemap      0   free     512M
	metaslab     77   offset    9a0000000   spacemap      0   free     512M
	metaslab     78   offset    9c0000000   spacemap      0   free     512M
	metaslab     79   offset    9e0000000   spacemap      0   free     512M
	metaslab     80   offset    a00000000   spacemap      0   free     512M
	metaslab     81   offset    a20000000   spacemap      0   free     512M
	metaslab     82   offset    a40000000   spacemap      0   free     512M
	metaslab     83   offset    a60000000   spacemap      0   free     512M
	metaslab     84   offset    a80000000   spacemap      0   free     512M
	metaslab     85   offset    aa0000000   spacemap      0   free     512M
	metaslab     86   offset    ac0000000   spacemap      0   free     512M
	metaslab     87   offset    ae0000000   spacemap      0   free     512M
	metaslab     88   offset    b00000000   spacemap      0   free     512M
	metaslab     89   offset    b20000000   spacemap      0   free     512M
	metaslab     90   offset    b40000000   spacemap      0   free     512M
	metaslab     91   offset    b60000000   spacemap      0   free     512M
	metaslab     92   offset    b80000000   spacemap      0   free     512M
	metaslab     93   offset    ba0000000   spacemap      0   free     512M
	metaslab     94   offset    bc0000000   spacemap      0   free     512M
	metaslab     95   offset    be0000000   spacemap      0   free     512M
	metaslab     96   offset    c00000000   spacemap      0   free     512M
	metaslab     97   offset    c20000000   spacemap      0   free     512M
	metaslab     98   offset    c40000000   spacemap      0   free     512M
	metaslab     99   offset    c60000000   spacemap      0   free     512M
	metaslab    100   offset    c80000000   spacemap      0   free     512M
	metaslab    101   offset    ca0000000   spacemap      0   free     512M
	metaslab    102   offset    cc0000000   spacemap      0   free     512M
	metaslab    103   offset    ce0000000   spacemap      0   free     512M
	metaslab    104   offset    d00000000   spacemap      0   free     512M
	metaslab    105   offset    d20000000   spacemap      0   free     512M
	metaslab    106   offset    d40000000   spacemap      0   free     512M
	metaslab    107   offset    d60000000   spacemap      0   free     512M
	metaslab    108   offset    d80000000   spacemap      0   free     512M
	metaslab    109   offset    da0000000   spacemap      0   free     512M
	metaslab    110   offset    dc0000000   spacemap      0   free     512M
	metaslab    111   offset    de0000000   spacemap      0   free     512M
	metaslab    112   offset    e00000000   spacemap      0   free     512M
	metaslab    113   offset    e20000000   spacemap      0   free     512M
	metaslab    114   offset    e40000000   spacemap      0   free     512M
	metaslab    115   offset    e60000000   spacemap      0   free     512M
	metaslab    116   offset    e80000000   spacemap      0   free     512M
	metaslab    117   offset    ea0000000   spacemap      0   free     512M
	metaslab    118   offset    ec0000000   spacemap      0   free     512M
	metaslab    119   offset    ee0000000   spacemap      0   free     512M
	metaslab    120   offset    f00000000   spacemap      0   free     512M
	metaslab    121   offset    f20000000   spacemap      0   free     512M
	metaslab    122   offset    f40000000   spacemap      0   free     512M
	metaslab    123   offset    f60000000   spacemap      0   free     512M
	metaslab    124   offset    f80000000   spacemap      0   free     512M
	metaslab    125   offset    fa0000000   spacemap      0   free     512M
	metaslab    126   offset    fc0000000   spacemap      0   free     512M
	metaslab    127   offset    fe0000000   spacemap      0   free     512M
	metaslab    128   offset   1000000000   spacemap      0   free     512M
	metaslab    129   offset   1020000000   spacemap      0   free     512M
	metaslab    130   offset   1040000000   spacemap      0   free     512M
	metaslab    131   offset   1060000000   spacemap      0   free     512M
	metaslab    132   offset   1080000000   spacemap      0   free     512M
	metaslab    133   offset   10a0000000   spacemap      0   free     512M
	metaslab    134   offset   10c0000000   spacemap      0   free     512M
	metaslab    135   offset   10e0000000   spacemap      0   free     512M
	metaslab    136   offset   1100000000   spacemap      0   free     512M
	metaslab    137   offset   1120000000   spacemap      0   free     512M
	metaslab    138   offset   1140000000   spacemap      0   free     512M
	metaslab    139   offset   1160000000   spacemap      0   free     512M
	metaslab    140   offset   1180000000   spacemap      0   free     512M
	metaslab    141   offset   11a0000000   spacemap      0   free     512M
	metaslab    142   offset   11c0000000   spacemap      0   free     512M
	metaslab    143   offset   11e0000000   spacemap      0   free     512M
	metaslab    144   offset   1200000000   spacemap      0   free     512M
	metaslab    145   offset   1220000000   spacemap      0   free     512M
	metaslab    146   offset   1240000000   spacemap      0   free     512M
	metaslab    147   offset   1260000000   spacemap      0   free     512M
	metaslab    148   offset   1280000000   spacemap      0   free     512M
	metaslab    149   offset   12a0000000   spacemap      0   free     512M
	metaslab    150   offset   12c0000000   spacemap      0   free     512M
	metaslab    151   offset   12e0000000   spacemap      0   free     512M
	metaslab    152   offset   1300000000   spacemap      0   free     512M
	metaslab    153   offset   1320000000   spacemap      0   free     512M
	metaslab    154   offset   1340000000   spacemap      0   free     512M
	metaslab    155   offset   1360000000   spacemap      0   free     512M
	metaslab    156   offset   1380000000   spacemap      0   free     512M
	metaslab    157   offset   13a0000000   spacemap      0   free     512M
	metaslab    158   offset   13c0000000   spacemap      0   free     512M


Traversing all blocks to verify checksums and verify nothing leaked ...

	No leaks (block sum matches space maps exactly)

	bp count:          347518
	bp logical:    1256785408      avg:   3616
	bp physical:   1097050624      avg:   3156     compression:   1.15
	bp allocated:  1169949696      avg:   3366     compression:   1.07
	bp deduped:             0    ref>1:      0   deduplication:   1.00
	SPA allocated: 1169949696     used:  1.37%

#

「zdb -AAA -e プール」「zdb -cc -b -m -e プール」などで問題が解決しない場合、簡単には修正できない問題か、別のところに原因がある可能性があります。これ以上深追いはせずに、別のプールを用意したりバックアップから復旧させる、または先に紹介したアドホックな解決方法を併用するなどして別の方向から解決を試みたほうが良いといえます。

おすすめ記事

記事・ニュース一覧