重建 Raid 阵列

重建 Raid 阵列

我如何重建 RAID 阵列?我使用的是 RAID 1。我的数据中心说需要修复,一开始我以为是硬盘有问题,因为 smartmoontools 的扫描结果显示是硬盘有问题,但事实并非如此。

命令:

猫/proc/mdstat

输出:

Personalities : [raid1] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdb1[1] sda1[0]
      2096064 blocks [2/2] [UU]

md1 : active raid1 sda2[0]
      524224 blocks [2/1] [U_]

md2 : active raid1 sda3[0]
      729952192 blocks [2/1] [U_]

unused devices: <none>

我是否需要:

# mdadm /dev/md1 -r /dev/sdb2
# mdadm /dev/md2 -r /dev/sdb3
# mdadm /dev/md3 -r /dev/sdb4

进而

# mdadm /dev/md1 -a /dev/sdb2
# mdadm /dev/md2 -a /dev/sdb3
# mdadm /dev/md3 -a /dev/sdb4 

我会丢失数据或者我的服务器会离线吗?

以下是 fdisk -l 的输出

Disk /dev/sda: 750.1 GB, 750156374016 bytes
64 heads, 32 sectors/track, 715404 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               2        2048     2096128   fd  Linux raid autodetect
/dev/sda2            2049        2560      524288   fd  Linux raid autodetect
/dev/sda3            2561      715404   729952256   fd  Linux raid autodetect

Disk /dev/sdb: 750.1 GB, 750156374016 bytes
64 heads, 32 sectors/track, 715404 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               2        2048     2096128   fd  Linux raid autodetect
/dev/sdb2            2049        2560      524288   fd  Linux raid autodetect
/dev/sdb3            2561      715404   729952256   fd  Linux raid autodetect

Disk /dev/md2: 747.4 GB, 747471044608 bytes
2 heads, 4 sectors/track, 182488048 cylinders
Units = cylinders of 8 * 512 = 4096 bytes

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

Disk /dev/md1: 536 MB, 536805376 bytes
2 heads, 4 sectors/track, 131056 cylinders
Units = cylinders of 8 * 512 = 4096 bytes

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

Disk /dev/md0: 2146 MB, 2146369536 bytes
2 heads, 4 sectors/track, 524016 cylinders
Units = cylinders of 8 * 512 = 4096 bytes

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

以下是 smartctl -A /dev/sdb 的输出

=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 10
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000f   111   100   006    Pre-fail  Always       -       38042073
  3 Spin_Up_Time            0x0003   100   100   000    Pre-fail  Always       -       0
  4 Start_Stop_Count        0x0032   100   100   020    Old_age   Always       -       7
  5 Reallocated_Sector_Ct   0x0033   100   100   036    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x000f   073   060   030    Pre-fail  Always       -       24494887
  9 Power_On_Hours          0x0032   091   091   000    Old_age   Always       -       7935
 10 Spin_Retry_Count        0x0013   100   100   097    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   020    Old_age   Always       -       7
183 Runtime_Bad_Block       0x0032   100   100   000    Old_age   Always       -       0
184 End-to-End_Error        0x0032   100   100   099    Old_age   Always       -       0
187 Reported_Uncorrect      0x0032   100   100   000    Old_age   Always       -       0
188 Command_Timeout         0x0032   100   099   000    Old_age   Always       -       4
189 High_Fly_Writes         0x003a   100   100   000    Old_age   Always       -       0
190 Airflow_Temperature_Cel 0x0022   062   052   045    Old_age   Always       -       38 (Min/Max 34/41)
194 Temperature_Celsius     0x0022   038   048   000    Old_age   Always       -       38 (0 26 0 0 0)
195 Hardware_ECC_Recovered  0x001a   032   026   000    Old_age   Always       -       38042073
197 Current_Pending_Sector  0x0012   100   100   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0010   100   100   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x003e   200   200   000    Old_age   Always       -       0
240 Head_Flying_Hours       0x0000   100   253   000    Old_age   Offline      -       101494372179726
241 Total_LBAs_Written      0x0000   100   253   000    Old_age   Offline      -       3317006641
242 Total_LBAs_Read         0x0000   100   253   000    Old_age   Offline      -       2924590852

答案1

那个驱动器 sdb 看起来离故障不远了。虽然它还没有正式失败了,它已经没有多少生命力了。

195 Hardware_ECC_Recovered  0x001a   032   026   000    Old_age   Always       -       38042073

这次活动有大量可恢复读取错误。这意味着它成功地使用错误校正重建了数据。然而,它已经到了很可能很快就会出现不可恢复读取错误,无法成功重建磁盘损坏或故障部分的数据。此时您无能为力,只能更换驱动器。

如果您的重建过程一直在同一位置停止,则很有可能驱动器已经在盘片上的该位置发生故障,但未报告该情况。如果桌面级驱动器第一次发生故障,它们将停止并尝试几分钟甚至几小时来读取特定扇区,从而导致此类情况。而您的这个“服务器”中可能就有这样的驱动器……

此时您应该主动更换该驱动器,因为它很快就会出现故障(如果还没有的话)。

答案2

看起来只有一半的镜子丢失了。所以应该没有问题。但问题是为什么子镜像 (sdbX) 丢失了?在重新安装镜子之前检查一下它们可能是个好主意。

mdadm --manage /dev/md1 --add /dev/sdb2
mdadm --manage /dev/md2 --add /dev/sdb3
mdadm --manage /dev/md3 --add /dev/sdb4

答案3

当您使用 RAID1 镜像两个卷时,每个副本都有一个“活动计数器”,当副本内部发生变化时,该计数器会更新:这样,系统能够在发生崩溃或其他事件导致其中一个卷崩溃的情况下了解哪一个卷是最新的。

重新同步意味着最新的副本将覆盖“失去同步”的旧副本。因此,离线硬盘或有缺陷的硬盘将强制阵列进入“降级模式”(只有一个副本在线,无冗余)。

您可以从降级模式中恢复,强制重新同步,以便将唯一的活动分区克隆到您已重新开始工作的分区,或者更换有缺陷的磁盘并为阵列提供新的空间,该阵列将以与之前描述的相同的方式进行克隆。

这两种方法都可以保持你的数据完好无损,除非你对配置或仍然存在的“好”分区做了不当的事情=)

我认为在你想摆弄它们之前最好先备份你的 raid 配置=)

至于 SMART 值,除了在其他回复中讨论的 Hardware_ECC_Recovered 之外,它们对我来说似乎还不错。

无论如何,避免考虑您在那里看到的单个值,还要检查它变化的速度。我曾经在驱动器上看到过奇怪的值,但它们并没有变得更糟,它们很稳定。另一方面,良好的 SMART 值并不能证明磁盘是完美的:在我看来,它们可以很好地检查由于使用/老化而导致的磁盘磨损,但它们几乎无法防止突然故障(例如由机械应力、过热等引起的故障 - 想想服务器机房中发生故障的冷却器......)

祝你好運!=)

相关内容