背景

背景

Q:Linuxとmdadmを使用してデータを読み書きする方法は?ファイルとしてIntel Rapid Storage Technology RAID-0アレイ(Windows 7がインストールされた状態でNTFSでフォーマットされている)に使用されるハードドライブで作成されたディスクイメージですか?

問題:アレイ内のドライブの1つが破損しているため、ドライブを交換する前にできるだけ多くのデータをコピーしたい(したがってアレイが破壊される)。

私の問題を解決できる場合は、この問題の代替ソリューションで開いています。

背景

私は、RAID-0(FakeRAID-0)で構成された2つのハードドライブを搭載したIntel Rapid Storage Technologyコントローラ(さまざまな場合はRST、RSTe、またはIMSMと呼ばれる)を搭載したラップトップを持っています。ラップトップがこの構成で出荷されたため、RAID-0はオプションではありません。ディスクの1つには不良セクタがたくさん蓄積しているようですが、他のディスクは完全に正常です。全体として、ディスクは依然としてオペレーティングシステム(Windows 7 64ビット)で起動できるほど健全ですが、破損したディスク領域にアクセスするとオペレーティングシステムが時々停止することがあり、破損したディスクを引き続き使用しようとするのは悪い考えです。同じです。 。ディスクからできるだけ多くのデータをコピーし、破損したドライブを交換したいと思います。破損したディスクでのライブ操作を実行することは悪いと考えられているため、後でmdadmまたは同様のものを使用してイメージをマウントできるように両方のディスクをイメージングすることにしました。私は多くの時間を費やし、多くの読書をしましたが、まだディスクイメージを(偽)RAID-0アレイにマウントすることに成功していません。ここで行った手順を覚えてみましょう。今日は長い一日なので、おやつやドリンクを用意してください。

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

画像を取得した後、aptを使用してmdadmをインストールしました。ただし、これにより、2013年の以前のバージョンのmdadmがインストールされます。変更ログでは IMSM のサポートが改善されたため、次のコマンドを使用して mdadm 3.4 をコンパイルしてインストールしました。このガイド、カーネル4.4.2以降へのアップグレードが含まれています。ここで注目すべき唯一の問題は、いくつかのテストが正しく行われていないことです。ただし、ガイドラインではこれが許容できるように見えます。

それ以来記事を読んだ。珍しい 場所イメージを使用するには、ループバックデバイスを使用する必要があります。私は問題なくディスクイメージを/dev/loop0と/dev/loop1としてマウントしました。

プロセスのこの時点で、いくつかの関連情報は次のとおりです。

mdadm -詳細プラットフォーム:

$ 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は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

記事を読んだ後珍しい もっと ものここで、犯人は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

それは私に何も与えませんでした。詳細なフラグを試してみましょう。

$ 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〜600 GBを再コピーするのに時間がかかります。

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

これがこの問題を解決する正しい方法ですか?いくつかの設定をすればいいのではないですか?それとも、IMSM RAID-0ディスクイメージをマウントするための上記の方法は完全に間違っていますか?

答え1

のパーティションテーブルと報告された/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

両方のディスクのサイズをそれぞれ298.1GiBと298.1GiBに調整すると、合計596.2GiBになります。その後、2つのパーティションのサイズを2G + 594.2Gに調整すると、596.2GiBも得られます。 (これは「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

すでに複数のループデバイスを使用しているため、次の使用可能なループデバイスの名前を想定せずに、代わりに4196532セクタ(セクタあたり512バイト)がlosetup使用しているデバイスを知らせるようにコマンドに要求します。$ld2番目のパーティションイメージのオフセット。losetupコマンドからオフセットを省略してmountオプションに追加することもできます。

関連情報