这是对我的疯狂mdadm问题的跟进。我试图找出可能导致sda不同步的原因。我唯一能想到的是我刚刚运行了一堆更新并且正在重新启动以重新加载内核升级。两个驱动器是否可能没有同步?如果正在进行 mdadm 同步,系统会阻止重新启动吗?可以做到吗?关于可能发生什么的任何其他建议?以及如何进一步预防。驱动器似乎没有问题。
我想将 SSD 上现有的根(也是唯一)分区镜像到另一个磁盘。它应该是一种 RAID-1,只是不对称*。我知道有选项mdadm --write-behind,应该这样做。
但我不知道是否可以保留现有分区的上下文。我想像
但我可能太乐观了,不是吗?
* 所有读取都应该访问第一个磁盘,并且在写入第一个磁盘时应该认为写入完成。
我最近从硬件 RAID1 机箱转移到使用两个带有 md 的 eSATA 驱动器。一切似乎都运行良好,除了目录遍历/列表有时会爬行(大约 10 秒)。我使用的是 ext3 文件系统,块大小设置为 4K。
以下是一些应该很重要的命令的相关输出:
mdadm --详细信息:
/dev/md127:
Version : 1.2
Creation Time : Sat Nov 16 09:46:52 2013
Raid Level : raid1
Array Size : 976630336 (931.39 GiB 1000.07 GB)
Used Dev Size : 976630336 (931.39 GiB 1000.07 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Tue Nov 19 01:07:59 2013
State : clean
Active Devices : 2
Working Devices : 2 …Run Code Online (Sandbox Code Playgroud) 由于 IO 性能不佳,我正在尝试确定是否应该重新设置我的 RAID 阵列。先说系统:
其次,磁盘设置:
我选择这种结构来允许 kcryptd 的多个实例,认为通过这样做,我将获得加密的多线程支持,因为每个驱动器运行一个实例。然而,我开始怀疑这是否是个好主意。
例如,如果我对随机数据的 RAR 文件运行大量解压缩例程,我的 IO 等待会上升到 25% 左右,这会降低整个系统的速度。我想知道是否所有指令集都因所有 kcryptd 进程而以某种方式得到备份。
因此,我正在考虑更改为:
这将下降到单个 kcrpytd 进程,这本身也可能成为瓶颈。有人认为这对我的 IO 问题有帮助吗?
LVM 和 mdadm / dmraid 都在 Linux 上提供软件 RAID 功能。这几乎是2014 年对这个问题的后续帖子。当时,@derobert建议更喜欢 mdadm 而不是 LVM raid,因为它的成熟度 - 但那是 4 年前的事了。我可以想象,从那以后事情发生了变化。但是我以前从未使用过 LVM raid,而且我也找不到任何最近的经验。
那么 LVM 突袭的状态如何?现在是不是越来越成熟了?@derobert 的帖子中提到的缺陷现在已经解决,还是仍然存在?关于什么
LVM 突袭与 mdadm 相比?
我想知道人们是否真的使用它,或者每个人是否仍然坚持使用 mdadm。是否更推荐在 mdadm 之上使用 LVM 进行逻辑卷管理,还是让 LVM 也管理突袭?即使您不期望需要逻辑卷管理的优势,使用 LVM raid 而不是 mdadm 是否甚至可观?
我考虑过在原始答案下添加评论,要求@derobert更新他的帖子,但决定提出一个新问题。我想接触其他成员,获得新的和新鲜的体验,而不仅仅是将旧帖子变成现在时。
我们正在将安装从带有 LVM 的 mdadm raid 迁移到纯 LVM,因此我们会将原始 raid 分区作为独立分区添加到 LVM 组\n类似:
\nlvcreate -L 240G -n thin pve /dev/nvme0n1p2\n Logical volume "thin" created.\nRun Code Online (Sandbox Code Playgroud)\n然后我们在另一个磁盘/分区上添加一个镜像
\nlvconvert \xe2\x80\x93type raid1 \xe2\x80\x93mirrors 1 pve/thing /dev/nvme1n1p2\n Logical volume pve/thin successfully converted.\nRun Code Online (Sandbox Code Playgroud)\n当我们为 LXC 使用精简池存储系统时,我们假设我们可以将其转换为精简池\nlvconvert --type Thin-pool pve/thin\n将 pve/thin 转换为精简池。
\n一切似乎都有效,但问题是我们不确定最后一次转换是否会影响前一次转换。原因是当我们用 lvs 列出时我们得到:
\n thin pve twi-a-tz-- 240,00g 0,00 10,42\nRun Code Online (Sandbox Code Playgroud)\n属性 1 a 7 显示这是一个 Thinpool,但没有提及 raid1 或同步中的值。
\n虽然 lvs -a -o +devices 确实显示它被镜像到两个分区上:
\n[thin_tdata] pve rwi-aor--- 240,00g 24,17 …Run Code Online (Sandbox Code Playgroud) 我想在 linux 中用两个驱动器设置 RAID 1。我没有硬件 RAID 控制器,也不想购买,那么适用于 linux 的最佳软件 RAID 选项是什么?
注意:如果它有所不同,我正在运行 Gentoo。
我目前在 RAID-1 mdadm 阵列上有 1 TB 的数据。该阵列由一个 1 TB 磁盘和一个 2 TB 磁盘上的 1 TB 分区组成。我现在购买了第二个 1 TB 磁盘,我想用它来创建一个 2 TB RAID-1 阵列。
该阵列上的数据将使用 dm-crypt 加密,因此我想/dev/urandom在将数据放入每个磁盘之前用数据覆盖每个磁盘。
问题是我是否可以创建这个 2 TB RAID-1 阵列,并用随机数据安全地覆盖每个磁盘,同时保留我在当前 1 TB RAID-1 阵列上的 1 TB 数据。
总结一下:我有 2 x 1 TB 磁盘和 1 x 2 TB 磁盘。我想创建一个 2 TB RAID-1 阵列,其中镜像的一侧由两个汇集在一起的 1 TB 磁盘组成,镜像的另一侧是整个 2 TB 磁盘。此外,我想仅使用这些磁盘保留 1 TB 的数据,同时仍然能够用随机数据覆盖每个磁盘。
我有一个功能强大的 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) 有2种情况:
由于驱动器访问通常通过 Linux SCSI 层,我认为超时情况完全由该层处理。根据此文档,它会在重置驱动器、总线、主机等后多次尝试该命令。如果这些都不起作用,SCSI 层将使设备脱机。在这一点上,我认为 md 层只是“发现”一个驱动器不见了,并将其标记为丢失(失败)。这样对吗?
某些驱动器可以配置为在达到特定超时后报告读取错误,从而中止内部恢复尝试。这称为ERC(或 TLER、CCTL)。磁盘超时通常配置为在操作系统超时(或硬件 RAID 控制器)之前触发,以便后者知道真正发生了什么,而不仅仅是“等待和中止”。
我的问题是:Linux(和 md)如何处理驱动器报告的读取错误?
它会再试一次,做一些聪明的事情,还是只是让驱动器脱机而不通过上面“内核超时”中描述的所有尝试?当这种事情发生时,md 甚至知道吗?
有些人认为ERC 在 Linux 上很危险,因为它不会给驱动器足够的时间来尝试恢复。他们还说 ZFS-raid 很好,因为如果发生读取错误,由于 RAID 冗余,它会计算丢失的不可读扇区数据,并将其覆盖回驱动器。然后后者应该停止尝试读取讨厌的扇区,自动将其标记为坏的(不再使用),并将其重新映射到一个良好的扇区。
md 也能做到这一点吗?