ปรับขนาดอาร์เรย์ RAID1 ด้วย mdadm ได้อย่างไร


12

ฉันใช้งาน Ubuntu 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

แสดงความคิดเห็นผ่านอีเมล:

ปัญหาอยู่ในเมตาดาต้าคุณเพียงแค่ต้องรวบรวมอาร์เรย์การโจมตีด้วยพารามิเตอร์ - ปรับปรุงอุปกรณ์ขนาด

และหลังจากนั้น -G / dev / md? -z max จะทำงานเสร็จแล้ว :)


อะไรคือผลลัพธ์ของcat /proc/mdstat? แล้วไงcat /proc/partitionsล่ะ
Steven Monday

เพิ่มเอาต์พุตด้านบน
Paul Schreiber

คุณไม่ได้กล่าวถึงวิธีการคัดลอกข้อมูลไปยังดิสก์ใหม่ อย่างไรก็ตามมันสามารถมีอิทธิพลต่อคำตอบอย่างมาก
poige

ฉันได้รับข้อมูลที่คัดลอกบนดิสก์ใหม่โดยแบ่งพาร์ติชันด้วย sfdisk โดยใช้ mdadm - เพิ่มและปล่อยให้การซิงค์ข้อมูลมากกว่า
Paul Schreiber

@Paul Schreiber sfdiskคุณพูด (?) …คุณหมายถึงโดยบอกว่าคุณคัดลอก schema การแบ่งดิสก์ด้วยหรือไม่
poige

คำตอบ:


9

เพียงแค่ใช้

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

จากนั้นคุณจะสามารถใช้

resize2fs /dev/md2

เพื่อให้ระบบไฟล์ตรงกับขนาดการโจมตี ทั้งหมดนี้ทำผ่านระบบออนไลน์โดยไม่ต้องถอด unmount md2


1
คำสั่งทั้งหมด:resize2fs -p /dev/md2
Milan Kerslager

@MilanKerslager กำลังทำอะไรอยู่ที่-pนั่น?
Jaime Hablutzel

1
@JaimeHablutzel -p เป็นแถบการเติมเปอร์เซ็นต์เพื่อให้คุณรู้ว่าเกิดอะไรขึ้นเนื่องจากอาจใช้เวลาสักครู่ (คำตอบเดิมได้รับการแก้ไขแล้ว)
Milan Kerslager

2

ฉันใช้ mdadm เป็นประจำและพิจารณาว่าเป็นหนึ่งในสาธารณูปโภคของ Linux ที่อันตรายที่สุด อย่างไรก็ตามหากคุณใช้มาตรการป้องกันความปลอดภัยที่ถูกต้องคุณสามารถหลีกเลี่ยงการสูญเสียข้อมูลส่วนใหญ่ที่อาจเกิดขึ้นสำรองข้อมูลทั้งหมดของคุณ !!! ฉันถูกกัดสองครั้งโดย mdadm ในอดีตที่ผ่านมาสูญเสียข้อมูลมากกว่า 700GB และน้อยมากที่มันสามารถกู้คืนได้คุณได้รับคำเตือนแล้ว

มีโอกาสดีมากที่คุณจะต้องสร้างอาร์เรย์ RAID อีกครั้งเนื่องจาก mdadm ไม่ได้คาดหวังหรือชดเชยสำหรับไดรฟ์ที่มีขนาดเพิ่มขึ้นอย่างกระทันหัน มันจะใช้ขนาดที่ระบุไว้ใน superblock การโจมตีและไม่ไดรฟ์ตัวเอง เมื่อมีการซิงค์ไดรฟ์แล้วคุณไม่ควรมีปัญหามากมาย

จำไว้ว่าถ้าคุณต้องการที่จะบูตมันใช้ 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 ไดรฟ์และปรับขนาด

unmount /mnt/md2
resize2fs /dev/md2

คุณสามารถเพิ่มไดรฟ์อื่นลงในอาร์เรย์ได้

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

และรอให้ไดรฟ์ซิงค์อีกครั้ง

cat / proc / mdstat


คุณมีคำแนะนำเฉพาะหรือไม่? นั่นคือขั้นตอนที่ฉันต้องทำอย่างไร
Paul Schreiber

ดูการแก้ไขของฉันด้านบน
Silverfire

/ dev / md2 มีอยู่แล้ว ทำไมฉันต้องการสร้างใหม่อีกครั้ง? และ: ฉันต้องบูตแผ่นดิสก์กู้ภัยเพื่อให้มันเกิดขึ้นหรือไม่ มีวิธีใดที่ฉันสามารถปรับขนาดรายการสดนี้
Paul Schreiber

ใช้งานได้จริงอาจไม่ใช่ แต่คุณสามารถทำการรีสตาร์ทได้หากคุณลบไดรฟ์สำหรับบู๊ตหลักออกจากอาเรย์คุณสามารถสร้างอาเรย์ใหม่ในนั้นได้ (ตั้งชื่อ / dev / md3 หรือบางสิ่ง) ด้วยไดรฟ์ที่ขาดหายไป ระบบจะบู๊ตไดรฟ์ / อาร์เรย์การโจมตีใหม่จากนั้นคุณสามารถเพิ่มอันเก่าได้
Silverfire

สิ่งที่อาจจะง่ายที่สุดคือการเรียกคืนจากการสำรองข้อมูลในอาเรย์ใหม่
Silverfire

2

จากการดูที่/ proc / พาร์ติชั่นมันชัดเจนว่า linux คิดว่าsda3และsdb3นั้นเล็กกว่าที่คิดไว้

รวมขนาดของพาร์ติชัน

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.