web-dev-qa-db-ja.com

mdadmを使用してディスクドライブではなくディスクイメージからIMSM RAID-0アレイを(再)構築/作成/アセンブルするにはどうすればよいですか?

質問:Linuxとmdadmを使用して、インテルラピッドストレージテクノロジーRAID-0アレイ(NTFSとしてフォーマットされ、Windows 7がインストールされている)で使用されているハードディスクから作成されたディスクイメージからデータを読み書きするにはどうすればよいですかas files )?

問題:アレイ内のドライブの1つが故障しているので、ドライブを交換する(つまりアレイを破壊する)前に、できるだけ多くのデータをコピーしたいと思います。

彼らが私の問題を解決するなら、私はこの質問に対する代替の解決策を受け入れます。

バックグラウンド

RAID FakeRAID-0)で構成された2台のハードディスクを搭載したIntel Rapid Storage Technologyコントローラー(RST、RSTe、またはIMSMと呼ばれます)を搭載したラップトップを持っています。ラップトップがこの構成で提供されたので、RAID-0は私の選択ではありませんでした。ディスクの1つは多くの不良セクターを蓄積しているようですが、他のディスクは完全に正常です。一緒にしても、ディスクはまだOS(Windows 7 64ビット)で起動するのに十分なほど正常ですが、破損したディスク領域にアクセスするとOSがハングすることがあり、破損したディスクを引き続き使用することは悪い考えのようです。ディスクからできるだけ多くのデータをコピーして、損傷したドライブを交換したいと思います。損傷したディスクをライブで操作することは悪いと考えられるので、後でmdadmまたは同等のものを使用してイメージをマウントできるように、両方のディスクをイメージ化することにしました。私は多くの時間を費やして多くの読書をしましたが、それでもディスクイメージを(偽の)RAID-0アレイとしてマウントすることに成功していません。ここで実行した手順を思い出してみましょう。これは長いので、スナックや飲み物をいくつか手に入れます。

まず、パーティションから64ビットのUbuntu 15.10を実行するためのUSB外部ドライブを入手しました。 LiveCDまたは小さなUSBサムドライブを使用した方が起動は簡単でしたが、外付けよりも遅くなりました(LiveCDは永続的なインストールではありません)。私はddrescueをインストールし、それを使用して各ハードディスクのイメージを作成しました。画像の作成に特筆すべき問題はありませんでした。

イメージを取得したら、aptを使用してmdadmをインストールしました。ただし、これにより2013年から古いバージョンのmdadmがインストールされました。最新バージョンの変更ログは、IMSMのサポートが優れていることを示したため、---(このガイド を使用してmdadm 3.4をコンパイルおよびインストールしました。 4.4.2。ここでの唯一の注目すべき問題は、一部のテストが成功しなかったことですが、ガイドはそれが許容できることを示しているようです。

その後、私は fewplaces を読み込みました。画像を使用するには、ループバックデバイスを使用する必要があります。問題なくディスクイメージを/ dev/loop0および/ dev/loop1としてマウントしました。

プロセスのこの時点での関連情報は次のとおりです...

mdadm --detail-platform:

$ Sudo mdadm --detail-platform
       Platform : Intel(R) Rapid Storage Technology
        Version : 10.1.0.1008
    RAID Levels : raid0 raid1 raid5
    Chunk Sizes : 4k 8k 16k 32k 64k 128k
    2TB volumes : supported
      2TB disks : not supported
      Max Disks : 7
    Max Volumes : 2 per array, 4 per controller
 I/O Controller : /sys/devices/pci0000:00/0000:00:1f.2 (SATA)
          Port0 : /dev/sda (W0Q6DV7Z)
          Port3 : - non-disk device (HL-DT-ST DVD+-RW GS30N) -
          Port1 : /dev/sdb (W0Q6CJM1)
          Port2 : - no device attached -
          Port4 : - no device attached -
          Port5 : - no device attached -

fdisk -l:

$ Sudo fdisk -l
Disk /dev/loop0: 298.1 GiB, 320072933376 bytes, 625142448 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x2bd2c32a

Device       Boot   Start        End    Sectors   Size Id Type
/dev/loop0p1 *       2048    4196351    4194304     2G  7 HPFS/NTFS/exFAT
/dev/loop0p2      4196352 1250273279 1246076928 594.2G  7 HPFS/NTFS/exFAT


Disk /dev/loop1: 298.1 GiB, 320072933376 bytes, 625142448 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/sda: 298.1 GiB, 320072933376 bytes, 625142448 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x2bd2c32a

Device     Boot   Start        End    Sectors   Size Id Type
/dev/sda1  *       2048    4196351    4194304     2G  7 HPFS/NTFS/exFAT
/dev/sda2       4196352 1250273279 1246076928 594.2G  7 HPFS/NTFS/exFAT


Disk /dev/sdb: 298.1 GiB, 320072933376 bytes, 625142448 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

mdadm --examine --verbose/dev/sda:

$ Sudo mdadm --examine --verbose /dev/sda
/dev/sda:
          Magic : Intel Raid ISM Cfg Sig.
        Version : 1.0.00
    Orig Family : 81bdf089
         Family : 81bdf089
     Generation : 00001796
     Attributes : All supported
           UUID : acf55f6b:49f936c5:787fa66e:620d7df0
       Checksum : 6cf37d06 correct
    MPB Sectors : 1
          Disks : 2
   RAID Devices : 1

[ARRAY]:
           UUID : e4d3f954:2f449bfd:43495615:e040960c
     RAID Level : 0
        Members : 2
          Slots : [_U]
    Failed disk : 0
      This Slot : ?
     Array Size : 1250275328 (596.18 GiB 640.14 GB)
   Per Dev Size : 625137928 (298.09 GiB 320.07 GB)
  Sector Offset : 0
    Num Stripes : 2441944
     Chunk Size : 128 KiB
       Reserved : 0
  Migrate State : idle
      Map State : normal
    Dirty State : clean

  Disk00 Serial : W0Q6DV7Z
          State : active failed
             Id : 00000000
    Usable Size : 625136142 (298.09 GiB 320.07 GB)

  Disk01 Serial : W0Q6CJM1
          State : active
             Id : 00010000
    Usable Size : 625136142 (298.09 GiB 320.07 GB)

mdadm --examine --verbose/dev/sdb:

$ Sudo mdadm --examine --verbose /dev/sdb
/dev/sdb:
          Magic : Intel Raid ISM Cfg Sig.
        Version : 1.0.00
    Orig Family : 81bdf089
         Family : 81bdf089
     Generation : 00001796
     Attributes : All supported
           UUID : acf55f6b:49f936c5:787fa66e:620d7df0
       Checksum : 6cf37d06 correct
    MPB Sectors : 1
          Disks : 2
   RAID Devices : 1

  Disk01 Serial : W0Q6CJM1
          State : active
             Id : 00010000
    Usable Size : 625137928 (298.09 GiB 320.07 GB)

[ARRAY]:
           UUID : e4d3f954:2f449bfd:43495615:e040960c
     RAID Level : 0
        Members : 2
          Slots : [_U]
    Failed disk : 0
      This Slot : 1
     Array Size : 1250275328 (596.18 GiB 640.14 GB)
   Per Dev Size : 625137928 (298.09 GiB 320.07 GB)
  Sector Offset : 0
    Num Stripes : 2441944
     Chunk Size : 128 KiB
       Reserved : 0
  Migrate State : idle
      Map State : normal
    Dirty State : clean

  Disk00 Serial : W0Q6DV7Z
          State : active failed
             Id : 00000000
    Usable Size : 625137928 (298.09 GiB 320.07 GB)

ここで私は困難に遭遇しました。配列を組み立ててみました。

$ Sudo mdadm --assemble --verbose /dev/md0 /dev/loop0 /dev/loop1
mdadm: looking for devices for /dev/md0
mdadm: Cannot assemble mbr metadata on /dev/loop0
mdadm: /dev/loop0 has no superblock - Assembly aborted

--forceを使用するか、/ dev/loop0と/ dev/loop1を入れ替えても同じ結果が得られます。

IMSMはCONTAINERタイプのFakeRAIDであるため、コンテナーを組み立てるのではなく作成する必要があるという指摘がいくつかありました。私は試した...

$ Sudo mdadm -CR /dev/md/imsm -e imsm -n 2 /dev/loop[01]
mdadm: /dev/loop0 is not attached to Intel(R) RAID controller.
mdadm: /dev/loop0 is not suitable for this array.
mdadm: /dev/loop1 is not attached to Intel(R) RAID controller.
mdadm: /dev/loop1 is not suitable for this array.
mdadm: create aborted

fewmorethings を読んだ後、原因はIMSM_NO_PLATFORMとIMSM_DEVNAME_AS_SERIALであるように見えました。 Sudoを使用して環境変数を永続化しようと試みた後、私は試しました...

$ Sudo IMSM_NO_PLATFORM=1 IMSM_DEVNAME_AS_SERIAL=1 mdadm -CR /dev/md/imsm -e imsm -n 2 /dev/loop[01]
mdadm: /dev/loop0 appears to be part of a raid array:
       level=container devices=0 ctime=Wed Dec 31 19:00:00 1969
mdadm: metadata will over-write last partition on /dev/loop0.
mdadm: /dev/loop1 appears to be part of a raid array:
       level=container devices=0 ctime=Wed Dec 31 19:00:00 1969
mdadm: container /dev/md/imsm prepared.

それは何かです。よく見て...

$ ls -l /dev/md
total 0
lrwxrwxrwx 1 root root 8 Apr  2 05:32 imsm -> ../md126
lrwxrwxrwx 1 root root 8 Apr  2 05:20 imsm0 -> ../md127

/ dev/md/imsm0および/ dev/md127は、物理ディスクドライブ(/ dev/sdaおよび/ dev/sdb)に関連付けられています。/dev/md/imsm(/ dev/md126を指す)は、ループバックデバイスに基づいて新しく作成されたコンテナーです。よく見て...

$ Sudo IMSM_NO_PLATFORM=1 IMSM_DEVNAME_AS_SERIAL=1 mdadm -Ev /dev/md/imsm
/dev/md/imsm:
          Magic : Intel Raid ISM Cfg Sig.
        Version : 1.0.00
    Orig Family : 00000000
         Family : ff3cb556
     Generation : 00000001
     Attributes : All supported
           UUID : 00000000:00000000:00000000:00000000
       Checksum : 7edb0f81 correct
    MPB Sectors : 1
          Disks : 1
   RAID Devices : 0

  Disk00 Serial : /dev/loop0
          State : spare
             Id : 00000000
    Usable Size : 625140238 (298.09 GiB 320.07 GB)

    Disk Serial : /dev/loop1
          State : spare
             Id : 00000000
    Usable Size : 625140238 (298.09 GiB 320.07 GB)

    Disk Serial : /dev/loop0
          State : spare
             Id : 00000000
    Usable Size : 625140238 (298.09 GiB 320.07 GB)

いいですね。アレイを起動してみましょう。コンテナを起動するためにインクリメンタルアセンブリモードを使用するとの情報( ここ および ここ )を見つけました。

$ Sudo IMSM_NO_PLATFORM=1 IMSM_DEVNAME_AS_SERIAL=1 mdadm -I /dev/md/imsm

それは私に何も与えませんでした。 verboseフラグを使用してみましょう。

$ Sudo IMSM_NO_PLATFORM=1 IMSM_DEVNAME_AS_SERIAL=1 mdadm -Iv /dev/md/imsm
mdadm: not enough devices to start the container

ああわざわざ。/proc/mdstatを確認してみましょう。

$ Sudo cat /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md126 : inactive loop1[1](S) loop0[0](S)
      2210 blocks super external:imsm

md127 : inactive sdb[1](S) sda[0](S)
      5413 blocks super external:imsm

unused devices: <none>

まあ、それは正しくありません-ブロックの数が一致しません。アセンブルを試みたときのメッセージをよく見ると、mdadmは「メタデータは/ dev/loop0の最後のパーティションを上書きするので、/ dev/loop0に関連付けられているイメージファイルがホースされていると思います」と言っているようです。ありがたいことに、私はこれらのイメージのバックアップコピーを持っているので、それらを取得して最初からやり直すことができますが、USB3を介しても300〜600GBを再コピーするには時間がかかります。

とにかく、この時点で、私は困惑しています。現時点で私が次に何を試すべきかわからないので、誰かがアイデアを持っていることを願っています。

これはこの問題に対処するための正しい道ですか、いくつかの設定を正しくする必要がありますか?または、IMSM RAID-0ディスクイメージをマウントするための上記のアプローチは完全に間違っていますか?

6
Ryan

/dev/loop0のパーティションテーブル、および/dev/loop0/dev/loop1について報告されたディスクイメージサイズを見ると、2つのディスクが単純にボルトで固定されていて、パーティションテーブルが結果の仮想ディスク用に構築された:

Disk /dev/loop0: 298.1 GiB, 320072933376 bytes, 625142448 sectors

Device       Boot   Start        End    Sectors   Size Id Type
/dev/loop0p1 *       2048    4196351    4194304     2G  7 HPFS/NTFS/exFAT
/dev/loop0p2      4196352 1250273279 1246076928 594.2G  7 HPFS/NTFS/exFAT

そして

Disk /dev/loop1: 298.1 GiB, 320072933376 bytes, 625142448 sectors

2つのディスクを298.1 GiB and 298.1 GiBで取得すると、596.2 GiB合計になります。 2つのパーティション2G + 594.2Gのサイズも596.2 GiBになります(これは、「G」がGiBを示すと想定しています)。

スーパーブロック情報をmdadmで認識できないことをすでに警告しているので、純粋にディスクパーティションラベルに基づいて、次のようにアレイを構築しようとします。

mdadm --build /dev/md0 --raid-devices=2 --level=0 --chunk=128 /dev/loop0 /dev/loop1
cat /proc/mdstat

128KiBのチャンクサイズを持っていますが、ディスク上にまだ存在するメタデータによって記述されたチャンクサイズと一致します。

それが機能する場合は、結果のRAID0のパーティションにアクセスできます。

ld=$(losetup --show --find --offset=$((4196352*512)) /dev/md0)
echo loop device is $ld
mkdir -p /mnt/dsk
mount -t ntfs -o ro $ld /mnt/dsk

すでにいくつかのループデバイスが使用されているため、次の空きループデバイスの名前を想定せず、代わりにlosetupコマンドを使用して、使用されているデバイスを教えます。これは$ldに入れられます。 4196532セクター(それぞれ512バイト)のオフセットは、2番目のパーティションのイメージへのオフセットに対応します。同様に、losetupコマンドからオフセットを省略して、mountオプションに追加することもできます。

2
roaima