3.23听课笔记

1 磁盘这一章,工作中使用场景
扩展: 磁盘有坏道的修复 fsck/e2fsck -a 分区名 https://www.2cto.com/os/201204/126370.html
避免数据丢失的几个策略
1)做raid1、raid10、raid5、raid6
2)做好数据的备份策略 drdb rsync+inotify
2 raid讲解
什么是RAID
硬盘是个很脆弱的东西,它经常会坏掉。所以,为了保证服务器可靠耐用,硬盘必须时时刻刻保持可用。所以有了RAID这个东西。它的目的是将好几个硬盘合并在一起,就算硬盘坏了一个,剩下还有好几个硬盘是正常的,这样服务器才不会挂掉。

当然,保证服务高可用只是RAID其中的一个功能。它还能提升储存容量、加快存取速度等能力。

RAID分为0~6级,另外还有RAID 1+0,简称RAID 10。下面分别介绍这几种RAID实现原理。

下图就是一个RAID实物图:
在这里插入图片描述
下图是RAID示意图:

在这里插入图片描述
它跟插线板是相似的概念。区别在于,插线板是为了扩展电源插孔,RAID是为了扩展硬盘插槽。
在这里插入图片描述
RAID-0
RAID 0没有数据冗余、没有奇偶校验。因此,如果一个硬盘坏掉了,整个RAID阵列的数据都没法正常使用了。它存在的意义在于加快读写速度,提升硬盘容量。通常在数据可靠性要求不高的情况下才会使用RAID 0。比如游戏、科学计算。

因为每个硬盘都可以独立读写,如果硬盘有n块,那么读写速度提升是n倍。

下图是RAID 0的数据分布方式:

在这里插入图片描述
RAID-1
RAID 1模式下,如果有n块硬盘,那么会把数据保存n份一模一样的。这样即使一份数据坏掉了,剩下的备份可以正常工作。性能方面,随机存取速度相当于所有硬盘的总和,写入性能和原来单个硬盘的性能一样。
在这里插入图片描述
RAID-1E
这种模式跟RAID 1的区别在于,当硬盘数量大于2时,RAID 1E对于同一份数据最多保存两份一模一样的。这样可以充分的利用硬盘空间。下图说明了这种储存方式。
在这里插入图片描述
RAID-1+0
这种模式全称是RAID-1加上RAID-0。它实现的原理如下图所示:

用几句话来描述吧。它相当于先把这些硬盘成对成对的用RAID-1方式组合起来,然后再把这些组合结果用RAID-0方式组合起来。这种模式下它支持高可用,又能有很好的读写性能。这种方式,由于需要存两份一模一样的数据,因此容量会损失一半。

这种方式是目前最常用的。
在这里插入图片描述
RAID-2
这种模式现在已经不太常用了。它把每个数据位都打散,然后均匀的放到各个硬盘上。使用了Hamming代码来做纠错,将Hamming代码放到专门的几个硬盘里面。下图可以看到这种模式的数据分布:
在这里插入图片描述
RAID-3
这种模式现在也已经不太常用了。它把每个数据字节都打散,然后均匀的分散到各个硬盘。然后将奇偶校验的数据放到专门的硬盘里。关于奇偶校验的数据在后面会提到。这种模式下,由于每个数据都分散到各个硬盘的不同地方,因此每次操作都需要所有硬盘来参与。所以,对于随机存取的场景下,这种模式的性能是很差的。对于特别长的顺序读写是非常合适的,比如视频监控数据。
在这里插入图片描述
RAID-4
这种模式把每个数据块打散,然后均匀的分散到各个硬盘。另外还设置了专门的硬盘用来储存奇偶校验的数据。这种模式下,随机读取的性能非常好。但是随机写入的性能却不行。因为需要将所有奇偶校验的数据全部写到专门的硬盘里面。

在这里插入图片描述
RAID-5
这种模式把每个数据块打散,然后均匀分布到各个硬盘。与RAID-4不同的是,它将奇偶校验的数据均匀的分散到不同的硬盘。这样如果有一个硬盘坏掉了,丢失的数据可以从奇偶校验里面计算出来。

扫描二维码关注公众号,回复: 5708039 查看本文章

通常RAID-5的容量会损失1/3,用来储存奇偶校验信息。

这种模式兼顾了成本、性能,也是比较常用的一种模式。

在这里插入图片描述
RAID-6
这种模式与其他模式的区别在于,它支持两块硬盘同时损坏,并且仍然能够正常工作。它有这般神奇的能力,是因为它保存了两种奇偶校验。一种是普通的XOR方式,跟RAID-5一样。另外一种比较复杂,需要消耗比较多的CPU。这种奇偶校验方式在后面再讲。

在这里插入图片描述
3 dd工具使用场景
1)测试磁盘性能
测试环境:
逻辑CPU:12
内存:16GB
磁盘:7200转
文件系统:ext4

测试写入速度:
dd if=/dev/zero of=/fdfs1/daiyu/test1.dbf bs=8k count=400000 (默认"写缓存"启作用)

dd if=/dev/zero of=/fdfs1/daiyu/test2.dbf bs=8k count=400000 conv=fsync

dd if=/dev/zero of=/fdfs1/daiyu/test3.dbf bs=8k count=400000 conv=fdatasync

测试读取速度:
dd if=/fdfs1/daiyu/test1.dbf of=/dev/null
测试结果:
在这里插入图片描述
小结:由于是顺序写入,写入性能还是比较客观。
2)备份硬盘数据
Linux下使用dd命令备份硬盘
在这里插入图片描述
我们最近做的项目是和多方合作,系统依赖的很多程序和设置都来自第三方,系统的运行环境全都做在了一块硬盘里。从我们拿到这块硬盘起系统的运行就没有正常过。经过多日的调试,可以判断出是依赖的一些库和配置文件有错误,导致软件运行异常。多次协调对方也不愿意提供更多关于修复安装和配置的信息(当然可能他们也不知道)。项目开始时没有人留意,出了事故才发现,整个项目的开发过程中,能运行系统的环境竟然在唯一的一块硬盘上。简直是这辈子最苦逼的开发体验,所有人都很重视,所有领导都每天询问,各种高级工程师秒回你的邮件。但是…但是所有的细节都是秘密,所有问实现,问原理,求指导的问题都不正面回答,要求一个纯净的可用的硬盘也没人答复,所有人都等着你探索黑盒子里的秘密……

当然我是幸运的,最后通过其他途径找到一台还能运行的旧版设备,使用硬盘对拷的办法,在一块新的硬盘上克隆了全部运行环境,基于这个环境才搭起了系统。

系统备份和恢复工具选择很多,Windows下的各种一键复原,Mac os下的高大上的Time Machine,Linux下也有Clonezilla这样的全能选手。当然不求助第三方软件,最基本的linux dd 命令也能完成这些功能。这一次紧急情况下,正是这个在只有五寸屏的PowerPC Linux上也有的命令,救了大家一命。
dd命令
dd是Unix/Linux下转换和复制文件的命令,名字和用法都稍显怪异,据说来源于IBM的Job Control Language,意为Data Description。
dd命令秉承Unix哲学,专注文件复制和以及复制过程中的格式转换。但是类Unix操作系统下,万物皆文件,dd命令可以像对待普通文件一样,操作硬件的设备驱动和特殊设备文件等资源,这就赋予了dd命令各种不同的用途:驱动器性能测试,数据恢复,磁盘擦除,修复引导记录……

磁盘备份
使用fdisk 先查看磁盘分区,找到硬盘的位置。

1 sudo fdisk -u -l

我的情况是需要用一块硬盘完全克隆另一块,只需要指明输入输出的硬盘文件路径就可以了。

1 sudo dd if=/dev/sda of=/dev/sdb

也可以将磁盘备份到image文件。需要注意的是,dd命令是按照文件块操作,如果不指明块的大小和数量,dd命令会对全部硬盘进行复制,并不会跳过磁盘未使用的空间。一定要确保目标文件比原来的磁盘文件大。
1 sudo dd if=/dev/sda of=~/disk1.img
一般情况下,对image文件压缩是更有效的方法。大部分压缩算法会把空白部分完全压缩,只留下标记,对只使用了很少的磁盘文件,可以得到很好的压缩比。

1 sudo dd if=/dev/sda | gzip > disk.img.gz
2 sudo dd if=/dev/sda | bzip2 > disk.img.bz2
需要恢复时,一样的解压拷贝
1 gzip -dc /disk.img.gz | dd of=/dev/sda

显示dd进度
dd命令执行相当的耗时,我100G的硬盘大概用了2个小时,期间dd进程并不反馈任何信息,对用户来说是相当痛苦的等待。其实查看dd的help信息,可以发现如果dd进程收到SIGSUR1 signal,就会在console打印出dd的当前状态,help中也给出了示例的脚本。在这里插入图片描述
如果要定时更新状态,可以配合watch命令
在这里插入图片描述
每隔5秒钟打印dd的信息。

在这里插入图片描述
4 lvm的使用场景介绍 OSS 七牛
阿里云磁盘扩容文档 https://help.aliyun.com/document_detail/25452.html
5 parted分区gpt格式 http://www.apelearn.com/bbs/thread-7243-1-1.html
parted /dev/sdb
print
mklabel gpt 或者 msdos (msdos就是mbr)
mkfs aming1 0 2G //当使用mbr类型时,这里就不能写aming1了,得写primary/extended/logical
rm id

6 关于存储的常识
http://forum.huawei.com/enterprise/zh/thread-274145-1-1.html
https://blog.csdn.net/JesseYoung/article/details/38367217

猜你喜欢

转载自blog.csdn.net/weixin_43435379/article/details/88769720
今日推荐