ZFSイメージの混乱

ZFSイメージの混乱

RAID10には6つのドライブを持つZFSプールがあります。以前はそうでした。

146GBドライブを1TBドライブにアップグレードしようとしましたが、結果が良くありませんでした。

root@x7550:~# zpool status
  pool: stuffpool
 state: ONLINE
  scan: scrub repaired 0 in 0h6m with 0 errors on Mon May  9 15:26:39 2016
config:

    NAME                                               STATE     READ WRITE CKSUM
    stuffpool                                          ONLINE       0     0     0
      mirror-0                                         ONLINE       0     0     0
        ata-HGST_HTS721010A9E630_JR10004M0LGN6E-part1  ONLINE       0     0     0
        ata-HGST_HTS721010A9E630_JR10004M0M17TE-part1  ONLINE       0     0     0
      mirror-1                                         ONLINE       0     0     0
        ata-HGST_HTS541010A9E680_JA1000102MG9UR-part1  ONLINE       0     0     0
        ata-HGST_HTS541010A9E680_JA1009C03158BP-part1  ONLINE       0     0     0
      scsi-35000c50016ebcdfb-part1                     ONLINE       0     0     0
      ata-HGST_HTS541010A9E680_JA109NDW206MAS-part1    ONLINE       0     0     0

scsi-35000c50016ebcdfb-part1ドライブはミラー-2にあり、ata-HGST_HTS541010A9E680_JA109NDW206MAS-part1ミラー-2に追加するドライブです。

この問題を解決するために私ができることはありますか?

Ubuntu 16.04で実行中です。

root@x7550:~# zpool history stuffpool | tail -n50
History for 'stuffpool':
2016-03-27.01:56:12 zpool create stuffpool mirror ata-HGST_HTS721010A9E630_JR10004M0LGN6E-part1 ata-HGST_HTS721010A9E630_JR10004M0M17TE-part1 -f
2016-03-27.01:57:41 zpool add stuffpool mirror /dev/disk/by-id/ata-HGST_HTS541010A9E680_JA1000102MG9UR-part1 /dev/disk/by-id/ata-HGST_HTS541010A9E680_JA1009C03158BP-part1 -f
2016-03-27.01:59:25 zpool add stuffpool mirror /dev/disk/by-id/scsi-35000c50016ebcdfb-part1 /dev/disk/by-id/scsi-35000c50017675203-part1 -f
2016-03-27.02:12:38 zpool import -c /etc/zfs/zpool.cache -aN
2016-03-27.23:48:32 zfs create stuffpool/stuff
2016-03-27.23:54:47 zpool import -c /etc/zfs/zpool.cache -aN
2016-03-28.00:02:23 zfs create stuffpool/backup
2016-03-30.23:18:04 zpool scrub stuffpool
2016-04-03.01:06:06 zpool import -c /etc/zfs/zpool.cache -aN
2016-04-03.01:15:33 zfs create -p -o mountpoint=/var/lib/lxd/images/f96b6b5d7587150b880e96f872393b7fee53741046b40a76c6db22ed40886bc9.zfs stuffpool/images/f96b6b5d7587150b880e96f872393b7fee53741046b40a76c6db22ed40886bc9
2016-04-03.01:15:53 zfs set readonly=on stuffpool/images/f96b6b5d7587150b880e96f872393b7fee53741046b40a76c6db22ed40886bc9
2016-04-03.01:15:54 zfs snapshot -r stuffpool/images/f96b6b5d7587150b880e96f872393b7fee53741046b40a76c6db22ed40886bc9@readonly
2016-04-03.01:16:00 zfs clone -p -o mountpoint=/var/lib/lxd/containers/ux-1.zfs stuffpool/images/f96b6b5d7587150b880e96f872393b7fee53741046b40a76c6db22ed40886bc9@readonly stuffpool/containers/ux-1
2016-04-08.01:31:47 zpool import -c /etc/zfs/zpool.cache -aN
2016-04-08.01:43:48 zpool import -c /etc/zfs/zpool.cache -aN
2016-04-19.00:00:30 zpool import -c /etc/zfs/zpool.cache -aN
2016-04-21.18:14:15 zfs create -p -o mountpoint=/var/lib/lxd/images/9b03bacc30bcfbe3378e8803daa48ca2d32baa99d111efada484876750e5cc20.zfs stuffpool/images/9b03bacc30bcfbe3378e8803daa48ca2d32baa99d111efada484876750e5cc20
2016-04-21.18:14:35 zfs set readonly=on stuffpool/images/9b03bacc30bcfbe3378e8803daa48ca2d32baa99d111efada484876750e5cc20
2016-04-21.18:14:36 zfs snapshot -r stuffpool/images/9b03bacc30bcfbe3378e8803daa48ca2d32baa99d111efada484876750e5cc20@readonly
2016-04-21.18:14:36 zfs set mountpoint=none stuffpool/images/f96b6b5d7587150b880e96f872393b7fee53741046b40a76c6db22ed40886bc9
2016-04-21.18:14:41 zfs rename -p stuffpool/images/f96b6b5d7587150b880e96f872393b7fee53741046b40a76c6db22ed40886bc9 stuffpool/deleted/images/f96b6b5d7587150b880e96f872393b7fee53741046b40a76c6db22ed40886bc9
2016-04-24.22:54:03 zpool scrub stuffpool
2016-05-07.22:55:42 zpool import -c /etc/zfs/zpool.cache -aN
2016-05-09.15:20:27 zpool scrub stuffpool
2016-05-17.22:56:53 zfs create -p -o mountpoint=/var/lib/lxd/images/4f7a1fe6b71446eba6ee56f49698bd6592f193f731f1c0d9d51b1d199b9b75a5.zfs stuffpool/images/4f7a1fe6b71446eba6ee56f49698bd6592f193f731f1c0d9d51b1d199b9b75a5
2016-05-17.22:57:12 zfs set readonly=on stuffpool/images/4f7a1fe6b71446eba6ee56f49698bd6592f193f731f1c0d9d51b1d199b9b75a5
2016-05-17.22:57:13 zfs snapshot -r stuffpool/images/4f7a1fe6b71446eba6ee56f49698bd6592f193f731f1c0d9d51b1d199b9b75a5@readonly
2016-05-17.22:57:18 zfs destroy -r stuffpool/images/9b03bacc30bcfbe3378e8803daa48ca2d32baa99d111efada484876750e5cc20
2016-05-21.16:47:49 zpool import -c /etc/zfs/zpool.cache -aN
2016-06-09.22:59:47 zpool import -c /etc/zfs/zpool.cache -aN
2016-06-13.20:59:10 zpool import -c /etc/zfs/zpool.cache -aN
2016-06-13.20:59:34 zfs create -p -o mountpoint=/var/lib/lxd/images/49fc7d0d6f01a7639129308b73ad27f5fb7b9d3bb783d905393b6b9e9c4bf1c5.zfs stuffpool/images/49fc7d0d6f01a7639129308b73ad27f5fb7b9d3bb783d905393b6b9e9c4bf1c5
2016-06-13.20:59:54 zfs set readonly=on stuffpool/images/49fc7d0d6f01a7639129308b73ad27f5fb7b9d3bb783d905393b6b9e9c4bf1c5
2016-06-13.20:59:54 zfs snapshot -r stuffpool/images/49fc7d0d6f01a7639129308b73ad27f5fb7b9d3bb783d905393b6b9e9c4bf1c5@readonly
2016-06-13.21:00:00 zfs destroy -r stuffpool/images/4f7a1fe6b71446eba6ee56f49698bd6592f193f731f1c0d9d51b1d199b9b75a5
2016-06-18.02:18:55 zpool import -c /etc/zfs/zpool.cache -aN
2016-06-18.02:27:08 zpool offline stuffpool 1759097636360003165
2016-06-18.02:33:28 zpool detach stuffpool 1759097636360003165
2016-06-18.12:23:26 zpool export stuffpool
2016-06-18.12:24:38 zpool import stuffpool
2016-06-18.12:27:34 zpool add -f stuffpool ata-HGST_HTS541010A9E680_JA109NDW206MAS-part1
2016-06-18.12:31:05 zpool export stuffpool
2016-06-18.13:19:17 zpool import stuffpool

すべてのATAドライブは1TB、SCSIドライブは146GB

ご利用案内です

root@x7550:~# zpool list
NAME        SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
stuffpool  2.85T   162G  2.69T         -     2%     5%  1.00x  ONLINE  -

これは私のプライベートサーバーなので、ダウンタイムは問題になりません。

ベストアンサー1

さて、あなたは自分で問題を起こしましたが、解決できるようです。

最初の間違いは、zpool add代わりに新しいドライブを使用することですzpool attach(ミラーに追加のデバイスを接続する)。または、zpool replace古いデバイスがまだフルメタデータに存在することをお勧めします。デバイスを交換する正しい方法は次のとおりです。

# zpool replace stuffpool 1759097636360003165 ata-HGST_HTS541010A9E680_JA109NDW206MAS-part1

あるいは、より良いことは、物理能力がある場合、zpool replace古いデバイスと新しいデバイスの両方が接続されていることです(これにより、プールは全体的に冗長になります)。

あなたの古いプールは基本的に修理できないほど損傷しています。この時点で、vdevを追加した後にプールからvdevを削除することはできません(vdev冗長レベルの不一致のために-f新しいディスクをプールに入れる必要があるかもしれません)、両方のディスクを非ディスクに変換するハードウェアはありません。冗長 vdev は双方向ミラーリングを開始します。

ただし、次のことができます。既存のリソースを使用して新しいプールを構築します。

どのような措置を講じる前に、すべての内容を読んで、各ステップの内容と理由を理解していることを確認してください。あなた本物もう問題を起こしたくありません。

まず、最新バージョンであることを確認してください。信頼できるデータをバックアップしてください。ストレージ容量が160GBを少し超えることを考慮すると、これは大きな問題ではありません。また、zpool scrubプールに保存されているすべてのデータにエラーがないことを確認することをお勧めします。 160GBの場合、前のクリーンアップで見たように、完了するのに時間がかかりません。

次に、ミラーからドライブを取り外し、ドライブを空にします。たとえば、ミラー0を分割してドライブの1つを使用するには、次のようにします。

# zpool detach stuffpool ata-HGST_HTS721010A9E630_JR10004M0M17TE-part1

stuffpoolこれにより、3つの単一デバイスvdevと1つの双方向ミラーvdev(mirror-1)が残ります。次に、目的を変更できるように、ミラーから取り外したドライブのすべてのZFSラベルを消去します。

# zpool labelclear /dev/disk/by-id/ata-HGST_HTS721010A9E630_JR10004M0M17TE-part1

現在、ZFS はドライブを古いプールの一部として認識しません。必要かもしれませんが、-f盲目的zpool labelclearに追加しないでください。なぜ必要なのか理解していることを確認してください。

古いプールの名前を変更します(該当する名前を保持する場合は、そうでない場合は必要に応じて以下から調整します)。

# zpool export stuffpool
# zpool import stuffpool stuffpoolold

取得したドライブに新しいプールを作成します。

# zpool create -o ashift=12 -O checksum=sha256 -m none -f stuffpool /dev/disk/by-id/ata-HGST_HTS721010A9E630_JR10004M0M17TE-part1

検証にはSHA-256を使用することをお勧めしますが、-O checksum=sha256望ましくない場合はその部分を省略してください。-o ashift=12最小割り当て単位で4,096バイトブロックを使用するようにZFSに指示します。これは、より少ないストレージスペースで高度なフォーマットドライブでより良い動作します。

データを保存するためにプールのルートファイルシステムを使用しない場合、一部の障害条件は回復するのが簡単です。プールにプロキシルートファイルシステムを作成することをお勧めします。

# zfs create -o mountpoint=/mnt/stuffpoolnew stuffpool/data

これで、既存のプールのすべてを新しいプールに転送します。まず、以前のプールの現在の状態のスナップショットを作成します。

# zfs snapshot stuffpoolold@transfer -r

スナップショットが正常に作成されたことを確認してください。それから:

# zfs send -R stuffpoolold@transfer | zfs receive -uvF stuffpool/data

少し時間がかかります。完了するまで実行し、その間に行われた変更を取得します。

# zfs snapshot stuffpoolold@transfer2 -r
# zfs send -I stuffpoolold@transfer stuffpoolold@transfer2 -Rv | zfs receive stuffpool/data -uv

この時点で、プール内のデータはすべての意図と目的について同じでなければなりません。クローンジョブまたは同様のジョブを実行してプールに書き込む場合は、シングルzfs send -I ...ユーザーモードで2番目のスナップショットを作成して、プールにデータが追加されるリスクを減らすことをお勧めします。

既存のプールを置き換える新しいプールを設定します。

# zfs get mountpoint stuffpoolold
... this will give you a mountpoint directory ...
# zpool export stuffpoolold
# zfs set mountpoint=...mountpoint_directory_from_above... stuffpool/data
# zpool export stuffpool
# zpool import stuffpool

これで、単一のデバイスで構成された新しいzpoolが作成されました。スクラブしてデータが正常であることを確認します。

# zpool scrub stuffpool

完了し、エラーが見つからない場合は、既存のディスクを新しいプールに移行します。以前のプールをインポート可能な状態に保つには(上記のミラー0の2番目のドライブを使用したため)、前の残りのミラーのペアの2番目のドライブから始めます。

# zpool labelclear /dev/disk/by-id/ata-HGST_HTS541010A9E680_JA1009C03158BP-part1
# zpool attach stuffpool /dev/disk/by-id/ata-HGST_HTS721010A9E630_JR10004M0M17TE-part1 /dev/disk/by-id/ata-HGST_HTS541010A9E680_JA1009C03158BP-part1

zpool status stuffpool以下のように、単一の双方向ミラー化vdevプールがあることを確認してください。

root@x7550:~# zpool status stuffpool
  pool: stuffpool
 state: ONLINE
  scan: scrub repaired 0 in 0h6m with 0 errors on ...
config:

    NAME                                               STATE     READ WRITE CKSUM
    stuffpool                                          ONLINE       0     0     0
      mirror-0                                         ONLINE       0     0     0
        ata-HGST_HTS721010A9E630_JR10004M0M17TE-part1  ONLINE       0     0     0
        ata-HGST_HTS541010A9E680_JA1009C03158BP-part1  ONLINE       0     0     0

ここで、元の方法で2つのミラーvdevを追加します。まず、デバイスにタグを付けて消去する必要があります。それ以外の場合、ZFSはデバイスがすでにエクスポートプールの一部であると文句を言います。繰り返しますが、必要かもしれませ-fんが、zpool labelclear絶対にしない盲目的-fに追加されましたzpool add。 (これをしなければならないなら、私がどこかでミスをしたのです。)

# zpool labelclear /dev/disk/by-id/ata-HGST_HTS721010A9E630_JR10004M0LGN6E-part1
# zpool labelclear /dev/disk/by-id/ata-HGST_HTS541010A9E680_JA1000102MG9UR-part1
# zpool labelclear /dev/disk/by-id/scsi-35000c50016ebcdfb-part1
# zpool labelclear /dev/disk/by-id/ata-HGST_HTS541010A9E680_JA109NDW206MAS-part1
# zpool add stuffpool mirror /dev/disk/by-id/ata-HGST_HTS721010A9E630_JR10004M0LGN6E-part1 /dev/disk/by-id/ata-HGST_HTS541010A9E680_JA1000102MG9UR-part1
# zpool add stuffpool mirror /dev/disk/by-id/scsi-35000c50016ebcdfb-part1 /dev/disk/by-id/ata-HGST_HTS541010A9E680_JA109NDW206MAS-part1

もう一度こすります(すべてがきれいできれいなプールが好きだから)。

# zpool scrub stuffpool

この時点で、プールは最初から望むように見えます。

root@x7550:~# zpool status
  pool: stuffpool
 state: ONLINE
  scan: scrub repaired 0 in 0h6m with 0 errors on ...
config:

    NAME                                               STATE     READ WRITE CKSUM
    stuffpool                                          ONLINE       0     0     0
      mirror-0                                         ONLINE       0     0     0
        ata-HGST_HTS721010A9E630_JR10004M0M17TE-part1  ONLINE       0     0     0
        ata-HGST_HTS541010A9E680_JA1009C03158BP-part1  ONLINE       0     0     0
      mirror-1                                         ONLINE       0     0     0
        ata-HGST_HTS721010A9E630_JR10004M0LGN6E-part1  ONLINE       0     0     0
        ata-HGST_HTS541010A9E680_JA1000102MG9UR-part1  ONLINE       0     0     0
      mirror-2                                         ONLINE       0     0     0
        scsi-35000c50016ebcdfb-part1                   ONLINE       0     0     0
        ata-HGST_HTS541010A9E680_JA109NDW206MAS-part1  ONLINE       0     0     0

これでプールのバランスが取れません(ほとんどのデータはミラー-0にあり、書き換えられるまでそこに残ります。ZFSには同様のものがありませんが、それでもbtrfs rebalance賢明に使用して変更できますzfs send ... | zfs receive)。必要なレイアウトと冗長性が計画されています。始めるとき。

さまざまな段階から成る長いプロセスですが、ゆっくりして各段階で何をするかを注意深く考えれば、特に危険ではありません。

利点は、1つのドライブを満たすよりもプール内のデータがはるかに少ないことです。プールがほぼいっぱいになると、状況ははるかに複雑になります。

おすすめ記事