话说双盘RAID-1的读取应该可以做到两倍速吧?
2131 75
[47 楼] tianman [泡菜]
22-8-18 09:58
yejun 发表于 2022-8-18 09:48
问题是raid1,5在数据不匹配的时候不能够知道哪个是对的,除非磁盘硬件本身报读错误。

在磁盘状态都正常时,读取数据并不做校验。
一旦有磁盘出现故障或故障症候(包括读写困难等情况)就直接进行降级处理。 本帖最后由 tianman 于 2022-8-18 10:10 编辑
[46 楼] yejun [老坛泡菜]
22-8-18 09:48
nahcooo 发表于 2022-08-18 05:27
看怎么理解了,如果这么理解
第一个盘上保存着1234567890,其中13579是有效数据,24680是第二个盘的校验数据。
第二个盘上保存着1234567890,其中24680是有效数据,13579是第一个盘的校验数据。
这样RAID-1就有校验了
问题是raid1,5在数据不匹配的时候不能够知道哪个是对的,除非磁盘硬件本身报读错误。
[45 楼] StillImage [老坛泡菜]
22-8-18 08:24
原版咕咚 发表于 2022-8-18 00:27
普通 raid 在读的时候都不校验。raid 0 和 1 都不涉及计算 parity ,raid 3 4 5 6 dp 50 60  这些在写的时候要计算 parity , 但也不会做什么校验,不可能写完再读一遍验算 parity

普通 raid 保障数据完整性的唯一方式是 scrub , 只有高端控制器才有。


scrub 在database 应用中还可以用 , HPC中就是摆设。

ZFS 主要是软RAID, 现在CPU, MCU 核多, 做下自带读校验确实没有压力。  
[44 楼] StillImage [老坛泡菜]
22-8-18 08:14
nahcooo 发表于 2022-8-18 05:27
看怎么理解了,如果这么理解
第一个盘上保存着1234567890,其中13579是有效数据,24680是第二个盘的校验数据。
第二个盘上保存着1234567890,其中24680是有效数据,13579是第一个盘的校验数据。

这样RAID-1就有校验了


这种设计不是为了提升性能,纯为了数据的安全性。  最老的IBM 主机系统就是这样的, 但RAID设计的主要目的是性能, 你说的这种性能和容量全部下降不止一倍。
[43 楼] tianman [泡菜]
22-8-18 05:51
PowerPCG5 发表于 2022-8-17 22:47
这位大姐,大热天的您在这里自己发明新名词很有意思吗?还“主系统” “请求关于文件相关信息”,唉……

咱回炉去找本本科教材复习复习如何?

要不,您去跟花花学学中医?

阵列系统属于外设,读取它的自然可以称为主系统
我用过IBM System Storage DS6800,它的资料中就是这样称呼的。它自己的控制器就是一台使用OS400的系统。

按照你们家的教材,上面有RAID1的数据上升到扇区级别的说法? 本帖最后由 tianman 于 2022-8-18 06:12 编辑
[42 楼] nahcooo [资深泡菜]
22-8-18 05:27
StillImage 发表于 2022-08-17 23:40
插一句: RAID-1 没有校验吧?  
记得RAID 1 写是RAID 卡把同一份数据写进两个设备,每个设备一份。 读时看RAID卡的设计算法, 可以把要读的数据分成两部分,每个设备读一份,如此可以做到所谓的两倍速。
而RAID 5, 6 是写时...

看怎么理解了,如果这么理解
第一个盘上保存着1234567890,其中13579是有效数据,24680是第二个盘的校验数据。
第二个盘上保存着1234567890,其中24680是有效数据,13579是第一个盘的校验数据。

这样RAID-1就有校验了
[41 楼] yejun [老坛泡菜]
22-8-18 00:36
原版咕咚 发表于 2022-8-18 00:27
普通 raid 在读的时候都不校验。raid 0 和 1 都不涉及计算 parity ,raid 3 4 5 6 dp 50 60  这些在写的时候要计算 parity , 但也不会做什么校验,不可能写完再读一遍验算 parity

普通 raid 保障数据完整性的唯一方式是 scrub , 只有高端控制器才有。


mdadm的软raid也有一个checkarray命令可以定时自检,有些系统安装的时候会设置定时。不过raid 1,5在校验位不匹配的时候也没办法知道是哪个盘出错了,除非磁盘本身报错。zfs,btrfs有额外校验,数据不匹配的时候应该能知道哪个数据是对的。 本帖最后由 yejun 于 2022-8-18 00:43 编辑
[40 楼] 原版咕咚 [资深泡菜]
22-8-18 00:27
StillImage 发表于 2022-08-17 23:40
插一句: RAID-1 没有校验吧?  
记得RAID 1 写是RAID 卡把同一份数据写进两个设备,每个设备一份。 读时看RAID卡的设计算法, 可以把要读的数据分成两部分,每个设备读一份,如此可以做到所谓的两倍速。
而RAID 5, 6 是写时...

普通 raid 在读的时候都不校验。raid 0 和 1 都不涉及计算 parity ,raid 3 4 5 6 dp 50 60  这些在写的时候要计算 parity , 但也不会做什么校验,不可能写完再读一遍验算 parity

普通 raid 保障数据完整性的唯一方式是 scrub , 只有高端控制器才有。
[39 楼] 原版咕咚 [资深泡菜]
22-8-18 00:20
PowerPCG5 发表于 2022-08-17 22:51
RAID1、5、6等等都有一个校验的过程,必须把参与校验的所有设备上的块都读出来,2块盘的RAID1要两个都读,四块盘的要读四个,RAID10的要读2个,这都是性能惩罚。
相比之下,四块盘的RAID5要读四个,但是3个都是有效数据块,惩罚还算能接受。

raid 1 5 6 10 50 60 这些,读的时候都不校验,盘掉了恢复数据的时候才用校验数据做计算。

高级的 raid 控制器有 scrub (巡检)功能,在设置好的空闲时刻扫描全阵列,用 parity 去核对数据,家用的 raid 卡是肯定没这功能的。

zfs 的各种 raid 级都自带读校验,在读的时候核对数据是否完整,有问题自动修复,这是 zfs raid 的鲜明特色 ---- 自愈性,普通raid是不具备的。
[38 楼] StillImage [老坛泡菜]
22-8-17 23:57
nahcooo 发表于 2022-8-17 17:25
如果说RAID-1特殊,不存在条带。那么RAID-10总存在条带了吧?

四盘RAID-0的场合,第一条在1号盘,第二条在2号盘,第三条在3号盘,第四条在4号盘。然后一起读取。

四盘RAID-10的场合,是否可以从1号盘读取第一条,从2号盘读取第三条,从3号盘读取第二条,从4号盘读取第四条,从而达到和四盘RAID-0一样的速度呢?

--------------------------------------

用这个图的话,就是从disk0读取A1,从disk1读取A3,从disk2读取A2,从disk3读取A4。从而达到和raid-0一样的速度。


理论上是这样。 但实际工作中读写是同时发生的, 所以要看RAID卡固件和硬盘固件的配合是否达到这种理想的性能。

我自己的经验RAID卡的性能主要靠卡上的Cache,  最近一部HPE Apollo 2000 配4个节点, 每个节点用6只3.84 TB SAS SSD 做RAID 5,结果因为RAID 卡Cache 最大只有4GB, 结果写的性能非常差。
[37 楼] StillImage [老坛泡菜]
22-8-17 23:40
插一句: RAID-1 没有校验吧?  

记得RAID 1 写是RAID 卡把同一份数据写进两个设备,每个设备一份。 读时看RAID卡的设计算法, 可以把要读的数据分成两部分,每个设备读一份,如此可以做到所谓的两倍速。

而RAID 5, 6 是写时要算校正码,把校正码数据写进容错的区。 读时应该不会再读校正码来确认数据没有错。 要明确的是: RAID 系统不是用来检查数据读写中是否正确, 只是保证有设备坏的时候的数据可恢复性。 RAID 系统不会检查哪个设备出现硬件故障,硬件故障和读写数据的准确性都是直接由磁盘设备和I/O接口电路来检查判断的。    本帖最后由 StillImage 于 2022-8-17 23:41 编辑
[36 楼] PowerPCG5 [禁言中]
22-8-17 22:51
nahcooo 发表于 2022-8-17 17:25
如果说RAID-1特殊,不存在条带。那么RAID-10总存在条带了吧?


RAID1、5、6等等都有一个校验的过程,必须把参与校验的所有设备上的块都读出来,2块盘的RAID1要两个都读,四块盘的要读四个,RAID10的要读2个,这都是性能惩罚。

相比之下,四块盘的RAID5要读四个,但是3个都是有效数据块,惩罚还算能接受。
[35 楼] PowerPCG5 [禁言中]
22-8-17 22:47
tianman 发表于 2022-8-17 20:45
我觉得,我们所说的并不矛盾。只是观察角度不同罢了

我前面说的“文件”,既包括实际格式的文件,也包括一个数据流形成的数据块。
在我看来,裸盘确实不“知道”什么是文件(数据集),因为裸盘中没有关于文件(数据流)的信息。这就是一个纯数据的容器。
文件(数据集)的存取完全是由主系统直接进行的,只有主系统“知道”文件(数据集)的信息。

但是具有文件系统的格式化存储,阵列是必须“知道”文件的。因为阵列完整记录了关于文件的信息。
我们对格式化数据进行读写操作都必须首先向阵列请求关于文件相关信息。(主系统并不“知道”关于文件相关信息)
也就是说,只有阵列“知道”格式化数据的信息。要是它没有或失去这些信息,所有记录也就没有意义了
所以从这个意义上说,阵列不但“知道”文件、而且只有它“知道”文件。
...


这位大姐,大热天的您在这里自己发明新名词很有意思吗?还“主系统” “请求关于文件相关信息”,唉……

咱回炉去找本本科教材复习复习如何?

要不,您去跟花花学学中医?
[34 楼] yejun [老坛泡菜]
22-8-17 21:21
nahcooo 发表于 2022-8-17 17:25
如果说RAID-1特殊,不存在条带。那么RAID-10总存在条带了吧?

四盘RAID-0的场合,第一条在1号盘,第二条在2号盘,第三条在3号盘,第四条在4号盘。然后一起读取。

四盘RAID-10的场合,是否可以从1号盘读取第一条,从2号盘读取第三条,从3号盘读取第二条,从4号盘读取第四条,从而达到和四盘RAID-0一样的速度呢?

--------------------------------------

用这个图的话,就是从disk0读取A1,从disk1读取A3,从disk2读取A2,从disk3读取A4。从而达到和raid-0一样的速度。


也只有第一个数据条可以4个盘一起读,第二块就不行了,因为A3已经读过了。
[33 楼] tianman [泡菜]
22-8-17 20:45
PowerPCG5 发表于 2022-8-17 17:16
你这喝了几两写的?

RAID系统只关心块本身,也就是你所谓的“数据的分布”,完全不知道什么文件系统的存在。你要谈这个就不要提什么文件。

文件系统也不需要知道块的分布,它只需要一个线性的块空间。当然为了提高读写速度,每次访问不会只读一个块,会一次性多读若干个块,称为“簇”,放到内存缓存里供文件系统以后访问。到底读多少合适可以读取一下块设备给的参数建议。

具体到RAID1,它是把每个块(可以称为逻辑块),完全复制到两个乃至若干个物理设备的块(物理块)上。它只干这一件事:操作系统送来一块数据,分别写到两个磁盘;操作系统要求读一块数据,它从两个硬盘分别读出来两块数据,比对一致后把其中一个送给操作系统,如果过程中某个磁盘报错,那就把没报错的那块磁盘读出来的数据送给操作系统,然后报警。

我觉得,我们所说的并不矛盾。只是观察角度不同罢了

我前面说的“文件”,既包括实际格式的文件,也包括一个数据流形成的数据块。
在我看来,裸盘确实不“知道”什么是文件(数据集),因为裸盘中没有关于文件(数据流)的信息。这就是一个纯数据的容器。
文件(数据集)的存取完全是由主系统直接进行的,只有主系统“知道”文件(数据集)的信息。

但是具有文件系统的格式化存储,阵列是必须“知道”文件的。因为阵列完整记录了关于文件的信息。
我们对格式化数据进行读写操作都必须首先向阵列请求关于文件相关信息。(主系统并不“知道”关于文件相关信息)
也就是说,只有阵列“知道”格式化数据的信息。要是它没有或失去这些信息,所有记录也就没有意义了
所以从这个意义上说,阵列不但“知道”文件、而且只有它“知道”文件。
[32 楼] nahcooo [资深泡菜]
22-8-17 17:25
如果说RAID-1特殊,不存在条带。那么RAID-10总存在条带了吧?

四盘RAID-0的场合,第一条在1号盘,第二条在2号盘,第三条在3号盘,第四条在4号盘。然后一起读取。

四盘RAID-10的场合,是否可以从1号盘读取第一条,从2号盘读取第三条,从3号盘读取第二条,从4号盘读取第四条,从而达到和四盘RAID-0一样的速度呢?

--------------------------------------


用这个图的话,就是从disk0读取A1,从disk1读取A3,从disk2读取A2,从disk3读取A4。从而达到和raid-0一样的速度。
nahcooo 编辑于 2022-08-17 17:29
[31 楼] PowerPCG5 [禁言中]
22-8-17 17:16
tianman 发表于 2022-8-17 16:48
再说说块

在说阵列的时候,我并没有说到“块”
因为,一个阵列作为“块设备”的特性是它对外部的表现。
而在阵列内部,数据的分布、条块化并不表现到块设备“块”上面。
在本帖,我们是在讨论阵列内部的数据的分布和条块化处理和内部读写方式,所以无需引入“块设备”的概念。
事实上,当时我们讨论的是:RAID1的数据是不是“上升到扇区级别”。并没有涉及到“块”。


你这喝了几两写的?

RAID系统只关心块本身,也就是你所谓的“数据的分布”,完全不知道什么文件系统的存在。你要谈这个就不要提什么文件。

文件系统也不需要知道块的分布,它只需要一个线性的块空间。当然为了提高读写速度,每次访问不会只读一个块,会一次性多读若干个块,称为“簇”,放到内存缓存里供文件系统以后访问。到底读多少合适可以读取一下块设备给的参数建议。

具体到RAID1,它是把每个块(可以称为逻辑块),完全复制到两个乃至若干个物理设备的块(物理块)上。它只干这一件事:操作系统送来一块数据,分别写到两个磁盘;操作系统要求读一块数据,它从两个硬盘分别读出来两块数据,比对一致后把其中一个送给操作系统,如果过程中某个磁盘报错,那就把没报错的那块磁盘读出来的数据送给操作系统,然后报警。
[30 楼] tianman [泡菜]
22-8-17 16:48
PowerPCG5 发表于 2022-8-17 13:50
原版咕咚 是对的。

RAID是建立在块设备层面的,对外提供的只是一个线性的块设备空间,访问单位是块(比如4K大小),地址就是所谓的LBA。

对于操作系统而言,块设备就是一种抽象,就是一大堆连续的存储块,每次访问必须以块为单位,至少读写一个块。具有两个属性:块尺寸(4K,512byte等等)和设备尺寸(0开始的LBA范围)。具体到物理设备层面,一个块设备可以是磁盘上的一个分区、内存一个区域、LVM里一个LV等等,RAID系统甚至在略低的一个层次,把几个块设备组合成一个相当于裸硬盘的设备,这个裸硬盘即可以整体作为块设备,也可以进一步分区提供几个块设备。

至于什么磁头磁道扇区地址,那是具体特定机械硬盘设备的寻址参数,操作系统并不需要关心,在硬件驱动程序层面翻译成LBA即可。SSD之类的设备根本就没有CHS参数可言。
...

再说说块

在说阵列的时候,我并没有说到“块”
因为,一个阵列作为“块设备”的特性是它对外部的表现。
而在阵列内部,数据的分布、条块化并不表现到块设备“块”上面。
在本帖,我们是在讨论阵列内部的数据的分布和条块化处理和内部读写方式,所以无需引入“块设备”的概念。
事实上,当时我们讨论的是:RAID1的数据是不是“上升到扇区级别”。并没有涉及到“块”。

本帖最后由 tianman 于 2022-8-17 16:50 编辑
[29 楼] tianman [泡菜]
22-8-17 16:19
PowerPCG5 发表于 2022-8-17 13:50
原版咕咚 是对的。

RAID是建立在块设备层面的,对外提供的只是一个线性的块设备空间,访问单位是块(比如4K大小),地址就是所谓的LBA。

对于操作系统而言,块设备就是一种抽象,就是一大堆连续的存储块,每次访问必须以块为单位,至少读写一个块。具有两个属性:块尺寸(4K,512byte等等)和设备尺寸(0开始的LBA范围)。具体到物理设备层面,一个块设备可以是磁盘上的一个分区、内存一个区域、LVM里一个LV等等,RAID系统甚至在略低的一个层次,把几个块设备组合成一个相当于裸硬盘的设备,这个裸硬盘即可以整体作为块设备,也可以进一步分区提供几个块设备。

至于什么磁头磁道扇区地址,那是具体特定机械硬盘设备的寻址参数,操作系统并不需要关心,在硬件驱动程序层面翻译成LBA即可。SSD之类的设备根本就没有CHS参数可言。

比如我有四个硬盘/dev/sda到/dev/sdd,一般不会傻到直接在/dev/sda上建文件系统,都是建分区。
那么我把每个硬盘都整体分成一个区,就有了四个块设备/dev/sda1到/dev/sdd1。
现在我把这四个块设备再用mdadm建一个RAID5阵列,就变成了一个新的裸磁盘设备/dev/md0。
自己用就懒得在md0上再分区了,直接把文件系统建在/dev/md0就行,mkfs.exr4m /dev/md0
矫情一点,或者想做 ...

1 先解释一下前面提到的“文件”
前面的帖子是从原理上说,“除了RAID1以外的RAID,每个文件都是拆分成条块(除了只有若干字节的极小文件)分散存储到各个磁盘上面的….RAID1虽然和RAID0很相似,但是它每个盘存储的都是整个文件”
很明显,这里说到的“文件”实际是在说“要写入阵列的数据块”,这里说分割“文件”是不过是便于理解的通俗化的说法,并不是说文件系统里的实际文件。一个连续记载的数据块为什么不能说是“文件”呢?
是原版咕咚非要说“raid 1 控制器不知道有文件”这样歪过来的。

2 “raid 1 控制器”是否“知道”文件,取决于阵列的用途。
事实上,和普通磁盘一样,只要它里面存在文件系统,它就能知道“文件”。因为,文件的目录信息和文件组成信息都记载在这个阵列里。
比如人脑“知道”一种语言,因为它可以正确地“接受”和“发送”这语言的意思。
如果一定要说脑细胞不“知道”这个语言、脑回路不“知道”这个语言、神经元不“知道”这个语言...的话,我不知道这是在表达什么意思。。。。

3 我并没有提到“磁头磁道扇区地址”。是原版咕咚说:“因为raid1不是条带化的,要同时从两份存储里读需要上升到扇区级别,一部分扇区从A读,一部分从B读,拼起来完成任务。”这句话引起的。
正如你所说的,“至于什么磁头磁道扇区地址,那是具体特定机械硬盘设备的寻址参数”。
事实上,“一部分扇区从A读,一部分从B读,拼起来完成任务”是很可笑的说法。
[28 楼] yejun [老坛泡菜]
22-8-17 15:54
PowerPCG5 发表于 2022-8-17 13:50
原版咕咚 是对的。

RAID是建立在块设备层面的,对外提供的只是一个线性的块设备空间,访问单位是块(比如4K大小),地址就是所谓的LBA。

对于操作系统而言,块设备就是一种抽象,就是一大堆连续的存储块,每次访问必须以块为单位,至少读写一个块。具有两个属性:块尺寸(4K,512byte等等)和设备尺寸(0开始的LBA范围)。具体到物理设备层面,一个块设备可以是磁盘上的一个分区、内存一个区域、LVM里一个LV等等,RAID系统甚至在略低的一个层次,把几个块设备组合成一个相当于裸硬盘的设备,这个裸硬盘即可以整体作为块设备,也可以进一步分区提供几个块设备。

至于什么磁头磁道扇区地址,那是具体特定机械硬盘设备的寻址参数,操作系统并不需要关心,在硬件驱动程序层面翻译成LBA即可。SSD之类的设备根本就没有CHS参数可言。

比如我有四个硬盘/dev/sda到/dev/sdd,一般不会傻到直接在/dev/sda上建文件系统,都是建分区。
那么我把每个硬盘都整体分成一个区,就有了四个块设备/dev/sda1到/dev/sdd1。
现在我把这四个块设备再用mdadm建一个RAID5阵列,就变成了一个新的裸磁盘设备/dev/md0。
自己用就懒得在md0上再分区了,直接把文件系统建在/dev/md0就行,mkfs.exr4m /dev/md0
矫情一点,或者想做 ...


不过文件系统最好知道下面是raid的,ext4有stride和stripe设置,如果是软raid,mkfs好像会自动从系统读到这个设置。如果硬件raid需要手动设置,不过不是很清楚区别大不大。
[27 楼] PowerPCG5 [禁言中]
22-8-17 13:50
原版咕咚 是对的。

RAID是建立在块设备层面的,对外提供的只是一个线性的块设备空间,访问单位是块(比如4K大小),地址就是所谓的LBA。

对于操作系统而言,块设备就是一种抽象,就是一大堆连续的存储块,每次访问必须以块为单位,至少读写一个块。具有两个属性:块尺寸(4K,512byte等等)和设备尺寸(0开始的LBA范围)。具体到物理设备层面,一个块设备可以是磁盘上的一个分区、内存一个区域、LVM里一个LV等等,RAID系统甚至在略低的一个层次,把几个块设备组合成一个相当于裸硬盘的设备,这个裸硬盘即可以整体作为块设备,也可以进一步分区提供几个块设备。

至于什么磁头磁道扇区地址,那是具体特定机械硬盘设备的寻址参数,操作系统并不需要关心,在硬件驱动程序层面翻译成LBA即可。SSD之类的设备根本就没有CHS参数可言。

比如我有四个硬盘/dev/sda到/dev/sdd,一般不会傻到直接在/dev/sda上建文件系统,都是建分区。
那么我把每个硬盘都整体分成一个区,就有了四个块设备/dev/sda1到/dev/sdd1。
现在我把这四个块设备再用mdadm建一个RAID5阵列,就变成了一个新的裸磁盘设备/dev/md0。
自己用就懒得在md0上再分区了,直接把文件系统建在/dev/md0就行,mkfs.exr4m /dev/md0
矫情一点,或者想做点儿其他事情,可以在md0上继续分区,搞出来/dev/md0p1 /dev/md0p2等等分区,在这些分区上建文件系统。

RAID系统关心的,也是块层面的处理,RAID1就是每个块在各个裸盘上同时存一份。

文件系统是操作系统内部的功能,是在块设备上面建立的一套数据结构。所有的文件访问都是经过操作系统内部的文件系统驱动程序翻译成块设备LBA地址,发给块设备驱动程序去访问数据。RAID控制器确实不知道什么是文件系统。

[26 楼] 无计留春住 [泡菜]
22-8-17 12:58
原版咕咚 发表于 2022-08-16 19:34
你连什么是“块设备”都不知道,就出来发 raid 的帖子,呵呵。
现在你就是个大笑话。

RAID1就是镜像,所以随便哪块硬盘拿出来都可以单独使用。而RAID0、5等就不行,单独拿出一块硬盘是无法使用的。这个是最基本的概念,不需要玩弄什么专业词汇的。
[25 楼] tianman [泡菜]
22-8-16 19:46
原版咕咚 发表于 2022-8-16 19:34
你连什么是“块设备”都不知道,就出来发 raid 的帖子,呵呵。

现在你就是个大笑话。

可怜你只会给别人乱扣这类根本不搭界的帽子

笑话都在你我的帖子里面。大家一看便知。。。
[24 楼] 原版咕咚 [资深泡菜]
22-8-16 19:34
tianman 发表于 2022-08-16 16:47
是不是笑话,并不是你我说了就算的。。。
有理就说理,何须给人贴标签?
“因为raid1不是条带化的,要同时从两份存储里读需要上升到扇区级别”
我说“raid1的硬盘并不要求完全相同,所以做不到扇区级别的镜像”
你说“LBA 和物理扇区寻址之间要做映射...

你连什么是“块设备”都不知道,就出来发 raid 的帖子,呵呵。

现在你就是个大笑话。
[23 楼] tianman [泡菜]
22-8-16 16:47
原版咕咚 发表于 2022-8-16 14:30
基本概念错误。raid 1 控制器不知道有文件,只知道 LBA。 NAS 控制器或者分布式文件系统才知道文件。

raid 控制器输出给主机的是块设备,LBA 里的 B 就是这个 “块” 。只有向主机输出文件系统的设备,才知道文件,才能在文件级别进行操作。

我在前面回复的时候就料到了,如果你对 raid 和 LBA 、条带这些词,有正确认识,根本不会编出前面那些帖子。你是用自己贫乏的 it 知识,臆想出一套磁盘、raid 的知识。

这些论坛上的人都这样,用自己有限的知识,编一些自己不了解的知识出来,被行家指出来死活不肯认错,其实这导致一个很小的问题都能闹成一个大笑话。。。。。

是不是笑话,并不是你我说了就算的。。。
有理就说理,何须给人贴标签?

“因为raid1不是条带化的,要同时从两份存储里读需要上升到扇区级别
我说“raid1的硬盘并不要求完全相同,所以做不到扇区级别的镜像”

你说“LBA 和物理扇区寻址之间要做映射的“,又说“容量、物理扇区、物理柱面、物理盘数甚至磁头数(有双磁臂的硬盘)不一致都完全没关系”。那么,哪儿来的上升到扇区级别”?
事实上,不同磁盘的扇区并不一样。“扇区”是一个物理参数,因设备而异。
没有逻辑上“扇区”。更不存在“同时从两份存储里读需要上升到扇区级别

你说:“raid 1 控制器不知道有文件,只知道 LBA。 NAS 控制器或者分布式文件系统才知道文件。”
这就搞笑了。
我们知道,RAID是一种存储设备,它既可以当裸盘使用,也可以建立文件系统。
当RAID作为文件系统使用时,它如何能够“不知道有文件,只知道 LBA”?
难道主机读取一个文件时,需要主机提供LBA才能访问RAID么?

事实上,RAID既可以用于NAS,也可以直接用于主机(DASD)。并不是“NAS 控制器或者分布式文件系统才知道文件。”
它和一个大磁盘并没有什么本质上区别,差别仅仅在于性能。 本帖最后由 tianman 于 2022-8-16 16:48 编辑
[22 楼] 原版咕咚 [资深泡菜]
22-8-16 14:30
tianman 发表于 2022-08-16 13:10
LBA是指阵列盘的“条带Stripe Unit”而言的。RAID1例外,它只是文件镜像,不对数据分割成条带,所以也不存在LBA的问题。
事实上,RAID1并不分割文件,就是直接将文件分别存入两个磁盘。

基本概念错误。raid 1 控制器不知道有文件,只知道 LBA。 NAS 控制器或者分布式文件系统才知道文件。

raid 控制器输出给主机的是块设备,LBA 里的 B 就是这个 “块” 。只有向主机输出文件系统的设备,才知道文件,才能在文件级别进行操作。

我在前面回复的时候就料到了,如果你对 raid 和 LBA 、条带这些词,有正确认识,根本不会编出前面那些帖子。你是用自己贫乏的 it 知识,臆想出一套磁盘、raid 的知识。

这些论坛上的人都这样,用自己有限的知识,编一些自己不了解的知识出来,被行家指出来死活不肯认错,其实这导致一个很小的问题都能闹成一个大笑话。。。。。
[21 楼] tianman [泡菜]
22-8-16 13:10
原版咕咚 发表于 2022-8-16 11:07
必然做到相同。

因为raid 控制器或 hba 从 host 收到命令里,存储单位是 LBA ,LBA那个字母L 是 "logical" ,   LBA 和物理扇区寻址之间要做映射的,不同的硬盘意味着不同的映射。

既然允许了两块不同规格的硬盘组成 raid1,就说明这个raid控制器确保了 LBA 这个级别是完全对应的,某块硬盘多出来的容量、物理扇区、物理柱面、物理盘数甚至磁头数(有双磁臂的硬盘)不一致都完全没关系,raid 控制器允许你这两块硬盘组 raid1 ,就意味着它解决了两块硬盘物理寻址的映射,不同物理寻址映射的 LBA 一致。

LBA是指阵列盘的“条带Stripe Unit”而言的。RAID1例外,它只是文件镜像,不对数据分割成条带,所以也不存在LBA的问题。
事实上,RAID1并不分割文件,就是直接将文件分别存入两个磁盘。
[20 楼] 原版咕咚 [资深泡菜]
22-8-16 11:07
tianman 发表于 2022-08-16 10:33
事实上,raid1的硬盘并不要求完全相同,所以做不到扇区级别的镜像。

必然做到相同。

因为raid 控制器或 hba 从 host 收到命令里,存储单位是 LBA ,LBA那个字母L 是 "logical" ,   LBA 和物理扇区寻址之间要做映射的,不同的硬盘意味着不同的映射。

既然允许了两块不同规格的硬盘组成 raid1,就说明这个raid控制器确保了 LBA 这个级别是完全对应的,某块硬盘多出来的容量、物理扇区、物理柱面、物理盘数甚至磁头数(有双磁臂的硬盘)不一致都完全没关系,raid 控制器允许你这两块硬盘组 raid1 ,就意味着它解决了两块硬盘物理寻址的映射,不同物理寻址映射的 LBA 一致。
[19 楼] yejun [老坛泡菜]
22-8-16 10:35
原版咕咚 发表于 2022-8-16 10:03
raid-1可以从两份数据里同时读,让传输速度快一倍,这要看raid控制器的具体实现。

低端raid控制器实现的raid1基本都没这功能,因为raid1不是条带化的,要同时从两份存储里读需要上升到扇区级别,一部分扇区从A读,一部分从B读,拼起来完成任务。高级的 raid 控制器在这里一般用到队列,类似sata的 ncq 或 sas 的 simple queque,连续的读操作分成两部分,分别送到 A 和 B 同时去执行,结果用 dma 送回host 发中断告诉 host 完成了。

低端的raid卡读写 raid 0 快一倍是因为直接操作条带,每个扇区对应俩条带,一个在 A 一个在 B,host下命令读写某个扇区,自然就去同时操作两块对应的条带了,raid 5 也类似。raid1 没条带,这些垃圾raid卡就不能加速读取了。


我觉得主要问题是在顺序读写的时候,就算第一和第二块数据同时从两块硬盘读了,读第三块的时候磁头需要跳过第二块数据,如果很小块的数据反而不划算,因为跳过数据块的时候会多等磁盘转一整圈。预读取太大的话两个磁头都变忙了,下一个读取需要等。
看了一下linux的raid 1的读磁盘的逻辑,顺序读不换盘,否者读不忙的那个盘。
我觉得如果是ssd的话确实可以两个一起读。 本帖最后由 yejun 于 2022-8-16 10:49 编辑
[18 楼] tianman [泡菜]
22-8-16 10:33
原版咕咚 发表于 2022-8-16 10:03
raid-1可以从两份数据里同时读,让传输速度快一倍,这要看raid控制器的具体实现。

低端raid控制器实现的raid1基本都没这功能,因为raid1不是条带化的,要同时从两份存储里读需要上升到扇区级别,一部分扇区从A读,一部分从B读,拼起来完成任务。高级的 raid 控制器在这里一般用到队列,类似sata的 ncq 或 sas 的 simple queque,连续的读操作分成两部分,分别送到 A 和 B 同时去执行,结果用 dma 送回host 发中断告诉 host 完成了。

低端的raid卡读写 raid 0 快一倍是因为直接操作条带,每个扇区对应俩条带,一个在 A 一个在 B,host下命令读写某个扇区,自然就去同时操作两块对应的条带了,raid 5 也类似。raid1 没条带,这些垃圾raid卡就不能加速读取了。

事实上,raid1的硬盘并不要求完全相同,所以做不到扇区级别的镜像。