LVM:PVとLV破損の可能性からの回復をどのように試みるべきですか?


4

これは私の自宅のファイル保存設定でした。 RAID設定は冗長性を目的としているため、バックアップはありません。私は何が起こったのか説明せず、代金を払っています。セットアップ:

  • Ubuntu 16.04
  • mdadm(4 x 2 TB)を使用した4ディスクRAID 5アレイ:/ dev / md0
  • アレイ上では、LVMによって管理されるPVとLV。
  • vg0という名前の論理ボリューム上のXFSファイルシステム。

/ etcと/ bootを含むLinuxホストは別のディスクにインストールされており、完全にアクセス可能です(したがって/ etc / lvm / archiveにアクセスできます)。 RAIDアレイは純粋にファイルストレージです。ブートプロセスは/ etc / fstabのエントリ以外には依存しません。

どういうわけか私が理解するのに苦労していたFreeDOSインストーラから起動しました。覚えているわけではありませんが、このボリュームを再分割するように言ったのかもしれません。いずれにせよ、私がLinux(Ubuntu 16.04)を再起動したとき、私はrootユーザーとしてリカバリモードのプロンプトに落ちました。 / etc / fstabに定義されているボリュームグループのUUIDをマウントできませんでした。

このRAIDアレイを最初にセットアップしてから、LVMの機能を完全に忘れたか、ボリュームの作成にLVMを使用したことさえあるので、十分な長さがあります。 (10 - 12年、その間に時々ハードディスクを交換し、アレイのサイズを変更することもありました。)それで、最初にtestdiskを使おうとしました。 1 ]をクリックしてパーティション情報を見つけて復元します。これは決してうまくいきませんでした、パーティションは常に不正確なサイズ(4.5TBの代わりに524Gb)であり、そして決して「物理的セクター境界」上にありませんでした。パーティションを完全に復元するための魔法の組み合わせがあると考えて、さまざまなジオメトリを試しました。これはfdiskに従ったディスクの現在のステータスです:

$ sudo fdisk -l /dev/md0
GPT PMBR size mismatch (1098853631 != 200894463) will be corrected by w(rite).
Disk /dev/md0: 4.1 TiB, 4500904476672 bytes, 8790829056 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 1048576 bytes / 3145728 bytes
Disklabel type: dos
Disk identifier: 0x00000000

Device     Boot Start        End    Sectors  Size Id Type
/dev/md0p1          1 1098853631 1098853631  524G ee GPT

Partition 1 does not start on physical sector boundary.

そして別れ:

(parted) print list                                                       
Error: /dev/md0: unrecognised disk label
Model: Linux Software RAID Array (md)                                     
Disk /dev/md0: 4501GB
Sector size (logical/physical): 512B/4096B
Partition Table: unknown
Disk Flags: 

testdiskフォーラムに質問を投稿する際には 2 ]、私はRAIDアレイを管理するためにLVMを使っていたこと、そしてこれらが伝統的なパーティショニングツールをまったく使わないことが可能であることに気付きました。 「lvm物理ボリュームの回復」の研究開発 http://blog.adamsbros.org/2009/05/30/recover-lvm-volume-groups-and-logical-volumes-without-backups/ 。 pvckは私に次のように伝えます:

$ sudo pvck /dev/md0
  Incorrect metadata area header checksum on /dev/md0 at offset 4096
  Found label on /dev/md0, sector 1, type=LVM2 001
  Found text metadata area: offset=4096, size=192512
  Incorrect metadata area header checksum on /dev/md0 at offset 4096

/ etc / lvm / archivesにLVMボリュームのバックアップもいくつかあります。最新のものは次のとおりです。

crw@bilby:~$ sudo cat /etc/lvm/archive/vg0_00002-935168089.vg
# Generated by LVM2 version 2.02.98(2) (2012-10-15): Sun Jul 19 12:00:04 2015

contents = "Text Format Volume Group"
version = 1

description = "Created *before* executing 'lvextend /dev/vg0/lv0 /dev/md0'"

creation_host = "bilby" # Linux bilby 3.16.0-43-generic #58~14.04.1-Ubuntu SMP Mon Jun 22 10:21:20 UTC 2015 x86_64
creation_time = 1437332404  # Sun Jul 19 12:00:04 2015

vg0 {
    id = "Q4ZRRc-1l0h-FEgu-jrxA-EfW1-tAis-vv0jyL"
    seqno = 5
    format = "lvm2" # informational
    status = ["RESIZEABLE", "READ", "WRITE"]
    flags = []
    extent_size = 262144        # 128 Megabytes
    max_lv = 0
    max_pv = 0
    metadata_copies = 0

    physical_volumes {

        pv0 {
            id = "bKQs0l-zNhs-X4vw-NDfz-IMFs-cJxs-y0k6yG"
            device = "/dev/md0" # Hint only

            status = ["ALLOCATABLE"]
            flags = []
            dev_size = 8790828672   # 4.09355 Terabytes
            pe_start = 384
            pe_count = 33534    # 4.09351 Terabytes
        }
    }

    logical_volumes {

        lv0 {
            id = "pqInOe-ZLpV-t9oK-GQE1-AoIt-mB3M-4ImaV1"
            status = ["READ", "WRITE", "VISIBLE"]
            flags = []
            segment_count = 1

            segment1 {
                start_extent = 0
                extent_count = 22356    # 2.729 Terabytes

                type = "striped"
                stripe_count = 1    # linear

                stripes = [
                    "pv0", 0
                ]
            }
        }
    }
}

それが役に立つならば、以下はRAIDアレイの詳細です:

$ sudo mdadm --detail /dev/md0
/dev/md0:
        Version : 0.90
  Creation Time : Sun Oct 11 13:34:16 2009
     Raid Level : raid5
     Array Size : 4395414528 (4191.79 GiB 4500.90 GB)
  Used Dev Size : 1465138176 (1397.26 GiB 1500.30 GB)
   Raid Devices : 4
  Total Devices : 4
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Mon Oct  3 13:12:51 2016
          State : clean 
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 1024K

           UUID : 9be3b2f7:102e373a:822b5a8f:216da2f7 (local to host bilby)
         Events : 0.103373

    Number   Major   Minor   RaidDevice State
       0       8       64        0      active sync   /dev/sde
       1       8       48        1      active sync   /dev/sdd
       2       8       16        2      active sync   /dev/sdb
       3       8       32        3      active sync   /dev/sdc

最後に、これが私が取り残したtestdisk.logの悲しい証です。 https://dl.dropboxusercontent.com/u/2776730/testdisk.log

編集:lsblkの出力:

crw@bilby:~$ sudo lsblk
NAME                 MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
sda                    8:0    0 59.6G  0 disk  
├─sda1                 8:1    0  243M  0 part  /boot
├─sda2                 8:2    0    1K  0 part  
└─sda5                 8:5    0 59.4G  0 part  
  ├─bilby--vg-root   252:0    0 43.4G  0 lvm   /
  └─bilby--vg-swap_1 252:1    0   16G  0 lvm   [SWAP]
sdb                    8:16   0  1.8T  0 disk  
└─md0                  9:0    0  4.1T  0 raid5 
sdc                    8:32   0  1.8T  0 disk  
└─md0                  9:0    0  4.1T  0 raid5 
sdd                    8:48   0  1.8T  0 disk  
└─md0                  9:0    0  4.1T  0 raid5 
sde                    8:64   0  1.8T  0 disk  
└─md0                  9:0    0  4.1T  0 raid5 

私は完全に道に迷っています、そして私は物事を悪化させたと思います。私の質問は:

LVMの問題に対処する前にパーティション情報を「修正」する必要がありますか? 私は "pvcreate --uuid xxx --restorefile yyy"を試みるべきですか?それからディスクを拡張して、xfsに相当するfsckのようなものを実行する必要がありますか?それとも、この時点で私のデータは失われていますか? : '(

この問題のデバッグを容易にするために追加できるものがあるかどうかをお知らせください。ありがとうございます。


2
私と一緒に負担してください、私はこれを通して読んでいます、そしてそれはそれを整理するためにしばらく私を連れて行くつもりです。これは非常に回復可能に見えます。それまでの間は、ここで投票を控えてSuperUserに移動することがあります。まぶしさを避けるためにこの質問を移動する必要があります。
Spooler

1
謝罪、私はStackExchangeのドメイン固有性についてよく知らない。 「移動」と言ったとき、この質問をそのフォーラムにコピー&ペーストするだけでいいのですか。ありがとうございます。
Craig Wright

2
ええ、どうやらあなたはそれを自分で行うために250の評判が必要です。これはメタになりつつあります。私はそれにフラグを立てるでしょう、そして事は起こります。心配ない。
Spooler

OK。私に知らせてください、私はただ質問を再投稿することができます。私は前に違いを理解しませんでした、しかし見た後に、この質問は明らかにSuperUserに属します。
Craig Wright

1
lsblkの出力を投稿してください。問題を切り分けるためにそこにあるデータが必要です。具体的には、RAIDメンバーにパーティションテーブルがあるかどうか(sdbからsde)を確認したいのですが、他の有用なデータを提供できる可能性があります。
Spooler

回答:


3

これのどれかがはたらかないか、または理にかなって停止したら、停止し、主題の専門家に頼んで下さい。これは危険な作業です。元のデータセットをtomfooleryから保護するために、「dd」で大容量の記憶媒体上のファイルにコピーするか、それ以上のサイズの新しいディスクに直接コピーするディスクイメージを操作します。あなたはこれらの操作を単一のライブセットで実行することができますが、あなたがめちゃくちゃにするならそれはあなたのデータのためにそれであるかもしれません。

大丈夫です。はじめに、このストレージスタックをベースディスクレベルから系統的に修復する必要があります。あなたはFreeDOSインストーラを走らせました、そしてそれは(おそらく)それらの1つの上にパーティションテーブルを作成することによってあなたのディスクと混同しました。

お使いのディスクはMDアレイに直接参加します。パーティションテーブルは不要です。これはかなり典型的です。ただし、これはそのアレイの0.90リビジョンメタデータ構造でもあるため、これらのディスクのいずれかにパーティションテーブルを直接配置すると、アレイが混乱します。

パーティションテーブルがあるディスク(sdbからsdeまでのいずれか)があるかどうか、たとえば/ dev / sdb1の形式で確認します。あなたがこのようなものを持っているなら、あなたはそれをダーティと考えて、あなたの配列から取り除き、そのテーブルを取り除いた後それを元に戻す必要があるでしょう。

これらのディスクのいずれかにパーティションが見つからない場合でも、整合性チェックは/ dev / md0で実行する必要があります。これを実行するコマンドは簡単です。

# /usr/share/mdadm/checkarray -a /dev/mdX

それが0より大きいミスマッチカウントで戻ってきた場合は、そのアレイを修復する必要があります。現時点では問題にはなっていませんので、必要に応じてご覧ください。

より具体的な問題については、testdiskは/ dev / md0にGPTを、そのディスクにパーティション(/ dev / md0p1)を作成しました。これがあるとは考えられず、LVMメタデータを壊しています。あなたが作成したのと同じ方法で、あなたのボリュームグループは/ dev / md0に直接存在することを意図しています。

まず、/ dev / md0上のその誤ったGPTに対処する必要があります。 「ザッピング」する必要があります。 GPTをザッピングすると、すべてのGPT構造が空白になり、テーブルのないディスクに返されます。この記事の詳細は、次のとおりです。」 http://www.rodsbooks.com/gdisk/wipegpt.html "ザップしないと、パーティション分割ユーティリティが"修正 "しようとするそのディスク上に壊れたGPT構造があるでしょう。

それが終わったら、質問に投稿したアーカイブファイルを使ってLVMメタデータをすべて再作成できます。ありがたいことに、あなたはちょうどあなたにうまくいくコマンドを渡すために十分な情報を私に与えてくれました。このプロセスについてもっと知りたいのなら、これは素晴らしいリソースです。」 https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Logical_Volume_Manager_Administration/mdatarecover.html "

元のメタデータすべてを使って物理ボリュームを再作成するコマンド。

# pvcreate --uuid "bKQs0l-zNhs-X4vw-NDfz-IMFs-cJxs-y0k6yG" --restorefile /etc/lvm/archive/vg0_00002-935168089.vg

このアーカイブファイルは、/ dev / md0をボリュームグループを構成するディスクとして記述しており、それを使用する予定です。 LVMのarchivesディレクトリに新しいアーカイブファイルがある場合は、代わりに使用してください。目標は、ボリュームグループを最新の有効な状態にすることです。

この後は、PV、VG、およびLVの整合性を確認することが重要です。あなたはすでにこれを試みましたが、今回はそれを すべき より生産的になります。コマンド pvck そして vgck ここで使われるべきものです。

まず、pvckを実行します。

# pvck /dev/md0

それが検証されたら、vgckを実行します。

# vgck vg0

すべてのメタデータを検証したら、LVをアクティブにします。

# vgchange -ay vg0

そして最後に、潜在的なエラーについて/ dev / mapper / vg0-lv0(あなたの場合はXFS)のファイルシステムをチェックします。

# xfs_check /dev/mapper/vg0-lv0

エラーがなければ、何も返さないはずです。何か問題がある場合は、xfs_repairが必要になります(ITがマウントされている間は絶対にしないでください)。

# xfs_repair /dev/mapper/vg0-lv0


最初のヒッチ: "checkarray"コマンドを実行しても何もしないようです、またはそれが非常に速く起こるので私はそれを逃します。 「watch cat / proc / mdstat」と「watch -n 1 cat / sys / block / md0 / md / sync_action」も実行しながら、数回実行しましたが、どちらのステータスも変更されませんでした。私がここで見つけた情報に基づいて: thomas-krenn.com/en/wiki/Mdadm_checkarray 、私はもっと長いチェックプロセスを見ているは​​ずです。プラスの意味では、 "tail / sys / block / md0 / md / mismatch_cnt"は0を返します。私は願います?
Craig Wright

さらに、上で実行したlsblkは、アレイのすべてのメンバーディスクにパーティションがないことを示しているようです。だから別の肯定的な指標。
Craig Wright

もう1つ興味深いことに。バックアップディスクの到着を待っている間に、推奨されている "dd"バックアップを実行するために、すべての非破壊的なコマンドを実行しています。 :)これはgdiskの出力です。 crw@bilby:~$ sudo gdisk /dev/md0 GPT fdisk (gdisk) version 1.0.1 Partition table scan: MBR: protective BSD: not present APM: not present GPT: not present Creating new GPT entries. Command (? for help): では、GPTスキームはインストールされていないようですか?とても混乱します。いずれにせよ、それは時間が来たときのように見えます、gdiskでzappingすることはGPTとMBRを排除するでしょう。
Craig Wright

働いた!あなたの答えのために、おそらく訂正が必要な、いくつかのマイナーノート # vgcfgrestore vg0 ボリュームグループが表示または確認される前に。 xfs_check xfsprogsに含まれていないようです…?私は走った xfs_repair -n ... 代わりに、それから走った xfs_repair 良い測定のために。そうでなければ、奇跡的に成功したデータ復旧。どうもありがとうございました!
Craig Wright
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.