如何从损坏的RAID系统挂载磁盘?


16

我有一个可怕的情况,我必须在救援的Debian Linux中从损坏的RAID系统中恢复数据。我只想以只读方式将它们全部挂载到/ mnt / rescue,以便能够将VMWare GSX映像复制到另一台计算机上,并稍后将它们迁移到ESXi。相关命令的输出如下。

fdisk -l

Disk /dev/sda: 1500.3 GB, 1500301910016 bytes
255 heads, 63 sectors/track, 182401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0005e687

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1         523     4200997   fd  Linux raid autodetect
/dev/sda2             524         785     2104515   fd  Linux raid autodetect
/dev/sda3             786      182401  1458830520   fd  Linux raid autodetect

Disk /dev/sdb: 1500.3 GB, 1500301910016 bytes
255 heads, 63 sectors/track, 182401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00014fc7

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         523     4200997   fd  Linux raid autodetect
/dev/sdb2             524         785     2104515   fd  Linux raid autodetect
/dev/sdb3             786      182401  1458830520   fd  Linux raid autodetect

Disk /dev/md0: 4301 MB, 4301717504 bytes
2 heads, 4 sectors/track, 1050224 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/md0 doesn't contain a valid partition table

Disk /dev/md1: 2154 MB, 2154954752 bytes
2 heads, 4 sectors/track, 526112 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/md1 doesn't contain a valid partition table

我试图按以下方式安装磁盘。

mount -o ro /dev/sda1 /mnt/rescue

然后我得到以下错误。

mount: unknown filesystem type 'linux_raid_member'

猜测文件系统也不顺利。

mount -o ro -t ext3 /dev/sda1 /mnt/rescue/
mount: /dev/sda1 already mounted or /mnt/rescue/ busy

因此,我尝试如下创建虚拟设备。

mdadm -A -R /dev/md9 /dev/sda1

这将导致以下消息。

mdadm: cannot open device /dev/sda1: Device or resource busy
mdadm: /dev/sda1 has no superblock - assembly aborted

现在我迷路了,我不知道如何恢复磁盘并取回数据。以下是所有3个磁盘的mda --examine输出(我认为应该是3x raid1磁盘)。

/ dev / sda1:

          Magic : a92b4efc
        Version : 0.90.00
           UUID : 6708215c:6bfe075b:776c2c25:004bd7b2 (local to host rescue)
  Creation Time : Mon Aug 31 17:18:11 2009
     Raid Level : raid1
  Used Dev Size : 4200896 (4.01 GiB 4.30 GB)
     Array Size : 4200896 (4.01 GiB 4.30 GB)
   Raid Devices : 3
  Total Devices : 2
Preferred Minor : 0

    Update Time : Sun Jun  2 00:58:05 2013
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0
       Checksum : 9070963e - correct
         Events : 19720


      Number   Major   Minor   RaidDevice State
this     1       8        1        1      active sync   /dev/sda1

   0     0       0        0        0      removed
   1     1       8        1        1      active sync   /dev/sda1
   2     2       8       17        2      active sync   /dev/sdb1

/ dev / sda2:

          Magic : a92b4efc
        Version : 0.90.00
           UUID : e8f7960f:6bbea0c7:776c2c25:004bd7b2 (local to host rescue)
  Creation Time : Mon Aug 31 17:18:11 2009
     Raid Level : raid1
  Used Dev Size : 2104448 (2.01 GiB 2.15 GB)
     Array Size : 2104448 (2.01 GiB 2.15 GB)
   Raid Devices : 3
  Total Devices : 2
Preferred Minor : 1

    Update Time : Sat Jun  8 07:14:24 2013
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0
       Checksum : 120869e1 - correct
         Events : 3534


      Number   Major   Minor   RaidDevice State
this     1       8        2        1      active sync   /dev/sda2

   0     0       0        0        0      removed
   1     1       8        2        1      active sync   /dev/sda2
   2     2       8       18        2      active sync   /dev/sdb2

/ dev / sda3:

          Magic : a92b4efc
        Version : 0.90.00
           UUID : 4f2b3b67:c3837044:776c2c25:004bd7b2 (local to host rescue)
  Creation Time : Mon Aug 31 17:18:11 2009
     Raid Level : raid5
  Used Dev Size : 1458830400 (1391.25 GiB 1493.84 GB)
     Array Size : 2917660800 (2782.50 GiB 2987.68 GB)
   Raid Devices : 3
  Total Devices : 2
Preferred Minor : 2

    Update Time : Sat Jun  8 14:47:00 2013
          State : clean
 Active Devices : 1
Working Devices : 1
 Failed Devices : 1
  Spare Devices : 0
       Checksum : 2b2b2dad - correct
         Events : 36343894

         Layout : left-symmetric
     Chunk Size : 64K

      Number   Major   Minor   RaidDevice State
this     1       8        3        1      active sync   /dev/sda3

   0     0       0        0        0      removed
   1     1       8        3        1      active sync   /dev/sda3
   2     2       0        0        2      faulty removed

cat /proc/mdstat
Personalities : [raid1]
md2 : inactive sda3[1](S) sdb3[2](S)
      2917660800 blocks

md1 : active raid1 sda2[1] sdb2[2]
      2104448 blocks [3/2] [_UU]

md0 : active raid1 sda1[1] sdb1[2]
      4200896 blocks [3/2] [_UU]

md2似乎已损坏,可能是与我的VMWare映像有关的袭击。

我想通过将其安装在RAID之外来访问md2中的数据(活动且未损坏的磁盘上的数据,即/ dev / sda3)。

只是执行一个好主意

mdadm --manage /dev/md2 --remove /dev/sda3 

(因为fdisk看不到md2,它是否还能工作)?

我应该通过运行重新对​​其他突袭md0和md1进行复仇吗

mdadm --assemble /dev/md0 /dev/sda1 /dev/sdb1

更新0:我不能组装md0和md2。

root@rescue ~ # mdadm --assemble /dev/md0 /dev/sda1 /dev/sdb1
mdadm: cannot open device /dev/sda1: Device or resource busy
mdadm: /dev/sda1 has no superblock - assembly aborted
root@rescue ~ # mdadm --assemble /dev/md2 /dev/sda3 /dev/sdb3
mdadm: cannot open device /dev/sda3: Device or resource busy
mdadm: /dev/sda3 has no superblock - assembly aborted

无法使用mount -t auto进行安装。

root@rescue ~ # mount -t auto -o ro /dev/md0 /mnt/rescue/
/dev/md0 looks like swapspace - not mounted
mount: you must specify the filesystem type
root@rescue ~ # mount -t auto -o ro /dev/md2 /mnt/rescue/
mount: you must specify the filesystem type

挂载/ dev / md1可以,但是上面没有VMWare数据。

root@rescue /mnt/rescue # ll
total 139M
-rw-r--r-- 1 root root 513K May 27  2010 abi-2.6.28-19-server
-rw-r--r-- 1 root root 631K Sep 16  2010 abi-2.6.32-24-server
-rw-r--r-- 1 root root 632K Oct 16  2010 abi-2.6.32-25-server
-rw-r--r-- 1 root root 632K Nov 24  2010 abi-2.6.32-26-server
-rw-r--r-- 1 root root 632K Dec  2  2010 abi-2.6.32-27-server
-rw-r--r-- 1 root root 632K Jan 11  2011 abi-2.6.32-28-server
-rw-r--r-- 1 root root 632K Feb 11  2011 abi-2.6.32-29-server
-rw-r--r-- 1 root root 632K Mar  2  2011 abi-2.6.32-30-server
-rw-r--r-- 1 root root 632K Jul 30  2011 abi-2.6.32-33-server
lrwxrwxrwx 1 root root    1 Aug 31  2009 boot -> .
-rw-r--r-- 1 root root 302K Aug  4  2010 coffee.bmp
-rw-r--r-- 1 root root  89K May 27  2010 config-2.6.28-19-server
...

更新1:

我试图停止md2和md0并再次组装。

mdadm -S /dev/md0

root@rescue ~ # mount -t auto -o ro /dev/md0 /mnt/rescue/
/dev/md0 looks like swapspace - not mounted
mount: you must specify the filesystem type

mdadm -S /dev/md2

root@rescue ~ # mount -t auto -o ro /dev/md2 /mnt/rescue/
mount: you must specify the filesystem type

有任何想法吗?

更新2:

由于出现以下错误消息,因此无法从一个磁盘进行组装。

root@rescue ~ # mdadm -S /dev/md2
root@rescue ~ # mdadm --assemble /dev/md2 /dev/sda3
mdadm: /dev/md2 assembled from 1 drive - not enough to start the array.

root@rescue ~ # mdadm -S /dev/md2
mdadm: stopped /dev/md2
root@rescue ~ # mdadm --assemble /dev/md2 /dev/sdb3
mdadm: /dev/md2 assembled from 1 drive - not enough to start the array.

甚至新的袭击也失败了。

root@rescue ~ # mdadm -S /dev/md9
mdadm: stopped /dev/md9
root@rescue ~ # mdadm --assemble /dev/md9 /dev/sda3
mdadm: /dev/md9 assembled from 1 drive - not enough to start the array.

root@rescue ~ # mdadm -S /dev/md9
mdadm: stopped /dev/md9
root@rescue ~ # mdadm --assemble /dev/md9 /dev/sdb3
mdadm: /dev/md9 assembled from 1 drive - not enough to start the array.

创建新的md磁盘也失败。

root@rescue ~ # cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sda1[1] sdb1[2]
      4200896 blocks [3/2] [_UU]

md1 : active raid1 sda2[1] sdb2[2]
      2104448 blocks [3/2] [_UU]

unused devices: <none>
root@rescue ~ # mdadm -A -R /dev/md9 /dev/sda3
mdadm: failed to RUN_ARRAY /dev/md9: Input/output error
mdadm: Not enough devices to start the array.
root@rescue ~ # cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4]
md9 : inactive sda3[1]
      1458830400 blocks

md0 : active raid1 sda1[1] sdb1[2]
      4200896 blocks [3/2] [_UU]

md1 : active raid1 sda2[1] sdb2[2]
      2104448 blocks [3/2] [_UU]

unused devices: <none>
root@rescue ~ # mdadm -S /dev/md9
mdadm: stopped /dev/md9
root@rescue ~ # mdadm -A -R /dev/md9 /dev/sdb3
mdadm: failed to RUN_ARRAY /dev/md9: Input/output error
mdadm: Not enough devices to start the array.

更新3:

从md2删除磁盘不起作用。

mdadm --remove /dev/md2 /dev/sda3
mdadm: cannot get array info for /dev/md2

更新4:

最后,--force希望通过运行汇编来完成。我现在正在将文件复制到另一台服务器。


mdadm --assemble是要走的路。不尝试--remove
Hauke Laging 2013年

mdadm --assemble /dev/md0 /dev/sda1 /dev/sdb1 mdadm: /dev/md0 has been started with 2 drives (out of 3). 但是然后挂载失败(我不知道文件系统类型)。 mount -o ro /dev/md0 /mnt/rescue /dev/md0 looks like swapspace - not mounted mount: you must specify the filesystem type
Tony Stark 2013年

也许sd?1是交换空间。尝试组装md1md2安装mount -t auto ...
Hauke Laging 2013年

@HaukeLaging:我尝试组装md0,md1和md2(请参阅更新的帖子)。只有md1成功组装并挂载。另外两个无法组装和安装。有任何想法吗?
托尼·史塔克

1
您能够解决此问题吗?如果您愿意的话,请考虑发布一个最终为您服务的解决方案的自我解答(或接受现有解答,如果有帮助的话),以便将来的访问者受益。
2014年

Answers:


3

就我而言,我提出了CentOS 7,并尝试按照此页面上所有人的说明进行操作。我一直遇到设备繁忙的消息。我认为您之所以得到

mdadm:无法打开设备/ dev / sda1:设备或资源繁忙

错误消息是因为该设备已经以其他方式挂载。

我也完全不想对磁盘进行任何更改,因为用例是从RAID1阵列中提取非常大的文件,否则无法通过各种可能的方式提取,而最快的方法是将其中一个驱动器拉出,我确实想将驱动器放回原处,并且仍然具有我的配置。

这是我在其他站点上进行一些在线研究后所做的事情: 注意:NAS:0是我的NAS设备的名称,因此请适当替换。

它会自动挂载,尽管如果您要运行mount命令时会说未挂载,则可以通过运行以下命令来验证它是否已挂载:

[root@localhost Desktop]# cat /proc/mdstat 
Personalities : [raid1] 
md127 : active (auto-read-only) raid1 sdb2[0]
      1952996792 blocks super 1.2 [2/1] [U_]

unused devices: <none>

注意它是自动安装在 /dev/md127我下面。

那好吧:

[root@localhost Desktop]# mdadm -A -R /dev/md9 /dev/sdb2 
mdadm: /dev/sdb2 is busy - skipping

[root@localhost Desktop]# mdadm --manage --stop /dev/md/NAS\:0 
mdadm: stopped /dev/md/NAS:0

[root@localhost Desktop]# mdadm -A -R /dev/md9 /dev/sdb2
mdadm: /dev/md9 has been started with 1 drive (out of 2).

[root@localhost Desktop]# mount /dev/md9 /mnt/

对我来说就做到了。

如有疑问,请对驱动器进行DD制作完整副本并使用CentOS或其他Linux Live CD。


这个答案对我最大的帮助。谢谢!对我来说,它也被安装在下面,/dev/md127所以我发出了这样的停止信号mdadm --manage --stop /dev/md127
FerencGéczi18年

4

如果可以的话,您应该做一个 dd在做任何事情之前先对整个磁盘映像处理,以防万一。

mdadm释放/ dev / sda3后,您应该可以直接挂载它:

mdadm --stop / dev / md2

挂载/ dev / sda3 / mnt / rescue

如果这不起作用,testdisk通常可以在原始块设备上找到文件系统。


1
这对我不起作用。“ mount:未知文件系统类型'linux_raid_member'”
Cerin

4

我通过“硬方法”完成了此操作:(首先,如果可能的话,请在执行任何操作之前先克隆该磁盘!)

dmesg为RAID磁盘或尝试(例如:sdc1

$ fdisk -l

将RAID-DISK-Flag更改为Linux文件系统(ext3或其他文件),保存并重新启动。

之后

$ mdadm --zero-superblock /dev/sdx 

和瞧,你可以安装

$ mount /dev/sdc1 /mnt

1
这将禁用RAID并创建一个“普通”驱动器。
CousinCocaine
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.