v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}

keer
keer
2
521
2017-08-26T08:20:00Z
2017-08-27T04:49:00Z
2017-08-27T04:49:00Z
1
1778
10141
84
23
11896
16.00

0
1
Clean
Clean
false

7.8 磅
0
2

false
false
false

EN-US
ZH-CN
X-NONE


/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.5pt;
mso-bidi-font-size:11.0pt;
font-family:等线;
mso-ascii-font-family:等线;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:等线;
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:等线;
mso-hansi-theme-font:minor-latin;
mso-font-kerning:1.0pt;}
table.MsoTableGrid
{mso-style-name:网格型;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-priority:39;
mso-style-unhide:no;
border:solid windowtext 1.0pt;
mso-border-alt:solid windowtext .5pt;
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-border-insideh:.5pt solid windowtext;
mso-border-insidev:.5pt solid windowtext;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.5pt;
mso-bidi-font-size:11.0pt;
font-family:等线;
mso-ascii-font-family:等线;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:等线;
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:等线;
mso-hansi-theme-font:minor-latin;
mso-font-kerning:1.0pt;}

前言

在我们日常使用计算机的过程中,我们的数据都是保存在硬盘上的,我们的计算机是先将硬盘的数据传递给内存,然后CPU再从内存中加载数据来进行运算,由此看来,硬盘对于我们计算机的性能影响还是很大的。但是现在我们磁盘的缺陷也很明显:I/O性能极差,稳定性极差。

如果一个硬盘发生了故障或损坏,那么这块硬盘就不能再使用了。硬盘坏了不当紧,但是里面的数据可是全部没有了啊!在生产环境中,这个影响可是相当大的。正因如此,诞生了一种新的技术——RAID。

一、RAID简介

1.1 RAID由来

RAID(Redundant Array of Inexpensive Disks)称为廉价磁盘冗余阵列。在1988年由加利福尼亚大学伯克利分校提出的。

RAID 就是把多个磁盘合成一个“阵列”来提供更好的性能、冗余,或者两者都提供。

1.2 RAID优点

提高I/O能力:磁盘并行读写。

提高耐用性:通过磁盘冗余(容错)机制来实现。

1.3 RAID实现的方式

外接磁盘阵列:通过扩展卡提供适配能力。

内接式RAID:主板集成RAID控制器。(安装OS前在BIOS里配置)

软件RAID:通过软件方式实现RAID功能。

1.4 如何操作实现RAID

①在安装操作系统之前通过BIOS进行设置

此种方式主要目的在于将操作系统安装在RAID之上。

②在安装操作系统之后通过BIOS或软件进行设置

此种方式主要目的在于将操作系统和其他专用分区(如数据盘)独立开来。

二、RAID级别

级别就是将多块磁盘组织在一起的工作方式,不同级别组合起来的磁盘具有不同的功能。

常用的RAID级别有RAID-0,RAID-1,RAID-5,RAID-10,RAID-50。接下来我们就来详细说一下这几种级别。

2.1 RAID-0

RAID-0:条带卷

这种模式的RAID会将磁盘先切出等量的区块,当一个文件要写入RAID时,该文件会依据区块的大小切割好,然后再依序放到各个磁碟里面去。由于每个磁盘会交错的存放数据,因此当你的数据要写入RAID时,数据会被等量的放置在各个磁盘上面。举例来说,你有两颗磁盘组成RAID-0,当你有100MB的数据要写入时,每个磁盘会各被分配到50MB的储存量。具体如下图:

在RAID-0模式下:

读、写性能提升;

可用空间:N * min(S1,S2,…);

无容错能力;

最少磁盘数:至少两块。

2.2 RAID-1

RAID-1:镜像卷

在该模式下,每个磁盘读入的时一样的数据,相当于把数据备份到多个磁盘中。磁盘数越多,浪费的越多,但是安全性越高。具体如下图:

在RAID-2模式下:

读性能提升、写性能略有下降;

可用空间:1 * min(S1,S2,…);

有冗余能力;

最少磁盘数:2,2N。

2.3 RAID-4

RAID-4模式需要三块或更多的磁盘,其中一个磁盘为校验盘,并以RAID-0方式将数据写入其他磁盘。具体如下图:

在RAID4模式下,假设只有三块盘,那么两块数据磁盘的数据一致,则校验盘存为0,如果两块数据盘的数据不一致,则校验盘存为1。如果有多块盘,值为1的块数相加为偶数,则校验盘值为1,值为1的块数相加为奇数,则校验盘值为0。

由上可得,如果一个磁盘出现故障,那么可以使用校验信息来重建数据,如果有两个磁盘出现故障,那么所有的数据都将丢失。

在RAID-4模式下:

读、写性能提升

可用空间:(N - 1)* min(S1,S2,…);

有冗余能力:允许最多1块磁盘损坏;

最少磁盘数:3,3+。

2.4 RAID-5

RAID-5可以用在三块或更多的磁盘上,并使用0块或更多的备用磁盘。总体和RAID-4很相近,最大的区别就是校验信息均匀分布在各个驱动器上,这样就避免了RAID-4中出现的瓶颈问题。具体如下图所示:

从上图可以看出,在RAID-5中,即使其中一块硬盘发生了损坏,也能通过其他硬盘以及 校验信息对数据进行恢复使用。但是如果2块或2块以上的硬盘发生了损坏 ,整个数据也就坏了。

在RAID-5模式下:

读、写性能提升

可用空间:(N - 1)* min(S1,S2,…);

有冗余能力:允许最多1块磁盘损坏;

最少磁盘数:3,3+。

2.5 RAID-01与RAID-10

RAID-01与RAID-10都是有RAID-1和RAID-0组合而成的,只是组成的顺序不一样,所以其效果也有所不同。

RAID-01就是先做条带,再做镜像。

RAID-10就是先做镜像,再做条带

接下来我们以4个盘为例,来比较说明两者在安全性上面的差别

  • RAID-01的情况:

这种情况下,我们仍然假设磁盘1损坏,这时左边的RAID-0将无法读取。在剩下的三块盘中,只要磁盘3或者磁盘4这两个盘中任意一个损坏,都会导致整个RAID失效,我们可简单的计算故障率为2/3。

  • RAID-10的情况:

这种情况下,我们假设磁盘1损坏时,在剩下的3块盘中,只有磁盘2一个盘发生故障时,才会导致整个RAID失效,我们可以简单的计算故障概率为1/3。

从数据存储的逻辑位置来看,在正常的情况下RAID-01和RAID-10是完全一样的,而且每一个读写操作所产生的IO数量也是一样的,所以在读写性能上两者没什么区别。只有当磁盘发生故障时,两者才会发生区别,同时,RAID-10的读性能也会优于RAID-01。

三、软RAID的实现方式——mdadm

RAID的实现方式有两种,上文中我们已经提到过了,在生产环境中,我们通常使用软件实现方式,下面我们就来详细说一下软件怎么实现RAID。

软件实现RAID是通过软件工具mdadm来实现的。mdadm是一个模式化的工具。

3.1 基础命令简介

命令:mdadm

格式:mdadm [mode] < > [options] <component-devices>

支持的RAID级别:RAID-0,RAID-1,RAID-4,RAID-5,RAID-6,RAID-10

模式[mode]:创建、装配、监控、管理

< raiddevice >:/dev/md#

<component-devices>:任意块设备

选项:

-C

创建RAID,有以下子选项

-n #: 使用#个块设备来创建此RAID

-l #:指明要创建的RAID的级别

-a {yes|no}:自动创建目标RAID设备的设备文件

-c CHUNK_SIZE: 指明块大小(仅限RAID-0,RAID-5)

-x #: 指明空闲盘(热备盘)的个数(RAID-0不支持)

-D

显示RAID的详细信息

Mdadm -D /dev/md#

Mdadm -D -s  > /etc/mdadm.conf 把信息导入至/etc/mdadm.conf文件(全部)如果-s后跟着具体md名,则导入该RAID信息

-A

装配模式,重新识别此前实现的RAID (依赖于/etc/mdadm.conf文件)

-F

监控模式

管理模式

-f:标记制定磁盘为损坏

-a:添加磁盘

-r:移除磁盘

观察md的状态: cat /proc/mdstat

停止md设备:mdadm -S /dev/md#

3.2 具体实例——创建软RAID

上文中我们已经提到了创建RAID的命令,接下来我们通过实例演示一下如何具体创建RAID。

实例1:某台机器上有4块空闲的硬盘,分别是/dev/sdb、/dev/sdc、/dev/sdd和/dev/sde,并用这四块硬盘来创建来创建一个RAID 5,具体操作步骤如下:

(1)创建分区 使用fdisk命令对每个硬盘进行分区,如果是直接基于磁盘来创建RAID设备,那么久可以跳过这一步。具体命令如下:

 [root@centos7 ~]$  fdisk /dev/sdb

 Welcome to fdisk (util-linux 2.23.).

 Changes will remain in memory only, until you decide to write them.

 Be careful before using the write command.

 Device does not contain a recognized partition table

 Building a new DOS disklabel with disk identifier 0xb9dfb808.

 Command (m for help): n

 Partition type:

    p   primary ( primary,  extended,  free)

    e   extended

 Select (default p): p

 Partition number (-, default ): 

 First sector (-, default ):

 Using default value 

 Last sector, +sectors or +size{K,M,G} (-, default ): +2G

 Partition  of type Linux and of size  GiB is set

 Command (m for help): w

 The partition table has been altered!

 Calling ioctl() to re-read partition table.

 Syncing disks.

对剩余三个硬盘做相同的操作即可。

(2)创建RAID-5

创建完/dev/sdb1,/dev/sdc1,/dev/sdd1,/dev/sde1四个分区以后,下面就可以来创建RAID-5了,其中设定/dev/sde1为热备盘,其余为活动设备。操作如下:

 [root@centos7 ~]$  mdadm -C /dev/md0 -a yes -l  -n  -x  /dev/sd[b-e]    ------创建/dev/md0
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
[root@centos7 ~]$ mdadm -D /dev/md0 --------查看/dev/md0的详细信息
/dev/md0:
Version : 1.2
Creation Time : Sun Aug ::
Raid Level : raid5
Array Size : (4.00 GiB 4.29 GB)
Used Dev Size : (2046.00 MiB 2145.39 MB)
Raid Devices :
Total Devices :
Persistence : Superblock is persistent Update Time : Sun Aug ::
State : clean
Active Devices :
Working Devices :
Failed Devices :
Spare Devices : Layout : left-symmetric
Chunk Size : 512K Name : centos7.: (local to host centos7.)
UUID : c3726f6c:1ac41210:60a9406e:9b9a32fc
Events : Number Major Minor RaidDevice State
active sync /dev/sdb1
active sync /dev/sdc1
active sync /dev/sdd1 - spare /dev/sde1

(3)创建RAID的配置文件

RAID的配置文件名为“mdadm.conf”,默认是不存在的,所以需要手动创建,该配置文件存在的主要作用是系统启动的时候能够自动加载软RAID,同时也方便日后管理,比如当我们使用mdadm -S停用了某磁盘时,可以用mdadm -A恢复,而mdadm -A命令就依赖于mdadm.conf文件,如果我们没有生成mdadm.conf文件,在恢复的时候就要手动制定该RAID的组成盘。生成RAID配置文件操作如下:

 [root@centos7 ~]$  mdadm -D -s > /etc/mdadm.conf

上面这条命令是将所有的RAID成员信息保存至mdadm.conf文件,如果想要保存或者追加单个RAID的成员信息,在-s 后跟上RAID名即可。

(4)创建文件系统

接下来只需要在RAID设备上创建文件系统就可以使用了,在RAID上创建文件系统的命令和在分区或磁盘上创建文件系统的命令是一样的:

 [root@centos7 ~]$  mkfs.ext3 /dev/md0
mke2fs 1.42. (-Dec-)
Filesystem label=
OS type: Linux
Block size= (log=)
Fragment size= (log=)
Stride= blocks, Stripe width= blocks
inodes, blocks
blocks (5.00%) reserved for the super user
First data block= Maximum filesystem blocks=
block groups
blocks per group, fragments per group
inodes per group
Superblock backups stored on blocks:
, , , , , , Allocating group tables: done
Writing inode tables: done
Creating journal ( blocks): done
Writing superblocks and filesystem accounting information: done

创建完文件系统后,将该设备挂载上就可以正常使用了。

如果要创建其他级别的RAID,其步骤与创建RAID-5的基本一致,区别在于指定-l的值时,需要将该值设置为相应的级别。

3.3 具体实例——维护软RAID

在日常使用中,软RAID虽然可以很大程度上保证数据的可靠性,但也不排除其设备损坏的可能性,接下来,我们通过一个实例来介绍更换RAID故障磁盘的完整过程:

实例2:以上面的实例1为基础,假定“/dev/sdc1”设备出现故障时,更换一个新的磁盘,整个过程的详细说明如下:

(1)模拟故障磁盘

在实际生活中,当软RAID检测到某个磁盘有故障时,会自动标记该磁盘为故障磁盘,并停止对故障磁盘的读写操作,所以在这里我们需要将/dev/sdc1标记为出现故障的磁盘,命令如下:

 [root@centos7 ~]$  mdadm /dev/md0 -f /dev/sdc1
mdadm: set /dev/sdc1 faulty in /dev/md0

由于我们在实例1中设置了一个备用设备,所以当有标记为故障磁盘出现的时候,备用磁盘会自动顶替故障磁盘工作,阵列也能够在短时间内实现重建。我们可以查看一下当前阵列的状态:

 [root@centos7 ~]$  cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdd1[] sde1[] sdc1[](F) sdb1[]
blocks super 1.2 level , 512k chunk, algorithm [/] [UUU] unused devices: <none>

上图中可以看出,在sdc1[1]后出现了(F),说明该磁盘出现故障,此时sde1已经顶了上去。

(2)移除故障磁盘

既然“/dev/sdc1”出现了故障,我们当然要移除该设备。具体操作如下:

 [root@centos7 ~]$  mdadm /dev/md0 -r /dev/sdc1
mdadm: hot removed /dev/sdc1 from /dev/md0

此时,我们再来查看一下/dev/md0的具体信息:

 [root@centos7 ~]$  mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sun Aug ::
Raid Level : raid5
Array Size : (4.00 GiB 4.29 GB)
Used Dev Size : (2046.00 MiB 2145.39 MB)
Raid Devices :
Total Devices :
Persistence : Superblock is persistent Update Time : Sun Aug ::
State : clean
Active Devices :
Working Devices :
Failed Devices :
Spare Devices : Layout : left-symmetric
Chunk Size : 512K Name : centos7.: (local to host centos7.)
UUID : c3726f6c:1ac41210:60a9406e:9b9a32fc
Events : Number Major Minor RaidDevice State
active sync /dev/sdb1
active sync /dev/sde1
active sync /dev/sdd1

可以看出,此刻成员已经没有/dev/sdc1了。

(3)添加新硬盘

由于我们之前的操作都是基于分区的,所以我们添加的新硬盘也要是一个分区。假设我们需要添加的硬盘是“/dev/sdc1”,具体操作如下:

 [root@centos7 ~]$  mdadm /dev/md0 -a /dev/sdc1
mdadm: added /dev/sdc1

现在我们看一看/dev/md0的具体信息

 [root@centos7 ~]$  mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sun Aug ::
Raid Level : raid5
Array Size : (4.00 GiB 4.29 GB)
Used Dev Size : (2046.00 MiB 2145.39 MB)
Raid Devices :
Total Devices :
Persistence : Superblock is persistent Update Time : Sun Aug ::
State : clean
Active Devices :
Working Devices :
Failed Devices :
Spare Devices : Layout : left-symmetric
Chunk Size : 512K Name : centos7.: (local to host centos7.)
UUID : c3726f6c:1ac41210:60a9406e:9b9a32fc
Events : Number Major Minor RaidDevice State
active sync /dev/sdb1
active sync /dev/sde1
active sync /dev/sdd1 - spare /dev/sdc1

我们可以看到此时/dev/sdc1已经被添加进去了,此时/dev/sdc1自动成为热备盘。

由于在实例1中的RAID-5设置了一个备用设备,所以即使我们不进行任何添加磁盘的操作,我们的RAID-5也可以继续使用,但是当某块磁盘再出现故障时,就会导致RAID-5没有数据冗余功能,杜宇存放重要数据的设备来说就很不安全了。所以及时添加备用盘是很有必要的诺!

3.4 具体实例——删除软RAID

上文中,我们介绍了对软RAID的各项操作,接着我们来说一说如何删除一个软RAID。虽然在生产环境中,这个一般不会使用,但是既然有这个功能,我们还是要掌握一下的~

删除软RAID的本质就是删除其成员的信息,命令如下:

mdadm --zero-superblock /dev/设备名

接下来通过实例来说明具体操作:

实例3:删除实例1创建的RAID-5设备。

(1)解除挂载。当然由于我们上文中并没有把设备挂载到目录上,所以我们就跳过这一步!

(2)查询该RAID由哪些成员组成

 [root@centos7 ~]$  mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sun Aug ::
Raid Level : raid5
Array Size : (4.00 GiB 4.29 GB)
Used Dev Size : (2046.00 MiB 2145.39 MB)
Raid Devices :
Total Devices :
Persistence : Superblock is persistent Update Time : Sun Aug ::
State : clean
Active Devices :
Working Devices :
Failed Devices :
Spare Devices : Layout : left-symmetric
Chunk Size : 512K Name : centos7.: (local to host centos7.)
UUID : c3726f6c:1ac41210:60a9406e:9b9a32fc
Events : Number Major Minor RaidDevice State
active sync /dev/sdb1
active sync /dev/sde1
active sync /dev/sdd1 - spare /dev/sdc1

(3)停止该RAID

 [root@centos7 ~]$  mdadm -S /dev/md0
mdadm: stopped /dev/md0

(4)清空成员信息

 [root@centos7 ~]$  mdadm --zero-superblock /dev/sdb1
[root@centos7 ~]$ mdadm --zero-superblock /dev/sdc1
[root@centos7 ~]$ mdadm --zero-superblock /dev/sdd1
[root@centos7 ~]$ mdadm --zero-superblock /dev/sde1

此时,我们的/dev/md0已经完全删除~

RAID RAID 大揭秘~的更多相关文章

  1. 【腾讯Bugly干货分享】iOS黑客技术大揭秘

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/5791da152168f2690e72daa4 “8小时内拼工作,8小时外拼成长 ...

  2. Spark Streaming揭秘 Day3-运行基石(JobScheduler)大揭秘

    Spark Streaming揭秘 Day3 运行基石(JobScheduler)大揭秘 引子 作为一个非常强大框架,Spark Streaming兼具了流处理和批处理的特点.还记得第一天的谜团么,众 ...

  3. 【高德地图API】汇润做爱地图技术大揭秘

    原文:[高德地图API]汇润做爱地图技术大揭秘 昨日收到了高德地图微信公众号的消息推送,说有[一大波免费情趣用品正在袭来],点进去看了一眼,说一个电商公司(估计是卖情趣用品的)用高德云图制作了一张可以 ...

  4. 【高德地图API】从零开始学高德JS API(七)——定位方式大揭秘

    原文:[高德地图API]从零开始学高德JS API(七)——定位方式大揭秘 摘要:关于定位,分为GPS定位和网络定位2种.GPS定位,精度较高,可达到10米,但室内不可用,且超级费电.网络定位,分为w ...

  5. 诗人般的机器学习,ML工作原理大揭秘

    诗人般的机器学习,ML工作原理大揭秘 https://mp.weixin.qq.com/s/7N96aPAM_M6t0rV0yMLKbg 选自arXiv 作者:Cassie Kozyrkov 机器之心 ...

  6. 编码(1)学点编码知识又不会死:Unicode的流言终结者和编码大揭秘

    学点编码知识又不会死:Unicode的流言终结者和编码大揭秘 http://www.freebuf.com/articles/web/25623.html 如果你是一个生活在2003年的程序员,却不了 ...

  7. [百家号]看完再也不会被坑!笔记本接口大揭秘:HDMI、DP、雷电

    看完再也不会被坑!笔记本接口大揭秘:HDMI.DP.雷电 https://baijiahao.baidu.com/s?id=1577309281431438678&wfr=spider& ...

  8. 谷歌钦定的编程语言Kotlin大揭秘

    第一时间关注程序猿(媛)身边的故事 谷歌钦定的编程语言Kotlin大揭秘 语法+高级特性+实现原理:移动开发者升职加薪宝典! 谷歌作为世界级的科技公司巨头,强悍的技术研发与创新能力使其一直是业界的楷模 ...

  9. Web安全大揭秘

    web安全大揭秘,通常会有那些web安全问题呢? 1,xss 2,sql注入 3,ddos攻击

  10. 告别加载dll 出错开机加载项大揭秘

    提到开机加载(load)项,大家不要以为就是系统启动(run)项.最简单的例子是,杀毒软件或者用户手动删除病毒文件后,注册表中的自动加载信息仍在,登陆系统时就会提示"加载*dll出错,系统找 ...

随机推荐

  1. 兔子与樱花[HEOI2015]

    题目描述 很久很久之前,森林里住着一群兔子.有一天,兔子们突然决定要去看樱花.兔子们所在森林里的樱花树很特殊.樱花树由n个树枝分叉点组成,编号从0到n-1,这n个分叉点由n-1个树枝连接,我们可以把它 ...

  2. POJ-1182 食物链(并查集)

    食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 75814   Accepted: 22528 Description ...

  3. Rabin-Karp【转载】

    问题描述: Rabin-Karp的预处理时间是O(m),匹配时间O( ( n - m + 1 ) m )既然与朴素算法的匹配时间一样,而且还多了一些预处理时间,那为什么我们还要学习这个算法呢?虽然Ra ...

  4. opencv 小程序170323

    1.滤波 GaussianBlur(imgThresholded, imgThresholded, Size(5, 5), 0, 0);//高斯滤波 medianBlur(imgThresholded ...

  5. mysql 查询性能优化第一章 为什么查询速度会慢

    一 为什么查询速度会慢 在尝试编写快速的查询之前,咱们需要清除一点,真正重要的是响应时间.如果把查询看成是一个任务,那么它由一系列子任务组成,每个子任务都会消耗一定的时间.如果要有 优化查询,实际上要 ...

  6. NYOJ 252 01串(斐波那契数列变形)

    01串 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 ACM的zyc在研究01串,他知道某一01串的长度,但他想知道不含有“11”子串的这种长度的01串共有多少个, ...

  7. nodejs 文件读取一行

    作者QQ:1095737364    QQ群:123300273     欢迎加入!   废话没有,直接上代码: app.get('/company', function (req, res, nex ...

  8. Android 开发中常见的注意点

    这里总结了Android开发中常用的注意点.只有总结,没有展开举例讲解,展开的话,一个点都可以写一篇文章了..... 这类问题都一定不要犯. 重要的事情说三遍!!! 说三遍!!! 遍!!! 资源 不允 ...

  9. python---scrapy之MySQL同步存储

    假设我们已经能获取到item里定义的字段的数据,接下来就需要保存item的数据到mysql数据库. pipeline用来存储item中的数据,将爬取到的数据进行二次处理 首先,要做的准备的工作,安装M ...

  10. 2017多校第9场 HDU 6170 Two strings DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6170 题意:给了2个字符串,其中第2个字符串包含.和*两种特别字符,问第二个字符串能否和第一个匹配. ...