什么是RAID

RAID:Redundant Arrays of Inexpensive Disks

 即:廉价磁盘冗余阵列

Redundant Arrays of Independent Disks

 独立磁盘冗余阵列

  1988年由加利福尼亚大学伯克利分校(University of California-Berkeley)提出的“A Case for Redundant Arrays of Inexpensive Disks”。旨在将多个相对廉价的IDE接口的磁盘合成一个“阵列”来提供更好的IO性能、实现磁盘冗余,或者两者都提供。

RAID-0:

读、写性能提升;

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

无容错能力

最少磁盘数:2, 2

RAID-1:

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

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

有冗余能力

最少磁盘数:2, 2+

RAID-4:

多块数据盘异或运算值,存于专用校验盘

坏了一块硬盘仍然可以继续工作的模式称为降级模式

校验盘压力最大,很容易形成性能瓶颈;

RAID-5:

读、写性能提升

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

有容错能力:允许最多1块磁盘损坏

最少磁盘数:3, 3+

RAID-6:

读、写性能提升

可用空间:(N-2)*min(S1,S2,...)

有容错能力:允许最多2块磁盘损坏

最少磁盘数:4, 4+

RAID混合类型级别

RAID-10:

读、写性能提升

可用空间:N*min(S1,S2,...)/2

有容错能力:每组镜像最多只能坏一块

最少磁盘数:4, 4+

RAID-01、RAID-50

RAID7:可以理解为一个独立存储计算机,自身带有操作系统和管理工具,可以独立运行,理论上性能最高的RAID模式

 JBOD:Just a Bunch Of Disks

功能:将多块磁盘的空间合并一个大的连续空间使用

可用空间:sum(S1,S2,...)

常用级别:RAID-0, RAID-1, RAID-5, RAID-10, RAID-50, JBOD

mdadm的管理模式 

  -f:为指定的磁盘或分区添加损坏标记

  -a:添加磁盘或分区到md设备中

 -r:从md设备中移除磁盘或分区

lvextend:扩展逻辑卷的空间,

 注意:一定要先扩展逻辑卷的物理边界,再扩展逻辑卷的逻辑边界;

 使用ext系列文件系统的时候,resize2fs命令扩展逻辑边界;

扩大逻辑卷的物理边界:

  lvextend -L [+]SIZE /PATH/TO/LVM

  如果SIZE有+:表示在原有逻辑卷容量的基础上,增加SIZE空间

  如果SIZE无+:表示将逻辑卷的容量扩大到SIZE空间

扩大逻辑卷的逻辑边界:

   e2fsck /PATH/TO/LVM

   resize2fs [-f] /PATH/TO/LVM

lvreduce:缩减逻辑卷的空间

注意:先缩减逻辑卷的逻辑边界,再缩减逻辑卷的物理边界;

使用ext系列文件系统的时候,resize2fs命令缩减逻辑边界

lvreduce -L [-]SIZE /PATH/TO/LVM

如果SIZE有-:表示在原有逻辑卷容量的基础上,削减SIZE空间

如果SIZE无-:表示将逻辑卷的容量直接削减至SIZE空间

umount /PATH/TO/LVM

  e2fsck /PATH/TO/LVM            //强制校验数据一致性

  resize2fs -f /PATH/TO/LVM LV_SiZE //修改逻辑卷的逻辑边界,LV_SIZE为调整后的逻辑卷大小

 lvchange -an /PATH/TO/LVM      //关闭逻辑卷

 lvreduce -L [+]SIZE /PATH/TO/LVM  //修改逻辑卷的物理边界,大小要和逻辑边界保持一致

 lvchange -ay /PATH/TO/LVM      //重新激活逻辑卷

 mount /PATH/TO/LVM /PATH/TO/LVM_MOUNT_POINT

快照是特殊的逻辑卷,它是在生成快照时存在的逻辑卷的准确拷贝

 对于需要备份或者复制的现有数据集临时拷贝以及其它操作来说,快照是最合适的选择。

 快照只有在它们和原来的逻辑卷不同时才会消耗空间。

 在生成快照时会分配给它一定的空间,但只有在原来的逻辑卷或者快照有所改变才会使用这些空间

 当原来的逻辑卷中有所改变时,会将旧的数据复制到快照中。

 快照中只含有原来的逻辑卷中更改的数据或者自生成快照后的快照中更改的数据,也可以使用lvextend扩展快照卷。

 快照就是将当时的系统信息记录下来,就好像照相一般,若将来有任何数据改动了,则原始数据会被移动到快照区,没有改动的区域则由快照区和文件系统共享。

 由于快照区与原本的LV共用很多PE的区块,因此快照去与被快照的LV必须要要在同一个VG上!系统恢复的时候的文件数量不能高于快照区的实际容量。

快照逻辑卷

  lvcreate -L SNAPSHOT_SIZE -s -p r -n SNAPSHOT_NAME /PATH/TO/ORIGIN_LVM

    -L SIZE:指定快照逻辑卷的大小

    -s:创建一个快照逻辑卷

    -p r:创建处理的逻辑卷是只读权限

    -n SNAPSHOT_NAME:指定快照逻辑卷的名称

三个命令:

 df命令:

 df - report file system disk space usage

 df [OPTION]... [FILE]...

 -h, --human-readble:单位转换

 -l, --local:只显示本地文件系统,不显示网络文件系统

 -i, --inodes:显示inode使用状态

 -T, --print-type:显示文件系统类型

 -P, --portability:使用POSIX输出格式,更易于阅读

du命令:

 du - estimate file space usage

 du [OPTION]... [FILE]...

 -s, sumary,:显示整个目录汇总的文件大小

 -h, human-readble:单位转换

dd命令:convert and copy a file

  dd [OPERAND]...

   dd OPTION

 常见的OPERAND:

   dd if=/PATH/FROM/SRC of=/PATH/TO/DEST

   bs=BYTES:block size, 复制单元大小

  count=N:复制多少个bs

  of=FILE:写到所命名的文件而不是到标准输出

  if=FILE:从所命名文件读取而不是从标准输入

  ibs=BYTES:一次读size个byte

  obs=BYTES:一次写size个byte

  skip=BLOCKS:从开头忽略blocks个ibs大小的块

  seek=BLOCKS:从开头忽略blocks个obs大小的块

  conv=conversion[,conversion...]:用指定的参数转换文件。

 转换参数:

  ascii:转换EBCDIC为ASCII。

  ebcdic:转换ASCII为EBCDIC。

 block:把每一行转换为长度为cbs的记录,不足部分用空格填充。

 unblock:使每一行的长度都为cbs,不足部分用空格填充。

 lcase:把大写字符转换为小写字符。

 ucase:把小写字符转换为大写字符。

 swab:交换输入的每对字节。

 noerror:读取出错时继续读取。

 notrunc:不截短输出文件。

 sync:把每个输入块填充到ibs个字节,不足部分用空(NULL)字符补齐

磁盘拷贝:

~]# dd if=/dev/sda of=/dev/sdb

备份MBR:

~]# dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1

破坏MBR中的bootloader:

~]# dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446

 有二进制文件fileA,size>2K。现在想从第64个字节位置开始读取,需要读取的大小是128Byts。又有fileB, 想把上面读取到的128Bytes写到第32个字节开始的位置,替换128Bytes,请问如何实现?

~]# dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc

备份:

将本地的/dev/sdx整盘备份到/dev/sdy

~]# dd if=/dev/sdx of=/dev/sdy将本地的/dev/sdx整盘备份到/dev/sdy

将/dev/sdx全盘数据备份到指定路径的p_w_picpath文件

~]# dd if=/dev/sdx of=/path/to/p_w_picpath

备份/dev/sdx全盘数据,并利用gzip工具进行压缩,保存到指定路径

~]# dd if=/dev/sdx | gzip >/path/to/p_w_picpath.gz

恢复:

将备份文件恢复到指定盘

~]# dd if=/path/to/p_w_picpath of=/dev/sdx

将压缩的备份文件恢复到指定盘

~]# gzip -dc /path/to/p_w_picpath.gz | dd of=/dev/sdx

拷贝内存资料到硬盘

将内存里的数据拷贝到root目录下的mem.bin文件

~]# dd if=/dev/mem of=/root/mem.bin bs=1024

从光盘拷贝iso镜像

拷贝光盘数据到root文件夹下,并保存为cd.iso文件

~]# dd if=/dev/cdrom of=/root/cd.iso

销毁磁盘数据

利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。执行此操作以后,/dev/sda1将无法挂载,创建和拷贝操作无法执行。

~]# dd if=/dev/urandom of=/dev/sda1

得到最恰当的block size

通过比较dd指令输出中所显示的命令执行时间,即可确定系统最佳的block size大小

~]# dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file

~]# dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file

~]# dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file

~]# dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file

测试硬盘读写速度

通过上两个命令输出的执行时间,可以计算出测试硬盘的读/写速度

~]# dd if=/root/1Gb.file bs=64k | dd of=/dev/null

~]# dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000

修复硬盘

当硬盘较长时间(比如1,2年)放置不使用后,磁盘上会产生消磁点。当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数据起死回生。且这个过程是安全,高效的。

~]# dd if=/dev/sda of=/dev/sda