如何使用mdadm调整RAID1阵列的大小?


12

我正在运行Ubuntu 11.04(内核2.6.38-11)。我用2x500GB驱动器替换了2x160GB。它们被配置为RAID1。

分区表显示正确的大小。这是sfdisk:

# sfdisk -d /dev/sdb
# partition table of /dev/sdb
unit: sectors

/dev/sdb1 : start=       63, size=   192717, Id=fd, bootable
/dev/sdb2 : start=   192780, size=  7807590, Id=fd
/dev/sdb3 : start=  8000370, size=968767695, Id=fd
/dev/sdb4 : start=        0, size=        0, Id= 0

和fdisk:

# fdisk -l /dev/sdb

Disk /dev/sdb: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 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: 0x0006c78f

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1          12       96358+  fd  Linux raid autodetect
/dev/sdb2              13         498     3903795   fd  Linux raid autodetect
/dev/sdb3             499       60801   484383847+  fd  Linux raid autodetect

但是我没有看到新的空间:

root@green:~# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/md2              143G  134G  8.3G  95% /


root@green:~# mdadm --examine /dev/sdb3
/dev/sdb3:
          Magic : a92b4efc
        Version : 0.90.00
           UUID : b8f83980:f60d820c:74c46fbf:0baa68bc
  Creation Time : Sun Mar 29 18:48:46 2009
     Raid Level : raid1
  Used Dev Size : 152247936 (145.19 GiB 155.90 GB)
     Array Size : 152247936 (145.19 GiB 155.90 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 2

    Update Time : Mon Oct 10 19:22:36 2011
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0
       Checksum : 7b5debb7 - correct
         Events : 10729526


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

我尝试了mdadm和resize2fs:

# mdadm --grow /dev/md2 --size=max
mdadm: component size of /dev/md2 has been set to 152247936K

# resize2fs /dev/md2 
resize2fs 1.41.14 (22-Dec-2010)
The filesystem is already 38061984 blocks long.  Nothing to do!

有任何想法吗?

根据要求添加

# cat /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md2 : active raid1 sdb3[0] sda3[1]
      152247936 blocks [2/2] [UU]

md0 : active raid1 sdb1[0] sda1[1]
      96256 blocks [2/2] [UU]

md1 : active raid1 sdb2[0] sda2[1]
      3903680 blocks [2/2] [UU]

unused devices: <none>

隔断

# cat /proc/partitions 
major minor  #blocks  name

   8        0  488386584 sda
   8        1      96358 sda1
   8        2    3903795 sda2
   8        3  152248005 sda3
   8       16  488386584 sdb
   8       17      96358 sdb1
   8       18    3903795 sdb2
   8       19  152248005 sdb3
   9        1    3903680 md1
   9        0      96256 md0
   9        2  152247936 md2

分手:

# parted
GNU Parted 2.3
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print all                                                        
Model: ATA WDC WD5000AAKX-0 (scsi)
Disk /dev/sda: 500GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system     Flags
 1      32.3kB  98.7MB  98.7MB  primary  ext3            boot, raid
 2      98.7MB  4096MB  3997MB  primary  linux-swap(v1)  raid
 3      4096MB  500GB   496GB   primary  ext3            raid


Model: ATA WDC WD5000AAKS-4 (scsi)
Disk /dev/sdb: 500GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system     Flags
 1      32.3kB  98.7MB  98.7MB  primary  ext3            boot, raid
 2      98.7MB  4096MB  3997MB  primary  linux-swap(v1)  raid
 3      4096MB  500GB   496GB   primary  ext3            raid


Model: Linux Software RAID Array (md)
Disk /dev/md1: 3997MB
Sector size (logical/physical): 512B/512B
Partition Table: loop

Number  Start  End     Size    File system     Flags
 1      0.00B  3997MB  3997MB  linux-swap(v1)


Model: Linux Software RAID Array (md)
Disk /dev/md0: 98.6MB
Sector size (logical/physical): 512B/512B
Partition Table: loop

Number  Start  End     Size    File system  Flags
 1      0.00B  98.6MB  98.6MB  ext3


Model: Linux Software RAID Array (md)
Disk /dev/md2: 156GB
Sector size (logical/physical): 512B/512B
Partition Table: loop

Number  Start  End    Size   File system  Flags
 1      0.00B  156GB  156GB  ext3

通过电子邮件发表评论:

问题出在元数据中,您只需要使用参数--update devicesize组装raid数组即可

然后-G / dev / md?-z max将完成工作:)


输出是cat /proc/mdstat什么?怎么cat /proc/partitions
星期一

上面增加了输出。
Paul Schreiber

您没有提到如何将数据复制到新磁盘上。但是,它会严重影响答案。
poige

通过使用mdadm --add用sfdisk对它们进行分区,并让数据同步,我将数据复制到了新磁盘上。
Paul Schreiber,

@Paul Schreiber,sfdisk您说(?)…是指您也复制了磁盘分区架构吗?
poige,2011年

Answers:


9

只需使用

mdadm --grow --size max /dev/md2

这样您就可以使用

resize2fs /dev/md2

使文件系统匹配RAID大小。所有这些都是在线完成的,甚至无需卸载md2。


1
完整命令:resize2fs -p /dev/md2
米兰·科尔斯拉格

@MilanKerslager,那里在做什么-p
Jaime Hablutzel

1
@JaimeHablutzel -p是百分比完成栏,因此您可能会花费一些时间(原始答案已经确定),因此您知道发生了什么。
米兰·克鲁斯格

2

我经常使用mdadm,并认为它是最危险的Linux实用程序之一。但是,如果采取正确的安全预防措施,则可以避免大多数情况下潜在的数据丢失备份所有数据!过去,我曾被mdadm咬过两次,丢失了700GB以上的数据,几乎无法恢复。

由于mdadm无法预期或补偿突然增加的驱动器,因此很有可能需要再次创建RAID阵列。它将使用raid超级块中指定的大小,而不是驱动器本身。只要驱动器已经同步,就不会有太多问题。

请记住,如果要启动它,请使用超级块版本0.9。

编辑

这就是我要做的,未经测试

创建一个缺少潜水的RAID1,这样我们就可以快速测试数据是否保留,同时还有另一个驱动器包含该数据的副本,您的旧元数据为0.90,因此我们将在此处保留相同的版本。

mdadm --create /dev/md2 --level=mirror --metadata=0.90 --raid-devices=2 missing /dev/sdb3

安装它以测试一切正常

mkdir /mnt/test
mount /dev/md2 /mnt/test

检查你的数据

   ls -l /mnt/test

如果一切正常,请卸载驱动器并调整大小。

unmount /mnt/md2
resize2fs /dev/md2

一切正常之后,您可以将另一个驱动器添加到阵列中。

mdadm --add /dev/md2 /dev/sdb3

并等待驱动器重新同步

猫/ proc / mdstat


您有什么具体建议吗?即我要采取的步骤?
Paul Schreiber

看看我上面的编辑
Silverfire

/ dev / md2已经存在。为什么要重新创建它?并且:我必须启动应急光盘才能做到这一点?有什么方法可以调整此直播的大小吗?
Paul Schreiber,

可能不是实时的,但是您可以通过重新启动来完成此操作,如果您从阵列中删除了主引导驱动器,则可以在其上创建缺少驱动器的新阵列(将其命名为/ dev / md3或其他名称),然后系统将启动新的驱动器/突袭阵列,然后您可以添加旧的驱动器/突袭阵列
Silverfire

不过,最简单的方法就是从新阵列的备份中还原。
Silverfire

2

/ proc / partitions来看,很明显linux认为sda3sdb3比它们小。

分区大小的总和

8       17      96358 sdb1
8       18    3903795 sdb2
8       19  152248005 sdb3

而且您得到的数字远远小于磁盘的大小。

8       16  488386584 sdb

152248005个1024字节的块与大小一致,mdadm --grow并且resize2fs正在报告md2

您最初是否创建了较小的分区,然后又重新创建它们以利用其余磁盘?如果是这样,重新引导应允许内核重新读取分区表。在那之后,增加RAID设备并调整文件系统大小应该可以工作。


是的,那正是我所做的。
Paul Schreiber,

机器在重启时挂起。开始调查...
Paul Schreiber
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.