mdadm으로 RAID1 어레이의 크기를 조정하는 방법은 무엇입니까?


12

우분투 11.04 (커널 2.6.38-11)를 실행했습니다. 2x160GB를 2x500GB 드라이브로 교체했습니다. 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?
Steven 월요일

위의 출력을 추가했습니다.
Paul Schreiber

데이터를 새 디스크에 복사 한 방법에 대해서는 언급하지 않았습니다. 그러나 대답에 큰 영향을 줄 수 있습니다.
poige

mdadm --add를 사용하여 sfdisk로 파티션을 나누고 데이터를 동기화하여 새 디스크에 데이터를 복사했습니다.
Paul Schreiber

@Paul Schreiber, sfdisk당신은 말합니다 (?)… 디스크 파티션 스키마도 복사했다는 말입니까?
poige

답변:


9

그냥 사용

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

그럼 당신은 사용할 수 있습니다

resize2fs /dev/md2

파일 시스템이 공격대 크기와 일치하도록합니다. 이 모든 것은 md2를 마운트 해제하지 않고도 온라인으로 수행됩니다.


1
완전한 명령 :resize2fs -p /dev/md2
Milan Kerslager

@MilanKerslager, -p거기서 뭐하는거야 ?.
Jaime Hablutzel

1
@JaimeHablutzel -p는 백분율 완료 막대이므로 시간이 걸릴 수 있으므로 진행 상황을 알 수 있습니다 (원래 답변이 이미 수정되었습니다).
Milan Kerslager '

2

나는 정기적으로 mdadm을 사용하고 가장 위험한 Linux 유틸리티 중 하나라고 생각합니다. 그러나 올바른 안전 예방 조치를 취하면 대부분의 잠재적 인 데이터 손실을 피할 수 있습니다. 모든 데이터를 백업하십시오 !!! 나는 과거에 mdadm에 의해 두 번 물 렸고 700GB가 넘는 데이터를 잃어 버렸으며 그중 거의 거의 복구 할 수 없었습니다. 경고를 받았습니다.

mdadm이 갑자기 크기가 커지는 드라이브를 예상하거나 보상하지 않으므로 RAID 배열을 다시 작성해야 할 가능성이 매우 높습니다. 드라이브 자체가 아니라 RAID 블록에 명시된 크기를 사용합니다. 드라이브가 이미 동기화되어 있으면 많은 문제가 발생하지 않습니다.

부팅하려면 superblock 버전 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 디렉토리 / 파티션 , 그것은 리눅스 생각하는 것이 명백 sda3을 하고 sdb3이가 그들보다 작다.

파티션 크기 합

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

디스크 크기보다 훨씬 낮은 숫자를 얻게됩니다.

8       16  488386584 sdb

1024 바이트의 152248005 블록은 크기 mdadm --grow와 일치하며 md2를resize2fs 보고합니다 .

처음에 이러한 파티션을 더 작은 크기로 만든 다음 나중에 나머지 디스크를 활용하도록 다시 만드셨습니까? 그렇다면 재부팅하면 커널이 파티션 테이블을 다시 읽을 수 있습니다. 그 후에는 RAID 장치를 확장하고 파일 시스템 크기를 조정해야합니다.


예, 정확히 내가 한 일입니다.
Paul Schreiber

재부팅시 시스템이 정지되었습니다. 조사를 위해 ...
Paul Schreiber
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.