在他对“混合突袭类型”问题的回答中,HBruijn 建议使用 LVM 来实现 RAID,而不是更标准的 MDRAID。
经过一番调查,LVM 似乎也支持 RAID 功能。过去,我在 MDRAID 之上使用 LVM,直到现在才知道 LVM 也支持 RAID 功能。这似乎是一个相对较新的发展,但我还没有确切地知道这是什么时候实施的。
因此,这些是在 Linux 上实现软件 RAID 的替代方法。这两种不同方法的优缺点是什么?我正在寻找两种方法之间的功能比较,以便人们可以决定哪种方法更适合他们。如果您在答案中包含您的数据,则基于实验的结论(例如,此功能不如此功能好用,这就是原因)也可以。
要解决的一些具体问题:
笔记:
在http://www.olearycomputers.com/ll/linux_mirrors.html 上有详细的讨论, 但我不知道它的写作日期。
Serverfault 上的类似问题:linux LVM mirror vs. MD mirror。不过这个问题是2010年问的,答案可能已经过时了。
2.02.87 版的变更日志条目 - 2011 年 8 月 12 …
我开始在家里收集计算机并支持它们,我有我的“服务器”linux 机器运行 RAID 阵列。
目前mdadm RAID-1,RAID-5一旦我有更多的驱动器(然后RAID-6我希望)。但是,我听说过有关数据在一个驱动器上损坏的各种故事,并且您从未注意到由于使用了另一个驱动器,直到第一个驱动器出现故障,并且您发现第二个驱动器也被拧紧(以及第 3、第 4 个驱动器) ,第 5 个驱动器)。
显然备份很重要,我也在处理这个问题,但是我知道我以前看过声称可以帮助解决这个问题并允许您在运行时检查 RAID 的脚本。但是,现在再次查找这些脚本时,我发现很难找到与我之前运行的内容相似的任何内容,而且我觉得我已经过时并且不了解发生了什么变化。
您将如何检查正在运行的 RAID 以确保所有磁盘仍在正常执行?
我监控所有驱动器上的 SMART,并mdadm设置在出现故障时给我发送电子邮件,但我想知道我的驱动器偶尔也会“检查”自己。
我有两台具有不同 RAID5 阵列的不同计算机。当我运行命令时
mdadm --detail /dev/md0
Run Code Online (Sandbox Code Playgroud)
一个驱动器报告“活动”,而另一个报告“状态”字段的“干净”。有什么不同?我应该担心这两种状态吗?两者似乎都工作正常。
我有一个要为其创建镜像的磁盘;我们称之为磁盘sda。我刚买了另一个同样大小的磁盘,我们可以称之为sdb. sda并且sdb有一个称为一个分区sda1并sdb1分别。
创建突袭时,我不想sda清理干净并重新开始,我只是希望它以sdb. 我的思路是这样做:
mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=1 /dev/sda1
Run Code Online (Sandbox Code Playgroud)
...创建没有sdb磁盘的阵列,然后运行类似的东西(我正在大声思考以下命令,因为我不确定如何实现这一步)
mdadm /dev/md0 --add /dev/sdb1
Run Code Online (Sandbox Code Playgroud)
sdb1假设Note 的格式类似于sda1
这可能吗?
我使用以下命令创建了一个新的 md 数组:
mdadm --create /dev/md1 -l 1 -n 2 /dev/sd[ed]1
Run Code Online (Sandbox Code Playgroud)
但是现在/proc/mdstat将数组显示为“自动只读”,resync=PENDING:
~ # cat /proc/mdstat
Personalities : [raid1]
md1 : active (auto-read-only) raid1 sde1[1] sdd1[0]
976630336 blocks super 1.2 [2/2] [UU]
resync=PENDING
md0 : active raid1 sdb1[0] sdc1[1]
1953511936 blocks [2/2] [UU]
unused devices: <none>
Run Code Online (Sandbox Code Playgroud)
根据这个网站,我可以用以下方法解决这个问题:
mdadm --readwrite /dev/md1
Run Code Online (Sandbox Code Playgroud)
这确实有效:
~ # mdadm --readwrite /dev/md1
~ # cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sde1[1] sdd1[0]
976630336 blocks super 1.2 [2/2] [UU]
[>....................] …Run Code Online (Sandbox Code Playgroud) 我即将在我的家用 linux 机器 nas 中重新组织我的所有 HDD,并希望使用 mdadm raid 进行数据保护及其重新调整阵列的灵活性。但是,在为此使用 mdadm 之前,我想知道它是如何处理bit rot 的。特别是不会导致从 HDD 发送的不可恢复的读取错误消息的位腐烂类型。
由于我很可能会使用硬盘驱动器的至少21TB在NAS 8个磁盘,并在各种行情概率的故障HDD上,我在想,期间从单个磁盘故障重建我非常有可能遭遇剩余磁盘上的某种形式的位腐烂。如果其中一个驱动器出现不可恢复的读取错误,驱动器实际上将其报告为错误,我相信raid6 应该没问题(是吗?)。但是,如果从磁盘读取的数据是错误的但磁盘没有报告,那么即使使用raid6,我也看不到如何自动更正。这是我们需要关心的事情吗?鉴于文章It is 2010 and RAID5 仍然有效,以及我自己在家庭和工作中的成功经验,事情并不一定像流行语和营销让我们相信的那样悲观和悲观,但我讨厌仅仅因为硬盘故障而不得不从备份中恢复。
鉴于使用模式将是,最多写入几次,偶尔读取,我需要执行数据清理。我在archlinux wiki上看到 用于数据清理数组的 mdadm 命令为
echo check > /sys/block/md0/md/sync_action
Run Code Online (Sandbox Code Playgroud)
然后监控进度
cat /proc/mdstat
Run Code Online (Sandbox Code Playgroud)
在我看来,它会读取所有磁盘的所有扇区并检查数据是否与奇偶校验匹配,反之亦然。尽管我注意到文档中非常强调在某些重要情况下“检查”操作将无法自动更正,只能检测,并且将由用户来修复。
我应该选择什么 mdadm RAID 级别来最大限度地防止位腐烂,我应该做哪些维护和其他保护步骤?这不能保护我免受什么伤害?
编辑:我不打算开始 RAID vs ZFS 或任何其他技术 QA。我想特别了解 mdadm raid。这也是为什么我在 Unix & Linux 而不是SuperUser上询问的原因。
编辑:答案是: mdadm 只能更正数据清理期间磁盘系统报告的 URE,并在清理期间检测静默位腐烂但不能/不会修复它?
我在 RAID 1 中有一个带有 3 个 SSD 驱动器的专用服务器。输出cat /proc/mdstat:
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md4 : active raid1 sdc4[2] sdb4[1] sda4[0]
106738624 blocks [3/3] [UUU]
bitmap: 0/1 pages [0KB], 65536KB chunk
md2 : active raid1 sdc2[2] sda2[0] sdb2[1]
5497792 blocks [3/3] [UUU]
md1 : active raid1 sda1[0] sdc1[2] sdb1[1]
259008 blocks [3/3] [UUU]
unused devices: <none>
Run Code Online (Sandbox Code Playgroud)
¿如何在不丢失任何数据的情况下安全地从软突袭中删除驱动器?我想从阵列中删除一个驱动器,以便重新格式化它并独立使用它,同时保持最重要的数据镜像。
我有一个可怕的情况,我必须在救援 Debian Linux 中从损坏的突袭系统中恢复数据。我只想以只读方式将它们全部挂载到 /mnt/rescue 以便能够将 VMWare GSX 映像复制到另一台机器并稍后将它们迁移到 ESXi。相关命令的输出如下。
fdisk -l
Disk /dev/sda: 1500.3 GB, 1500301910016 bytes
255 heads, 63 sectors/track, 182401 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: 0x0005e687
Device Boot Start End Blocks Id System
/dev/sda1 1 523 4200997 fd Linux raid autodetect
/dev/sda2 524 785 2104515 fd Linux raid autodetect
/dev/sda3 786 182401 1458830520 …Run Code Online (Sandbox Code Playgroud) 我想检查我的服务器是否配置了软硬 RAID。
我在我的服务器(Suse Enterprise Edition 11)上尝试了一些命令:
**ms:~ # cat /proc/mdstat
Personalities :
unused devices: <none>
ms:~ #**
Run Code Online (Sandbox Code Playgroud)
我试图执行,raiddev /dev/md0但没有可用的 raiddev 命令。
有没有其他命令可以让我检查服务器的raid级别?
我正在尝试为(不断增加)数量的相同服务器编写 RAID 设置脚本。我所看到的使用 mdadm 的建议表明,一旦创建了 RAID 阵列,您就可以运行,mdadm --examine --scan >> /etc/mdadm.conf以便在启动时初始化阵列。但这似乎对我不起作用 - 特别是数组显示为/dev/md/<hostname>:pool,其中mdadm --examine输出/dev/md/pool.
难道我做错了什么?我的 mdadm 版本有什么奇怪的吗?
[root@positron /]# mdadm --create /dev/md0 --level=0 --name=pool --raid-devices=6 /dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf
[root@positron /]# mdadm --examine --scan
ARRAY /dev/md/pool metadata=1.2 UUID=567da122:fb8e445e:55b853e0:81bd0a3e name=positron:pool
[root@positron /]# ls /dev/md/*
/dev/md/md-device-map /dev/md/positron:pool
[root@positron /]# cat /dev/md/md-device-map
md127 1.2 22a17d56:5e448efb:e053b855:3e0abd81 /dev/md/positron:pool
[root@positron /]# mdadm --version
mdadm - v3.1.3 - 6th August 2010
Run Code Online (Sandbox Code Playgroud)