luk*_*kas 5 raid software-raid mdadm
我有一个功能强大的 Raid 5 阵列,我重新启动了盒子,然后 mdadm 无法重新组装其中的一部分。
看到它只是一部分,我认为重新同步很容易。但结果证明这是行不通的,因为显然现在设备不够大,无法加入阵列!?
可悲的是相当复杂。我有一个 Raid 5,它结合了两个 3 TB 磁盘和两个线性突袭(由 1tb+2tb 组成)。我没有对磁盘进行分区,即raid跨越物理磁盘。事后看来,这可能是导致最初失败的原因。
mdadm 将拒绝组装线性阵列之一,声称不存在超级块(使用 mdadm --examine 对两者进行检查均未返回任何内容)。更奇怪的是,显然他们身上还有一些可分区的遗骸。
在这一点上,我认为最快的解决方案是重新创建线性阵列,将其添加到更大的 raid5 阵列,然后重新同步。因此我选择只删除那些分区表条目,即:将它们分区到可用空间。然后我创建了一个跨越两个磁盘的线性阵列。
# mdadm --create /dev/md2 --level=linear --raid-devices=2 /dev/sda /dev/sdc
Run Code Online (Sandbox Code Playgroud)
但是,当尝试将它们添加回数组时,我得到
# mdadm --add /dev/md0 /dev/md2
mdadm: /dev/md2 not large enough to join array
Run Code Online (Sandbox Code Playgroud)
所以我正确地猜测磁盘缩小了?
我想是时候进行一些块计数了!
线性阵列的两个组成部分:
RO RA SSZ BSZ StartSec Size Device
rw 256 512 4096 0 1000204886016 /dev/sda
RO RA SSZ BSZ StartSec Size Device
rw 256 512 4096 0 2000398934016 /dev/sdc
Run Code Online (Sandbox Code Playgroud)
如果 mdadm 的线性模式没有开销,则两个大小的总和将大于 3tb 驱动器之一 (3000592982016)。但事实并非如此:
/proc/mdstat 报告线性数组的大小为 2930015024,比所需的少 120016
# mdadm --detail /dev/md0 | grep Dev\ Size
Used Dev Size : 2930135040 (2794.39 GiB 3000.46 GB)
Run Code Online (Sandbox Code Playgroud)
但这……太可疑了!在重新启动之前(尽管更早的化身)这个线性阵列是更大阵列的一部分!
重新启动后,mdadm 识别出阵列的一部分丢失。由于它是最小的成员,因此阵列设备大小会自动增长以填充下一个最小的设备。
但这听起来不像呃,明智的行为,是吗?
另一种选择是,出于某种原因,我不再创建最大尺寸的线性突袭,但是……这也有点荒谬。
收缩退化的数组以排除“损坏的”线性数组,然后再次尝试 --add 和 --grow。但恐怕实际上并不会改变设备大小。
由于我不明白到底出了什么问题,我宁愿先了解是什么导致了这个问题,然后再草率地做任何事情。
所以呃...我想...好吧...磁盘...缩小了?
默认情况下,元数据的区域mdadm
保留可能会增长...我最近遇到过一些案例,mdadm
无缘无故地浪费了高达 128MiB 的空间。您想要检查mdadm --examine /dev/device*
该data offset
条目。理想情况下,扇区数不应超过 2048 个。
如果这确实是问题所在,您可以mdadm --create
与该--data-offset=
参数一起使用,以减少mdadm
元数据浪费的空间。
如果这还不够,您必须尝试使用旧元0.90
数据(这可能是最节省空间的,因为它不使用此类偏移量),或者稍微缩小 RAID 的另一侧(记住缩小首先是 LV/文件系统)。
归档时间: |
|
查看次数: |
1276 次 |
最近记录: |