-
创建一个10G分区,并格式为ext4文件系统;
-
要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;
-
挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳;
-
创建一个大小为1G的swap分区,并创建好文件系统,并启用之;
-
总结RAID的各个级别及其组合方式和性能的不同;
-
创建一个大小为10G的RAID1,要求有一个空闲盘,而且CHUNK大小为128k;
-
创建一个大小为4G的RAID5设备,chunk大小为256k,格式化ext4文件系统,要求可开机自动挂载至/backup目录,而且不更新访问时间戳,且支持acl功能;
第7周课程练习
添加一块硬盘sdb
# mke2fs -t ext4 -b 2048 -L 'MYDATA' -m 2
# mount -o acl /dev/sdb1/ /data/mydata/
# mount -o noexec,noatime /dev/sdb1/ /data/mydata/
# mkswap /dev/sdb2
# swapon /dev/sdb2
3、写一个脚本
(1)、获取并列出当前系统上的所有磁盘设备;
(2)、显示每个磁盘设备上每个分区相关的空间使用信息;
#!/bin/bash
#
echo "当前系统所有磁盘:"
fdisk -l | grep "^Disk[[:space:]]/dev"
echo "分区使用情况:"
fdisk -l | grep "^/dev/sd"
RAID全称为独立磁盘冗余阵列(Redundant Array of Independent Disks),基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵列组,使性能达到甚至超过一个价格昂贵、容量巨大的硬盘。RAID通常被用在服务器电脑上,使用完全相同的硬盘组成一个逻辑扇区,因此操作系统只会把它当做一个硬盘。RAID分为不同的等级,各个不同的等级均在数据可靠性及读写性能上做了不同的权衡。在实际应用中,可以依据自己的实际需求选择不同的RAID方案。
RAID0:RAID0称为条带化(Striping)存储,将数据分段存储于各个磁盘中,读写均可以并行处理。因此其读写速率为单个磁盘的N倍(N为组成RAID0的磁盘个数),但是却没有数据冗余,单个磁盘的损坏会导致数据的不可修复。
Raid1:镜像存储(mirroring),没有数据校验。数据被同等地写入两个或多个磁盘中,可想而知,写入速度会比较慢,但读取速度会比较快。读取速度可以接近所有磁盘吞吐量的总和,写入速度受限于最慢的磁盘。 RAID1也是磁盘利用率最低的一个。如果用两个不同大小的磁盘建立RAID1,可以用空间较小的那一个,较大的磁盘多出来的部分可以作他用,不会浪费。
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(比如视频流服务)的情况。
Raid3:类似于RAID2,数据条带化(stripe)存储于不同的硬盘,数据以字节为单位,只是RAID3使用单块磁盘存储简单的奇偶校验信息,所以最终磁盘数量为 N+1 。当这N+1个硬盘中的其中一个硬盘出现故障时, 从其它N个硬盘中的数据也可以恢复原始数据,当更换一个新硬盘后,系统可以重新恢复完整的校验容错信息。
由于在一个硬盘阵列中,多于一个硬盘同时出现故障率的几率很小,所以一般情况下,使用 RAID3,安全性是可以得到保障的。RAID 3会把数据的写入操作分散到多个磁盘上进行,不管是向哪一个数据盘写入数据, 都需要同时重写校验盘中的相关信息。因此,对于那些经常需要执行大量写入操作的应用来说,校验盘的负载将会很大,无法满足程序的运行速度,从而导致整个RAID系统性能的下降。鉴于这种原因,RAID 3更加适合应用于那些写入操作较少,读取操作较多的应用环境,例如数据库和WEB服务器等。
Raid4:与RAID3类似,但RAID4是按块(扇区)存取。无须像RAID3那样,哪怕每一次小I/O操作也要涉及全组,只需涉及组中两块硬盘(一块数据盘,一块校验盘)即可,从而提高了小量数据 I/O速度。
Raid5:奇偶校验(XOR),数据以块分段条带化存储。校验信息交叉地存储在所有的数据盘上。
RAID5把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上,其中任意N-1块磁盘上都存储完整的数据,也就是说有相当于一块磁盘容量的空间用于存储奇偶校验信息。因此当RAID5的一个磁盘发生损坏后,不会影响数据的完整性,从而保证了数据安全。当损坏的磁盘被替换后,RAID还会自动利用剩下奇偶校验信息去重建此磁盘上的数据,来保持RAID5的高可靠性。
RAID 5可以理解为是RAID 0和RAID 1的折衷方案。RAID 5可以为系统提供数据安全保障,但保障程度要比镜像低而磁盘空间利用率要比镜像高。RAID 5具有和RAID 0相近似的数据读取速度,只是因为多了一个奇偶校验信息,写入数据的速度相对单独写入一块硬盘的速度略慢。
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阵列可以失效两块以上的硬盘,保护力度更强,有些实现方法提供了多种级别的保护,甚至允许用户(或存储管理员)指定保护级别。
混合RAID
Raid01:是RAID0和RAID1的结合。先做条带(0),再做镜像(1)。
Raid10:是先做镜像(1),再做条带(0)
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块硬盘,最多只能坏一块硬盘。
JBOD:主要功能是将多块硬盘的空间合并成一个大的连续空间使用。
总结:
# mdadm -C /dev/md1 -n 2 -l 1 -c 128 -x 1 /dev/sdb1 /dev/sdb2 /dev/sdb3
# mdadm -C /dev/md2 -n 3 -l 5 -c 256 /dev/sdb5 /dev/sdb6 /dev/sdb7
# mkfs ext4 /dev/md2
# mkdir /backup
# vim /etc/fstab
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"
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"
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"
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"
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
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"
13、创建一个由至少两个物理卷组成的大小为20G的卷组;要求,PE大小为8M;而在卷组中创建一个大小为5G的逻辑卷mylv1,格式化为ext4文件系统,开机自动挂载至/users目录,支持acl;
使用/dev/sdb8和/dev/sdc1
# pvcreate /dev/sdb8
# pvcreate /dev/sdc1
# vgcreate -s 8m myvg /dev/sdb8 /dev/sdc1
# lvcreate -L 5g -n mylv1 myvg
# mkfs.ext4 /dev/myvg/mylv1
# echo "/dev/myvg/mylv1 /users ext4 defaults,acl 0 0" >> /etc/fstab
14、新建用户magedu;其家目录为/users/magedu,而后su切换至此用户,复制多个文件至家目录;
# mkdir -p /users/magedu
# useradd -d /users/magedu magedu
# cp -rf /etc/skel/. /users/magedu/
15、扩展mylv1至9G,确保扩展完成后原有数据完全可用;
# lvextend -L +9G /dev/myvg/mylv1
# resize2fs /dev/myvg/mylv1
16、缩减mylv1至7G,确保缩减完成后原有数据完全可用;
# lvreduce -L 7G /dev/myvg/mylv1
# resize2fs /dev/myvg/mylv1
17、对mylv1创建快照,并通过备份数据;要求保留原有的属主属组等信息;
# lvcreate -L 5G -p r -s -n mylv1_snapshot /dev/myvg/mylv1
原创文章,作者:N21_我爱罗,如若转载,请注明出处:http://www.178linux.com/49451
评论列表(1条)
对脚本下次格式化一下会更好,操作过程可以截图,但总结最好自己来写