需要查找在RAID-10阵列中镜像的驱动器


8

我有一个运行在openSUSE 12.2上的家庭媒体服务器。我在RAID-10配置中使用了八个2TB驱动器。我特意购买了两种不同类型的驱动器:四个希捷梭子鱼绿色和四个Western Digital Red。我的目标是配置RAID,以使阵列中的每个镜像对都由不同的驱动器组成(即,一个Seagate驱动器和一个WD驱动器)。不幸的是,YaST2分区程序没有在阵列结构中给我这样的选择,所以现在我试图找出默认RAID10结构是什么样的。

我确实知道以下几点:

  • sdc,sdd,sde和sdf都是WD驱动器
  • sdg,sdh,sdi和sdj都是Seagate驱动器

创建RAID时,我选择了默认的“ n2”布局。基于这两个来源的信息,我的猜测是相邻驱动器已镜像(即sdc == sdd,sde == sdf等),但我想确定一下:

这是'mdadm --detail / dev / md0'的输出:

/dev/md0:
        Version : 1.0
  Creation Time : Sat Mar 16 12:55:11 2013
     Raid Level : raid10
     Array Size : 7814045696 (7452.05 GiB 8001.58 GB)
  Used Dev Size : 1953511424 (1863.01 GiB 2000.40 GB)
   Raid Devices : 8
  Total Devices : 8
    Persistence : Superblock is persistent

  Intent Bitmap : Internal

    Update Time : Sat Mar 16 13:09:37 2013
          State : active, resyncing
 Active Devices : 8
Working Devices : 8
 Failed Devices : 0
  Spare Devices : 0

         Layout : near=2
     Chunk Size : 2048K

  Resync Status : 1% complete

           Name : aldaris:0  (local to host aldaris)
           UUID : c6cc3943:97394500:b77d44cd:f02ed876
         Events : 149

    Number   Major   Minor   RaidDevice State
       0       8       33        0      active sync   /dev/sdc1
       1       8       49        1      active sync   /dev/sdd1
       2       8       65        2      active sync   /dev/sde1
       3       8       81        3      active sync   /dev/sdf1
       4       8       97        4      active sync   /dev/sdg1
       5       8      113        5      active sync   /dev/sdh1
       6       8      129        6      active sync   /dev/sdi1
       7       8      145        7      active sync   /dev/sdj1

这是/ proc / mdstat的内容:

Personalities : [raid10] md0 : active raid10 sdj1[7] sdi1[6] sdh1[5] sdg1[4] sdf1[3] sde1[2] sdd1[1] sdc1[0]
      7814045696 blocks super 1.0 2048K chunks 2 near-copies [8/8] [UUUUUUUU]
      [>....................]  resync =  4.8% (375163456/7814045696) finish=1206.5min speed=102751K/sec
      bitmap: 57/59 pages [228KB], 65536KB chunk

unused devices: <none>

所以我的问题是:

  1. 我如何知道哪个驱动器是彼此的镜像?
  2. 有什么方法可以改变这种情况,还是我应该只是交换电线(因为这将交换驱动器号)然后重建RAID?

提前致谢。


切线注意,对于任何想知道我这样做的理由是:在相同的使用负载,正常运行时间和温度下运行的相同型号和批次的驱动器几乎没有系统变化,并且将主要驱动驱动器之间的故障时间差异在制造过程中随机变化。这增加了多个驱动器一次死亡的风险。通过购买不仅来自不同批次的驱动器,而且还购买完全不同的制造商的驱动器,我将系统的变化引入到我的阵列中,从而影响哪些驱动器将在相似的时间发生故障。


1
家用媒体服务器对于ServerFault而言是不在主题的。就是说,您显然为此付出了很多努力,我将其标记为向unix.SE的迁移。
安德鲁B

@AndrewB,为什么呢?
poige

这是一个非常有趣的问题,其背后的原因已广为人知。您不必更改线路,因为在(重新)创建RAID更加简单时,只需指定磁盘即可。
poige

@poige这属于家庭环境中的任何事物。我试图明确地说,尽管如此,我还是认为对这个问题进行了充分的研究。
Andrew B

如果我要大肆猜测,那我猜您可以看一下该RaidDevice专栏。它可能像(0,1),(2,3),(4,5),(6,7)一样简单。那会让我假设您需要使RaidDevice像WD / Sea / WD / Sea / etc那样排成一行……但是我不确定100%是否如此。
Zoredache

Answers:


5

的最新版本mdadm在数组的详细信息中显示了此权限。来自的例子mdadm v3.3 - 3rd September 2013

 $ mdadm --detail /dev/md1

/dev/md1:
        Version : 1.1
  Creation Time : Tue Aug 23 11:45:41 2016
     Raid Level : raid10
     Array Size : 3864803328 (3685.76 GiB 3957.56 GB)
  Used Dev Size : 1932401664 (1842.88 GiB 1978.78 GB)
   Raid Devices : 4
  Total Devices : 4
    Persistence : Superblock is persistent

  Intent Bitmap : Internal

    Update Time : Fri Aug 26 09:39:28 2016
          State : active
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

         Layout : near=2
     Chunk Size : 512K

           Name : px4-300r-THXOAP:1  (local to host px4-300r-THXOAP)
           UUID : 5ee06437:83dfdb64:808feaa2:5d57b1e6
         Events : 620

    Number   Major   Minor   RaidDevice State
       4       8       50        0      active sync set-A   /dev/sdd2
       1       8       34        1      active sync set-B   /dev/sdc2
       2       8       18        2      active sync set-A   /dev/sdb2
       3       8        2        3      active sync set-B   /dev/sda2

注意符号set-Aset-B。在上述情况下,sdd并且sdb可以在不丢失数据一起失败。但是,在重建阵列时,此数据可能不可用。


2

我遇到了同样的问题,在搜索了一段时间后,我没有找到可靠的答案。经过考虑后,我发现这些镜像具有相同的数据,因此我们可以比较其中的一部分。

注意:请注意,如果使用相同的校验和有两个以上的驱动器,则可能是比较空磁盘,请选择另一个偏移量(跳过选项)。

使用以下几条命令,您可以弄清楚:

for disk in sda sdb sdc sdd
do
  echo -n "$disk = ";
  dd if=/dev/$disk skip=1M bs=1M count=1 2>/dev/null | md5sum;
done

这将输出类似:

sda = 7c4ef0f3e0143b35e044d5d65908a3a2  -
sdb = 7c4ef0f3e0143b35e044d5d65908a3a2  -
sdc = e02f7d61ad3791bd691da5b7516928a5  -
sdd = e02f7d61ad3791bd691da5b7516928a5  -

现在我们知道sda / sdb是一个镜像,而sdc / sdd是另一个镜像。为了避免数据丢失,每个必须保留一个。

“ dd”命令从磁盘起始位置(跳过= 1M)以1 MB的偏移量读取一次(计数= 1)1 MB(bs = 1M)。不要跳过= 0,因为磁盘的开头包含不同的信息。数据通常在1MB之后开始。


dd if=/dev/$disk skip=1M bs=1M count=1没有为我工作。dd (coreutils) 8.23Debian 8(Jessie)的版本不支持skip单位。相反,我使用skip=1where 1是相对于的bs。可能是拼写错误?
DanielBöhmer16年

仅供参考,如果您看到MD5总计,则d41d8cd98f00b204e9800998ecf8427e您的dd通话失败。那是空字符串的哈希值:-)
DanielBöhmer16年

0

我认为您正在谈论的是真正的RAID 10阵列(1 + 0条带化镜像)

sdc/sdg = md0 raid1 2TB |
sdd/sdh = md1 raid1 2TB |_  md4 raid0 8TB
sde/sdi = md2 raid1 2TB |
sdf/sdj = md3 raid1 2TB |

1.创建您的4个raid1数组:

mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/{sdc,sdg}
mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/{sdd,sdh}
mdadm --create /dev/md2 --level=1 --raid-devices=2 /dev/{sde,sdi}
mdadm --create /dev/md3 --level=1 --raid-devices=2 /dev/{sdf,sdj}

目前,您有4个RAID 1阵列,每个阵列有2TB的空间,

2.让我们组装它们!

mdadm --create /dev/md4 --run --level=0 --raid-devices=4 /dev/md{0,1,2,3}

--run选项很有用,因为某些组件在另一个数组中处于活动状态

3.修改您的mdadm.conf文件

您可能需要(取决于您的配置)调整此文件以反映有关我们新阵列(/ dev / md4)的更改。

4.享受。 您的新DIY raid10阵列!


不,他是在谈论linux的mdadm raid10个性。我相信您的回答并不适用(尽管,公平地说,它确实给了OP一个实现他需要做的选择的机会)
GnP 2014年

性能和支持的功能也有所不同。
约阿希姆·瓦格纳

0

您始终可以通过比较数据的粗略方式来验证哪些是镜像,例如:

# dd if=/dev/sda1 bs=1M skip=10 count=50 2> /dev/null | md5sum -
7c01afa434fc74aeddc8ec0546e4c332  -
# dd if=/dev/sdb1 bs=1M skip=10 count=50 2> /dev/null | md5sum -
1f0f8166857710d555cb35db4a23891a  -
# dd if=/dev/sdg1 bs=1M skip=10 count=50 2> /dev/null | md5sum -
7c01afa434fc74aeddc8ec0546e4c332  -
# dd if=/dev/sdf1 bs=1M skip=10 count=50 2> /dev/null | md5sum -
1f0f8166857710d555cb35db4a23891a  -

(如果未找到任何匹配项,则可能需要增加skip =,因为您没有跳过RAID superblocksl;并且如果您对2个以上的磁盘使用相同的md5sum,则可能需要增加count =,因为'可能正在读取m5并求和为零-以防止您应先将一些数据放在RAID上,否则它们可能充满了零)

至于周围的交换线,您不需要这样做-mdadm应该使用mdadm --create命令行中指定的设备来创建RAID ,因此您只需在命令行中以不同顺序指定驱动器即可。


0

在每个组件设备(即/ dev / sda1,/ dev / sdb1等)上运行“ mdadm --examine设备”。那里的信息应该帮助您确定哪些组件是彼此的镜像。

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.