马哥教育网络班21期-第7周课程练习

    7周课程练习

    1. 创建一个10G分区,并格式为ext4文件系统;

    添加一块硬盘sdb

    blob.png

    1. 要求其block大小为2048,       预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;

    # mke2fs -t ext4 -b 2048 -L 'MYDATA' -m 2

    blob.png

    # mount -o acl /dev/sdb1/ /data/mydata/

    blob.png

    1. 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳;

    # mount -o noexec,noatime /dev/sdb1/ /data/mydata/

    blob.png

    1. 创建一个大小为1G的swap分区,并创建好文件系统,并启用之;

    blob.png

     

    blob.png

    # mkswap /dev/sdb2

    # swapon /dev/sdb2

    blob.png

    blob.png

    3、写一个脚本

        (1)、获取并列出当前系统上的所有磁盘设备;

        (2)、显示每个磁盘设备上每个分区相关的空间使用信息;

    #!/bin/bash

    #

    echo "当前系统所有磁盘:"

    fdisk -l | grep "^Disk[[:space:]]/dev"

    echo "分区使用情况:"

    fdisk -l | grep "^/dev/sd"   

    blob.png

    1. 总结RAID的各个级别及其组合方式和性能的不同;

    RAID全称为独立磁盘冗余阵列(Redundant Array of Independent  Disks),基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵列组,使性能达到甚至超过一个价格昂贵、容量巨大的硬盘。RAID通常被用在服务器电脑上,使用完全相同的硬盘组成一个逻辑扇区,因此操作系统只会把它当做一个硬盘。RAID分为不同的等级,各个不同的等级均在数据可靠性及读写性能上做了不同的权衡。在实际应用中,可以依据自己的实际需求选择不同的RAID方案。

    RAID0:RAID0称为条带化(Striping)存储,将数据分段存储于各个磁盘中,读写均可以并行处理。因此其读写速率为单个磁盘的N倍(N为组成RAID0的磁盘个数),但是却没有数据冗余,单个磁盘的损坏会导致数据的不可修复。

    blob.png

    Raid1:镜像存储(mirroring),没有数据校验。数据被同等地写入两个或多个磁盘中,可想而知,写入速度会比较慢,但读取速度会比较快。读取速度可以接近所有磁盘吞吐量的总和,写入速度受限于最慢的磁盘。  RAID1也是磁盘利用率最低的一个。如果用两个不同大小的磁盘建立RAID1,可以用空间较小的那一个,较大的磁盘多出来的部分可以作他用,不会浪费。

    blob.png

    Raid2:RAID0的改良版,加入了汉明码(Hanmming  Code)错误校验。汉明码能够检测最多两个同时发生的比特错误,并且能够更正单一比特的错误。汉明码的位数与数据的位数有一个不等式关系,即:

    1    2^P ≥ P + D +1

    P代表汉明码的个数,D代表数据位的个数,比如4位数据需要3位汉明码,7位数据需要4位汉明码,64位数据时就需要7位汉明码。RAID2是按1bit来分割数据写入的,而P:D就代表了数据盘与校验盘的个数。所以如果数据位宽越大,用于校验的盘的比例就越小。由于汉明码能够纠正单一比特的错误,所以当单个磁盘损坏时,汉明码便能够纠正数据。

    RAID 2  因为每次读写都需要全组磁盘联动,所以为了最大化其性能,最好保证每块磁盘主轴同步,使同一时刻每块磁盘磁头所处的扇区逻辑编号都一致,并存并取,达到最佳性能。如果不能同步,则会产生等待,影响速度。

    与RAID0相比,RAID2的传输率更好。因为RAID0一般stripe  size相对于RAID2的1bit来说实在太大,并不能保证每次都是多磁盘并行。而RAID2每次IO都能保证是多磁盘并行,为了发挥这个优势,磁盘的寻道时间一定要减少(寻道时间比数据传输时间要大几个数量级),所以RAID2适合于连续IO,大块IO(比如视频流服务)的情况。

    blob.png

    Raid3:类似于RAID2,数据条带化(stripe)存储于不同的硬盘,数据以字节为单位,只是RAID3使用单块磁盘存储简单的奇偶校验信息,所以最终磁盘数量为  N+1 。当这N+1个硬盘中的其中一个硬盘出现故障时, 从其它N个硬盘中的数据也可以恢复原始数据,当更换一个新硬盘后,系统可以重新恢复完整的校验容错信息。

    由于在一个硬盘阵列中,多于一个硬盘同时出现故障率的几率很小,所以一般情况下,使用  RAID3,安全性是可以得到保障的。RAID 3会把数据的写入操作分散到多个磁盘上进行,不管是向哪一个数据盘写入数据,  都需要同时重写校验盘中的相关信息。因此,对于那些经常需要执行大量写入操作的应用来说,校验盘的负载将会很大,无法满足程序的运行速度,从而导致整个RAID系统性能的下降。鉴于这种原因,RAID  3更加适合应用于那些写入操作较少,读取操作较多的应用环境,例如数据库和WEB服务器等。

    blob.png

    Raid4:与RAID3类似,但RAID4是按块(扇区)存取。无须像RAID3那样,哪怕每一次小I/O操作也要涉及全组,只需涉及组中两块硬盘(一块数据盘,一块校验盘)即可,从而提高了小量数据  I/O速度。

    blob.png

    Raid5:奇偶校验(XOR),数据以块分段条带化存储。校验信息交叉地存储在所有的数据盘上。

    RAID5把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上,其中任意N-1块磁盘上都存储完整的数据,也就是说有相当于一块磁盘容量的空间用于存储奇偶校验信息。因此当RAID5的一个磁盘发生损坏后,不会影响数据的完整性,从而保证了数据安全。当损坏的磁盘被替换后,RAID还会自动利用剩下奇偶校验信息去重建此磁盘上的数据,来保持RAID5的高可靠性。

    RAID 5可以理解为是RAID 0和RAID 1的折衷方案。RAID  5可以为系统提供数据安全保障,但保障程度要比镜像低而磁盘空间利用率要比镜像高。RAID 5具有和RAID  0相近似的数据读取速度,只是因为多了一个奇偶校验信息,写入数据的速度相对单独写入一块硬盘的速度略慢。

    blob.png

    Raid6:类似RAID5,但是增加了第二个独立的奇偶校验信息块,两个独立的奇偶系统使用不同的算法,数据的可靠性非常高,即使两块磁盘同时失效也不会影响数据的使用。但RAID  6需要分配给奇偶校验信息更大的磁盘空间,相对于RAID 5有更大的“写损失”,因此“写性能”非常差。

    每个硬盘上除了都有同级数据XOR校验区外,还有一个针对每个数据块的XOR校验区。当然,当前盘数据块的校验数据不可能存在当前盘而是交错存储的。从数学角度来说,RAID  5使用一个方程式解出一个未知变量,而RAID 6则能通过两个独立的线性方程构成方程组,从而恢复两个未知数据。

    伴随着硬盘容量的增长,RAID6已经变得越来越重要。TB级别的硬盘上更容易造成数据丢失,数据重建过程(比如RAID5,只允许一块硬盘损坏)也越来越长,甚至到数周,这是完全不可接受的。而RAID6允许两块硬盘同时发生故障,所以渐渐受到人们的青睐。

    伴随CD,DVD和蓝光光盘的问世,存储介质出现了擦除码技术,即使媒介表面出现划痕,仍然可以播放,大多数常见的擦除码算法已经演变为上世纪60年代麻省理工学院林肯实验室开发的Reed-Solomon码。实际情况中,多RAID6实现都采用了标准的RAID5教校验比特和Reed-Solomon码  。而纯擦除码算法的使用使得RAID6阵列可以失效两块以上的硬盘,保护力度更强,有些实现方法提供了多种级别的保护,甚至允许用户(或存储管理员)指定保护级别。

    blob.png

    混合RAID

    Raid01:是RAID0和RAID1的结合。先做条带(0),再做镜像(1)。

    blob.png

    Raid10:是先做镜像(1),再做条带(0)

    blob.png

    RAID01和RAID10非常相似,二者在读写性能上没有什么差别。但是在安全性上RAID10要好于  RAID01。假设DISK0损坏,在RAID10中,在剩下的3块盘中,只有当DISK1故障,  整个RAID才会失效。但在RAID01中,DISK0损坏后,左边的条带将无法读取,在剩下的3快盘中,只要DISK2或DISK3两个盘中任何一个损坏,都会导致RAID失效。

    RAID10和RAID5也是经常用来比较的两种方案,二者都在生产实践中得到了广泛的应用。  RAID10安全性更高,但是空间利用率低。至于读写性能,与cache有很大关联,最好根据实 际情况测试比较选择。

    Raid50:RAID 5与RAID  0的组合,先作RAID 5,再作RAID 0。至少需要6块硬盘,最多只能坏一块硬盘。

    blob.png

    JBOD:主要功能是将多块硬盘的空间合并成一个大的连续空间使用。

    blob.png

    总结:

    blob.png

    1. 创建一个大小为10G的RAID1,要求有一个空闲盘,而且CHUNK大小为128k;

    # mdadm -C /dev/md1 -n 2 -l 1 -c 128 -x 1 /dev/sdb1 /dev/sdb2  /dev/sdb3

    blob.png

    blob.png

     

    1. 创建一个大小为4G的RAID5设备,chunk大小为256k,格式化ext4文件系统,要求可开机自动挂载至/backup目录,而且不更新访问时间戳,且支持acl功能;

    # mdadm -C /dev/md2 -n 3 -l 5 -c 256 /dev/sdb5 /dev/sdb6 /dev/sdb7

    blob.png

    blob.png

    # mkfs ext4 /dev/md2

    blob.png

    # mkdir /backup

    # vim /etc/fstab

    blob.png

     

    7、写一个脚本

       (1)  接受一个以上文件路径作为参数;

       (2)  显示每个文件拥有的行数;

       (3)  总结说明本次共为几个文件统计了其行数;

    #!/bin/bash

    #

    declare -i i=0

    for file in $*; do

                   if [ -f $file ]; then

                   echo "$file line  number:$(wc -l $file | cut -d" " -f1)"

    let i++

                else

                    echo "please input  correct file path"

                fi

    done

    echo "Totle file count=$i"

    blob.png

    8、写一个脚本

       (1)  传递两个以上字符串当作用户名;

       (2)  创建这些用户;且密码同用户名;

       (3)  总结说明共创建了几个用户;

    #!/bin/bash

    #

    declare -i i=0

    if [ $# -lt 2 ];then

                echo "please input at least  two words!"

                exit 99

    fi

    for username in $@;do

                id $username &> /dev/null

                if [ $? -eq 0 ];then

                    echo "$username is  exist!"

               else

                    useradd $username

                    echo "$username" |  passwd –stdin $username &> /dev/null

                    let i++

            fi

    done

    echo "count:$i"

    blob.png

    9、写一个脚本,新建20个用户,visitor1-visitor20;计算他们的ID之和;

    #!/bin/bash

    #

    declare -i i=0

    for i in {1..20};do

                    useradd visitor$i

                     echo "add visitor$i  success!"

                     sum+=(id -u visitor$i)

    done

    echo "sum ID:$sum"

    blob.png

    10、写一脚本,分别统计/etc/rc.d/rc.sysinit、/etc/rc.d/init.d/functions和/etc/fstab文件中以#号开头的行数之和,以及总的空白行数;

    #!/bin/bash

    #

    declare -i sum1=0

    declare -i sum2=0

    for i in /etc/{rc.d/{rc.sysinit,init.d/functions},fstab}

    do

                   sum1+=$( grep "^#" $i  | wc -l )

                   sum2+=$( grep "^$" $i  | wc -l )

    done

    echo "begin with # line:$sum1"

    echo "space line:$sum2"

    blob.png

    11、写一个脚本,显示当前系统上所有默认shell为bash的用户的用户名、UID以及此类所有用户的UID之和;

    #!/bin/bash

    #

    declare -i sum=0

    declare -i i=0

    cat /etc/passwd | grep "/bin/bash$" | cut -d':' -f1,3

    for i in $(cat /etc/passwd | grep "/bin/bash$" | cut  -d':' -f3)

    do

                   let sum+=$i

    done

    echo "UID sum is:$sum

    blob.png

    12、写一个脚本,显示当前系统上所有,拥有附加组的用户的用户名;并说明共有多少个此类用户;

    #!/bin/bash

    #

    declare -i sum=0

    for i in $(cat /etc/passwd | cut -d':' -f1)

    do

                   id $i | cut -d' ' -f3 | grep  "," &> /dev/null

                   if [ $? -eq 0 ];then

                          echo $i

                          let sum++

                   fi

    done

    echo "total user:$sum"

    blob.png

    13、创建一个由至少两个物理卷组成的大小为20G的卷组;要求,PE大小为8M;而在卷组中创建一个大小为5G的逻辑卷mylv1,格式化为ext4文件系统,开机自动挂载至/users目录,支持acl;

    使用/dev/sdb8和/dev/sdc1

    blob.png

    blob.png

    # pvcreate /dev/sdb8

    # pvcreate /dev/sdc1

    blob.png

    # vgcreate -s 8m myvg /dev/sdb8 /dev/sdc1

    blob.png

    # lvcreate -L 5g -n mylv1 myvg

    blob.png

    # mkfs.ext4 /dev/myvg/mylv1

    blob.png

    # echo "/dev/myvg/mylv1   /users  ext4  defaults,acl 0 0" >> /etc/fstab

    blob.png

    14、新建用户magedu;其家目录为/users/magedu,而后su切换至此用户,复制多个文件至家目录;

    # mkdir -p /users/magedu

    # useradd -d /users/magedu magedu

    blob.png

    # cp -rf /etc/skel/. /users/magedu/

    15、扩展mylv1至9G,确保扩展完成后原有数据完全可用;

    # lvextend -L +9G /dev/myvg/mylv1

    # resize2fs /dev/myvg/mylv1

    blob.png

    16、缩减mylv1至7G,确保缩减完成后原有数据完全可用;

    # lvreduce -L 7G /dev/myvg/mylv1

    # resize2fs /dev/myvg/mylv1

    blob.png

    17、对mylv1创建快照,并通过备份数据;要求保留原有的属主属组等信息;

    # lvcreate -L 5G -p r -s -n mylv1_snapshot /dev/myvg/mylv1

    blob.png

原创文章,作者:N21_我爱罗,如若转载,请注明出处:http://www.178linux.com/49451

评论列表(1条)

  • 马哥教育
    马哥教育 2016-10-25 12:39

    对脚本下次格式化一下会更好,操作过程可以截图,但总结最好自己来写