4、总结RAID的各个级别及其组合方式和性能的不同;
RAID:RedundantArrays of Independent Disks(磁盘阵列),有“独立磁盘构成的具有冗余能力的阵列”之意。
级别:RAID 0,RAID 1,RAID 10,RAID 01,RAID 5等
RAID 0:连续以位或字节为单位分割数据,同时读/写于多个磁盘上,因此具有很高的数据传输率,但它没有数据冗余,因此并不能算是真正的RAID结构。
RAID 0只是单纯地提高性能,并没有为数据的可靠性提供保证,它的最大优点就是可以整倍的提高硬盘的容量。(如使用了三块80GB的硬盘组建成RAID 0模式,那么磁盘容量就会是240GB)。其速度方面,各单独一块硬盘的速度完全相同。最大的缺点在于任何一块硬盘出现故障,将影响到所有数据,可靠性仅为单独一块硬盘的1/N。
RAID 0不能应用于数据安全性要求高的场合。一般适用于有较高IO,但数据不是很重要的场景,类似缓存一类的场景;
RAID 1:又称为磁盘镜像,原理是把一个磁盘的数据镜像到另一个磁盘上,也就是说数据在写入一块磁盘的同时,会在另一块闲置的磁盘上生成镜像文件,在不影响性能情况下最大限度的保证系统的可靠性和可修复性上,只要系统中任何一对镜像盘中至少有一块磁盘可以使用,甚至可以在一半数量的硬盘出现问题时系统都可以正常运行,当一块硬盘失效时,系统会忽略该硬盘,转而使用剩余的镜像盘读写数据,具备很好的磁盘冗余能力。
虽然这样对数据来讲绝对安全,但是成本也会明显增加,磁盘利用率为50%(以四块80GB容量的硬盘来讲,可利用的磁盘空间仅为160GB)。
另外,出现硬盘故障的RAID1系统不再可靠,应当及时的更换损坏的硬盘,否则剩余的镜像盘也出现问题,那么整个系统就会崩溃。更换新盘后原有数据会需要很长时间同步镜像,外界对数据的访问不会受到影响,只是这时整个系统的性能有所下降。因此,RAID 1多用在保存关键性的重要数据的场合。
RAID0+1:名称上我们便可以看出是RAID0与RAID1的结合体。在我们单独使用RAID 1也会出现类似单独使用RAID 0那样的问题,即在同一时间内只能向一块磁盘写入数据,不能充分利用所有的资源。为了解决这一问题,我们可以在磁盘镜像中建立带区集。因为这种配置方式综合了带区集和镜像的优势,所以被称为RAID 0+1。
把RAID0和RAID1技术结合起来,数据除分布在多个盘上外,每个盘都有其物理镜像盘,提供全冗余能力,允许一个以下磁盘故障,而不影响数据可用性,并具有快速读/写能力。RAID0+1要在磁盘镜像中建立带区集至少4个硬盘。
它的优点是同时拥有RAID 0的超凡速度和RAID 1的数据高可靠性,但是CPU占用率同样也更高,而且磁盘的利用率比较低。
RAID 1+0是先镜射再分区数据,再将所有硬盘分为两组,视为是RAID 0的最低组合,然后将这两组各自视为RAID 1运作。RAID 0+1则是跟RAID 1+0的程序相反,是先分区再将数据镜射到两组硬盘。它将所有的硬盘分为两组,变成RAID 1的最低组合,而将两组硬盘各自视为RAID 0运作。
性能上,RAID 0+1比RAID 1+0有着更快的读写速度。可靠性上,当RAID 1+0有一个硬盘受损,其余三个硬盘会继续运作。RAID 0+1 只要有一个硬盘受损,同组RAID 0的另一只硬盘亦会停止运作,只剩下两个硬盘运作,可靠性较低。因此,RAID 10远较RAID 01常用,零售主板绝大部份支持RAID 0/1/5/10,但不支持RAID 01。
RAID 5:分布式奇偶校验的磁盘结构,不单独指定的奇偶盘,而是在所有磁盘上交叉地存取数据及奇偶校验信息。在RAID 5上,读/写指针可同时对阵列设备进行操作,提供了更高的数据流量。RAID 5更适合于小数据块和随机读写的数据。在RAID 5中有“写损失”,即每一次写操作将产生四个实际的读/写操作,其中两次读旧的数据及奇偶信息,两次写新的数据及奇偶信息。 这是目前用的比较多的阵列方式,3块磁盘,损坏一块仍能保证数据完整性,同时又有较高的磁盘利用率。属于物美价廉型。
5、创建一个大小为10G的RAID1,要求有一个空闲盘,而且CHUNK大小为128k;
[[email protected] ~]# fdisk -l
磁盘 /dev/sdb:42.9 GB, 42949672960 字节,83886080 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/sda:128.8 GB, 128849018880 字节,251658240 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000aaf3f
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 4196351 2097152 83 Linux
/dev/sda2 4196352 96479231 46141440 8e Linux LVM
磁盘 /dev/mapper/cl-root:42.9 GB, 42945478656 字节,83877888 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/mapper/cl-swap:4294 MB, 4294967296 字节,8388608 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
[[email protected] ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x83c00ca3 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):1
起始扇区 (2048-83886079,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-83886079,默认为 83886079):+10G
分区 1 已设置为 Linux 类型,大小设为 10 GiB
命令(输入 m 获取帮助):n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
分区号 (2-4,默认 2):2
起始扇区 (20973568-83886079,默认为 20973568):
将使用默认值 20973568
Last 扇区, +扇区 or +size{K,M,G} (20973568-83886079,默认为 83886079):+10G
分区 2 已设置为 Linux 类型,大小设为 10 GiB
命令(输入 m 获取帮助):n
Partition type:
p primary (2 primary, 0 extended, 2 free)
e extended
Select (default p): p
分区号 (3,4,默认 3):3
起始扇区 (41945088-83886079,默认为 41945088):
将使用默认值 41945088
Last 扇区, +扇区 or +size{K,M,G} (41945088-83886079,默认为 83886079):+10G
分区 3 已设置为 Linux 类型,大小设为 10 GiB
命令(输入 m 获取帮助):t
分区号 (1-3,默认 3):1
Hex 代码(输入 L 列出所有代码):fd
已将分区“Linux”的类型更改为“Linux raid autodetect”
命令(输入 m 获取帮助):t
分区号 (1-3,默认 3):2
Hex 代码(输入 L 列出所有代码):fd
已将分区“Linux”的类型更改为“Linux raid autodetect”
命令(输入 m 获取帮助):t
分区号 (1-3,默认 3):3
Hex 代码(输入 L 列出所有代码):fd
已将分区“Linux”的类型更改为“Linux raid autodetect”
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:42.9 GB, 42949672960 字节,83886080 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x83c00ca3
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 20973567 10485760 fd Linux raid autodetect
/dev/sdb2 20973568 41945087 10485760 fd Linux raid autodetect
/dev/sdb3 41945088 62916607 10485760 fd Linux raid autodetect
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[[email protected] ~]# partx -a /dev/sdb
partx: /dev/sdb: error adding partitions 1-3
[[email protected] ~]# mdadm -C /dev/md0 -a yes -c 128 -n 2 -x 1 -l 1 /dev/sdb{1,2,3}
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store ‘/boot‘ on this device please ensure that
your boot-loader understands md/v1.x metadata, or use
--metadata=0.90
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
[[email protected] ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Wed Feb 1 15:22:11 2017
Raid Level : raid1
Array Size : 10477568 (9.99 GiB 10.73 GB)
Used Dev Size : 10477568 (9.99 GiB 10.73 GB)
Raid Devices : 2
Total Devices : 3
Persistence : Superblock is persistent
Update Time : Wed Feb 1 15:22:43 2017
State : clean, resyncing
Active Devices : 2
Working Devices : 3
Failed Devices : 0
Spare Devices : 1
Resync Status : 64% complete
Name : wangyafei:0 (local to host wangyafei)
UUID : cf8d148c:c9ac1ea0:799fced4:61f9caac
Events : 10
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 18 1 active sync /dev/sdb2
2 8 19 - spare /dev/sdb3
[[email protected] ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb3[2](S) sdb2[1] sdb1[0]
10477568 blocks super 1.2 [2/2] [UU]
unused devices: <none>
6、创建一个大小为4G的RAID5设备,chunk大小为256k,格式化ext4文件系统,要求可开机自动挂载至/backup目录,而且不更新访问时间戳,且支持acl功能;
[[email protected] ~]# fdisk /dev/sdb欢迎使用 fdisk (util-linux 2.23.2)。 更改将停留在内存中,直到您决定将更改写入磁盘。使用写入命令前请三思。 Device does not contain a recognized partition table使用磁盘标识符 0xc6a0e865 创建新的 DOS 磁盘标签。 命令(输入 m 获取帮助):nPartition type: p primary (0 primary, 0 extended, 4 free) e extendedSelect (default p): p分区号 (1-4,默认 1):起始扇区 (2048-41943039,默认为 2048):将使用默认值 2048Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+4G分区 1 已设置为 Linux 类型,大小设为 4 GiB 命令(输入 m 获取帮助):nPartition type: p primary (1 primary, 0 extended, 3 free) e extendedSelect (default p): p分区号 (2-4,默认 2):起始扇区 (8390656-41943039,默认为 8390656):将使用默认值 8390656Last 扇区, +扇区 or +size{K,M,G} (8390656-41943039,默认为 41943039):+4G分区 2 已设置为 Linux 类型,大小设为 4 GiB 命令(输入 m 获取帮助):nPartition type: p primary (2 primary, 0 extended, 2 free) e extendedSelect (default p): p分区号 (3,4,默认 3):起始扇区 (16779264-41943039,默认为 16779264):将使用默认值 16779264Last 扇区, +扇区 or +size{K,M,G} (16779264-41943039,默认为 41943039):+4G分区 3 已设置为 Linux 类型,大小设为 4 GiB 命令(输入 m 获取帮助):t分区号 (1-3,默认 3):1Hex 代码(输入 L 列出所有代码):fd已将分区“Linux”的类型更改为“Linux raid autodetect” 命令(输入 m 获取帮助):t分区号 (1-3,默认 3):2Hex 代码(输入 L 列出所有代码):fd已将分区“Linux”的类型更改为“Linux raid autodetect” 命令(输入 m 获取帮助):t分区号 (1-3,默认 3):3Hex 代码(输入 L 列出所有代码):fd已将分区“Linux”的类型更改为“Linux raid autodetect” 命令(输入 m 获取帮助):p 磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区Units = 扇区 of 1 * 512 = 512 bytes扇区大小(逻辑/物理):512 字节 / 512 字节I/O 大小(最小/最佳):512 字节 / 512 字节磁盘标签类型:dos磁盘标识符:0xc6a0e865 设备 Boot Start End Blocks Id System/dev/sdb1 2048 8390655 4194304 fd Linux raid autodetect/dev/sdb2 8390656 16779263 4194304 fd Linux raid autodetect/dev/sdb3 16779264 25167871 4194304 fd Linux raid autodetect 命令(输入 m 获取帮助):wThe partition table has been altered! Calling ioctl() to re-read partition table.正在同步磁盘。[[email protected] ~]# partx -a /dev/sdbpartx: /dev/sdb: error adding partitions 1-3[[email protected] ~]# mdadm -C /dev/md0 -a yes -c 256 -n 3 -l 5 /dev/sdb{1,2,3}mdadm: Defaulting to version 1.2 metadatamdadm: array /dev/md0 started.[[email protected] ~]# mdadm -D /dev/md0/dev/md0: Version : 1.2 Creation Time : Wed Feb 1 15:59:10 2017 Raid Level : raid5 Array Size : 8380416 (7.99 GiB 8.58 GB) Used Dev Size : 4190208 (4.00 GiB 4.29 GB) Raid Devices : 3 Total Devices : 3 Persistence : Superblock is persistent Update Time : Wed Feb 1 15:59:29 2017 State : clean, degraded, recovering Active Devices : 2Working Devices : 3 Failed Devices : 0 Spare Devices : 1 Layout : left-symmetric Chunk Size : 256K Rebuild Status : 88% complete Name : wangyafei:0 (local to host wangyafei) UUID : c5785808:daccbe2a:28df00c8:aec75aec Events : 15 Number Major Minor RaidDevice State 0 8 17 0 active sync /dev/sdb1 1 8 18 1 active sync /dev/sdb2 3 8 19 2 spare rebuilding /dev/sdb3[[email protected] ~]# cat /proc/mdstatPersonalities : [raid6] [raid5] [raid4] md0 : active raid5 sdb3[3] sdb2[1] sdb1[0] 8380416 blocks super 1.2 level 5, 256k chunk, algorithm 2 [3/3] [UUU] unused devices: <none>[[email protected] ~]# mke2fs -t ext4 /dev/md0mke2fs 1.42.9 (28-Dec-2013)文件系统标签=OS type: Linux块大小=4096 (log=2)分块大小=4096 (log=2)Stride=64 blocks, Stripe width=128 blocks524288 inodes, 2095104 blocks104755 blocks (5.00%) reserved for the super user第一个数据块=0Maximum filesystem blocks=214538649664 block groups32768 blocks per group, 32768 fragments per group8192 inodes per groupSuperblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632 Allocating group tables: 完成 正在写入inode表: 完成 Creating journal (32768 blocks): 完成Writing superblocks and filesystem accounting information: 完成 [[email protected] ~]# vim /etc/fstab/dev/md0 /backup ext4 acl,noatime 0 0
[[email protected] ~]# mount -a[[email protected] ~]# df -lh | grep ‘/dev/md0‘/dev/md0 7.8G 36M 7.3G 1% /backup[[email protected] ~]#
7、写一个脚本
(1) 传递两个以上字符串当作用户名;
(2) 创建这些用户;且密码同用户名;
(3) 总结说明共创建了几个用户;
1:
[[email protected] ~]# touch test07.sh[[email protected] ~]# vim test07.sh[[email protected] ~]# cat test07.sh#!/bin/bash#Author:wangyafei if [ $# -lt 2 ];then echo "At least two username " exit 2fi for i in $*;do if grep "^$i\>" /etc/passwd &> /dev/null;then echo "User $i exists" else useradd $i echo $i | passwd --stdin $i &> /dev/null echo "Add user $i finished" fi done echo "total of Create $# users" [[email protected] ~]# bash test07.shAt least two username [[email protected] ~]# bash test07.sh abb1 abb2 abb3Add user abb1 finishedAdd user abb2 finishedAdd user abb3 finishedtotal of Create 3 users
2:
[[email protected] ~]# touch test08.sh
[[email protected] ~]# vi test08.sh
[[email protected] ~]# cat test08.sh
#!/bin/bash
#Author:wangyafei
for i in [email protected];do
useradd $i
echo $i | passwd --stdin $i
done
echo "create total users: $#"
[[email protected] ~]# bash test08.sh
create total users: 0
[[email protected] ~]# bash test08.sh abc1 abc2 abc3 abc4
更改用户 abc1 的密码。
passwd:所有的身份验证令牌已经成功更新。
更改用户 abc2 的密码。
passwd:所有的身份验证令牌已经成功更新。
更改用户 abc3 的密码。
passwd:所有的身份验证令牌已经成功更新。
更改用户 abc4 的密码。
passwd:所有的身份验证令牌已经成功更新。
create total users: 4
8、写一脚本,分别统计/etc/rc.d/rc.sysinit、/etc/rc.d/init.d/functions和/etc/fstab文件中以#号开头的行数之和,以及总的空白行数;
[[email protected] ~]# ls /etc/rc.d/
init.d rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d rc.local
[[email protected] ~]# ls /etc/rc.d/init.d/
functions netconsole network README
[[email protected] ~]# ls /etc/fstab
/etc/fstab
[[email protected] ~]# touch test09.sh
[[email protected] ~]# vim test09.sh
[[email protected] ~]# cat test09.sh
#!/bin/bash
for i in /etc/rc.d/rc.local /etc/rc.d/init.d/functions /etc/fstab;do
line1=$(grep "^#" $i | wc -l)
line2=$(grep "^[[:space:]]" $i | wc -l)
echo "$i # start line total: $line1"
echo "$i space line total: $line2"
done
[[email protected] ~]# bash test09.sh
/etc/rc.d/rc.local # start line total: 11
/etc/rc.d/rc.local space line total: 0
/etc/rc.d/init.d/functions # start line total: 31
/etc/rc.d/init.d/functions space line total: 471
/etc/fstab # start line total: 7
/etc/fstab space line total: 0
[[email protected] ~]#
9、写一个脚本,显示当前系统上所有,拥有附加组的用户的用户名;并说明共有多少个此类用户;
#!/bin/bash
#
cat /etc/group | cut -d: -f1,4 | grep -E ".*:[^[:space:]]"
num=$(cat /etc/group | cut -d: -f1,4 | grep -E ".*:[^[:space:]]" | wc -l)
echo"There are such users $num"