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
使用しているデバイスを知らせるようにコマンドに要求します。$ld
2番目のパーティションイメージのオフセット。losetup
コマンドからオフセットを省略してmount
オプションに追加することもできます。