首页 > 代码库 > 第七周作业
第七周作业
1、创建一个10G分区,并格式为ext4文件系统;
新增一个20G磁盘,使用lsblk命令列出块设备信息,设备名为sdb
(1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;
# mke2fs -t ext4 -b 2048 -m 2 -L MYDATA /dev/sdb1
-t 文件系统类型,-b blcok大小,-m 预留空间百分比,-L 指明卷标
# tune2fs -o acl /dev/sdb1
(2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳;
# mkdir -p /data/mydata
#-p 自动创建各级目录
# mount -t ext4 -o noexec,noatime /dev/sdb1 /data/mydata/
#挂载至/data/mydata目录
2、创建一个大小为1G的swap分区,并创建好文件系统,并启用之;
# fdisk /dev/sdb
# mkswap -L SWAP /dev/sdb2 #创建交换分区
# swapon /dev/sdb2 #启用交换分区
创建1G分区,创建交换分区前,设置分区类型的id为82(swap)
3、写一个脚本
(1)、获取并列出当前系统上的所有磁盘设备;
(2)、显示每个磁盘设备上每个分区相关的空间使用信息;
#/bin/bash for i in $(fdisk -l | grep ‘^/dev/[sh]d‘ | cut -d‘ ‘ -f1 );do echo "fdisk $i" df -h $i done
4、总结RAID的各个级别及其组合方式和性能的不同;
独立冗余磁盘阵列(Redundant Arrays of Independent Disks,RAID)
RAID-0: 没有奇偶校验的条带
读、写性能提升;
可用空间:N*min(S1,S2,...)
无容错能力
最少磁盘数:2, 2+
RAID-1:独立磁盘冗余阵列
读性能提升、写性能略有下降;
可用空间:1*min(S1,S2,...)
有冗余能力
最少磁盘数:2, 2+
RAID-3: 带奇偶验证码的并行传送
使用单块磁盘存储简单的 奇偶校验信息,所以最终磁盘数量为 N+1 。当这N+1个硬盘中的其中一个硬盘出现故障时, 从其它N个硬盘中的数据也可以恢复原始数据,当更换一个新硬盘后,系统可以重新恢复完整 的校验容错信息。会把数据的写入操作分散到多个磁盘上进行,不管是向哪一个数据盘写入数据, 都需要同时重写校验盘中的相关信息。因此,对于那些经常需要执行大量写入操作的应用来 说,校验盘的负载将会很大,无法满足程序的运行速度,从而导致整个RAID系统性能的下降
RAID-4: 带奇偶校验码的独立磁盘结构
与RAID3类似,但RAID4是按块(扇区)存取。无须像RAID3那样,哪怕每一次小I/O操作也要涉 及全组,只需涉及组中两块硬盘(一块数据盘,一块校验盘)即可,从而提高了小量数据 I/O速度。
RAID-5:分布式奇偶校验的独立磁盘结构
读、写性能提升
可用空间:(N-1)*min(S1,S2,...)
有容错能力:1块磁盘
最少磁盘数:3, 3+
数据以块为单位分布到各个硬盘上。RAID 5不对数据进行备份,而是把数据和与其相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上。当RAID5的一个磁盘数据损坏后,利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据
RAID-6: 两种存储的奇偶校验码的磁盘结构
读、写性能提升
可用空间:(N-2)*min(S1,S2,...)
有容错能力:2块磁盘
最少磁盘数:4, 4+
RAID6技术是在RAID 5基础上,为了进一步加强数据保护而设计的一种RAID方式,实际上是一种扩展RAID 5等级。与RAID 5的不同之处于除了每个硬盘上都有同级数据XOR校验区外,还有一个针对每个数据块的XOR校验区。
RAID-10:镜象阵列条带(磁盘利用率50%)
Raid 10是一个Raid 0与Raid1的组合体
读、写性能提升
可用空间:N*min(S1,S2,...)/2
有容错能力:每组镜像最多只能坏一块;
最少磁盘数:4, 4+
5、创建一个大小为10G的RAID1,要求有一个空闲盘,而且CHUNK大小为128k;
mdadm命令用于管理系统软件RAID硬盘阵列,格式为:"mdadm [模式] <RAID设备名称> [选项] [成员设备名称]"
[模式]
-C 创建一个新的阵列,每个设备具有超级块
-v 显示过程
-S 停止阵列
-A 将已经停止的阵列重新装配
[选项]
-a {yes|no}:自动创建目标RAID设备的设备文件
-r: 移除磁盘
-n: 指定设备数量
-x #: 指明空闲盘(热备磁盘)的个数
-l 指定raid级别
-c CHUNK_SIZE: 指明块大小
# mdadm -Cv /dev/md0 -a yes -n 2 -x 1 -l 1 -c 128 /dev/sdb /dev/sdc /dev/sdd mdadm: chunk size ignored for this level mdadm: /dev/sdb appears to be part of a raid array: level=raid0 devices=0 ctime=Thu Jan 1 08:00:00 1970 mdadm: partition table exists on /dev/sdb but will be lost or meaningless after creating array 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=http://www.mamicode.com/0.90>
初始化时间和磁盘阵列的读写的应用相关,使用cat /proc/mdstat信息查询RAID阵列当前重构的速度和预期的完成时间
# mke2fs -t ext4 /dev/md0 #将RAID磁盘阵列格式化为ext4格式 mke2fs 1.42.9 (28-Dec-2013) 文件系统标签= OS type: Linux 块大小=4096 (log=2) 分块大小=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 655360 inodes, 2619392 blocks 130969 blocks (5.00%) reserved for the super user 第一个数据块=0 Maximum filesystem blocks=2151677952 80 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock 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: 完成 # mdadm -D /dev/md0 #显示raid的详细信息 /dev/md0: Version : 1.2 #RAID的版本 Creation Time : Fri Sep 16 20:16:21 2016 #创建的时间 Raid Level : raid1 #RAID级别 Array Size : 10477568 (9.99 GiB 10.73 GB) #阵列容量 Used Dev Size : 10477568 (9.99 GiB 10.73 GB) #可用空间 Raid Devices : 2 #Raid设备数量 Total Devices : 3 #总设备数 Persistence : Superblock is persistent #超级块是持久的 Update Time : Fri Sep 16 20:17:10 2016 #更新时间 State : active, resyncing #各个设备的状态 Active Devices : 2 Working Devices : 3 Failed Devices : 0 Spare Devices : 1 Resync Status : 99% complete Name : localhost.localdomain:0 (local to host localhost.localdomain) UUID : a7333f65:b0b3b600:876412aa:88493bca Events : 16 Number Major Minor RaidDevice State 0 8 16 0 active sync /dev/sdb 1 8 32 1 active sync /dev/sdc 2 8 48 - spare /dev/sdd6、创建一个大小为4G的RAID5设备,chunk大小为256k,格式化ext4文件系统,要求可开机自动挂载至/backup目录,而且不更新访问时间戳,且支持acl功能;
# mdadm -Cv /dev/md0 -a yes -n 3 -l 5 -c 256 /dev/sdb /dev/sdc /dev/sdd # mkfs -t ext4 /dev/md0 #格式化为ext4文件系统
# vim /etc/fstab#添加下面一行
/dev/md0 /backup ext4 acl,nodiratime 0 0
或者
# echo "/dev/md0 /backup ext4 acl,nodiratime 0 0" >> /etc/fstab文件系统挂载配置文件/etc/fstab格式
要挂载的设备或伪文件系统 挂载点 文件系统类型 挂载选项 转储频率 自检次序
7、写一个脚本
(1) 接受一个以上文件路径作为参数;
(2) 显示每个文件拥有的行数;
(3) 总结说明本次共为几个文件统计了其行数;
#!/bin/bash # num=0 line=0 if [ $# -gt 0 ];then #传递给脚本的参数的个数大于0 for i in $*;do line=$(wc -l $i | cut -d‘ ‘ -f 1 ) let num++ echo -e "File path:$i\nline number:$line" done echo -e "Total files:$num" else if [ $# -eq 0 ]; then #传递给脚本的参数的个数等于0 echo "please input File path" fi fi
条件测试表达式前后必须有空格
8、写一个脚本
(1) 传递两个以上字符串当作用户名;
(2) 创建这些用户;且密码同用户名;
(3) 总结说明共创建了几个用户;
#!/bin/bash count=0 if [ $# -le 2 ];then #传递给脚本的参数的个数小于2 echo "greater than two user name!" exit 1 fi for i in $*;do id $i &>/dev/null #$i为用户名字符串 if [ $? -eq 0 ];then #执行状态等于0,命令执行成功 echo "user $i exist!" else useradd $i && echo "$i" | passwd --stdin "$i" #&& 逻辑与,当命令1正确执行, 则命令2才会执行。当命令1执行不正确, 则命令2不会执行。 let count++ #创建用户一次,变量count自加一次 echo "user:$i added" fi done echo "total $count users"
9、写一个脚本,新建20个用户,visitor1-visitor20;计算他们的ID之和;
#/bin/bash uid=0 idsum=0 for i in {1..20};do if id visitor$i &> /dev/null; then #id命令执行成功,then 后边的语句将会被执行;否则,执行 else 后边的语句 echo "visitor$i exist!" uid=$(cat /etc/passwd | grep "visitor$i" | cut -d: -f3) #用户名存在,取出uid else useradd visitor$i &> /dev/null uid=$(cat /etc/passwd | grep "visitor$i" | cut -d: -f3) #用户名不存在,添加用户名,取出uid fi let idsum+=$uid #uid数字叠加 done echo "users id sums: $idsum"
10、写一脚本,分别统计/etc/rc.d/rc.sysinit、/etc/rc.d/init.d/functions和/etc/fstab文件中以#号开头的行数之和,以及总的;
#!/bin/bash line1=0 line2=0 for i in {/etc/rc.d/rc.sysinit /etc/rc.d/init.d/functions /etc/fstab};do let line1+=$(cat $i | grep "^[#]" | wc -l) #号开头的行数之和 let line2+=$(cat $i | grep "^$" | wc -l) 空白行数总和 done echo "# lines:$line1" echo "spaces lines:$line2"
11、写一个脚本,显示当前系统上所有默认shell为bash的用户的用户名、UID以及此类所有用户的UID之和;
#!/bin/bash num=0 grep "bash$" /etc/passwd | awk -F: ‘{print $1,$3}‘ #过滤/etc/passwd默认shell为bash的行,以冒号取第一,第三字段 for i in $(grep "bash$" /etc/passwd | cut -d: -f1);do let num+=$i done echo "UID sum is $num"
12、写一个脚本,显示当前系统上所有,拥有附加组的用户的用户名;并说明共有多少个此类用户;
#!/bin/bash num=0 user=$(cut -d: -f1 /etc/passwd) for i in $user; do group=$(id $i | cut -d‘ ‘ -f3 | awk -F, ‘{print $2}‘ ) if [ -n "$group" ];then #判断字符串是否非空 echo "$i" let num=$num+1 fi done echo "user num $num"13、创建一个由至少两个物理卷组成的大小为20G的卷组;要求,PE大小为8M;而在卷组中创建一个大小为5G的逻辑卷mylv1,格式化为ext4文件系统,开机自动挂载至/users目录,支持acl;
# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda1 8:1 0 500M 0 part /boot └─sda2 8:2 0 19.5G 0 part ├─centos-root 253:0 0 17.5G 0 lvm / └─centos-swap 253:1 0 2G 0 lvm [SWAP] sdb 8:16 0 40G 0 disk ├─sdb1 8:17 0 10G 0 part └─sdb2 8:18 0 10G 0 part sr0 11:0 1 7.2G 0 rom # pvcreate /dev/sdb{1,2} #创建物理卷(PV) Physical volume "/dev/sdb1" successfully created Physical volume "/dev/sdb2" successfully created # pvs #报告物理卷的信息 PV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a-- 19.51g 40.00m /dev/sdb1 myvg lvm2 a-- 9.99g 4.99g /dev/sdb2 myvg lvm2 a-- 9.99g 9.99g # vgcreate -s 8M myvg /dev/sdb{1,2} #创建卷组(VG),-s指明物理区域(PE)大小,PE为VG的最小组成单位 Volume group "myvg" successfully created # vgs myvg #报告卷组的信息 VG #PV #LV #SN Attr VSize VFree myvg 2 1 0 wz--n- 19.98g 14.98g # vgdisplay myvg #显示卷组的详细属性 --- Volume group --- VG Name myvg System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 2 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 2 Act PV 2 VG Size 19.98 GiB PE Size 8.00 MiB Total PE 2558 Alloc PE / Size 640 / 5.00 GiB Free PE / Size 1918 / 14.98 GiB VG UUID hE9CPp-pOWw-Td3Z-bEkQ-5jD3-Knyu-BziWzC # lvcreate -L 5G -n /dev/myvg/mylv1 /dev/myvg #创建逻辑卷,-L指定大小,-n指定逻辑卷名, Logical volume "mylv1" created. #逻辑卷中可用于分配的最小存储单元LE(Logical Extents) # lvs myvg/mylv1 #报告逻辑卷的信息 LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert mylv1 myvg -wi-ao---- 5.00g # mkfs -t ext4 /dev/myvg/mylv1 # mkdir users # vim /etc/fstab #要挂载的设备或伪文件系统 挂载点 文件系统类型 挂载选项 转储频率 自检次序 #添加一行 /dev/myvg/mylv1 /users ext4 defaults,acl 0 0 # mount -o acl /dev/myvg/mylv1 /users #挂载到/users目录
14、新建用户magedu;其家目录为/users/magedu,而后su切换至此用户,复制多个文件至家目录;
# useradd -dm /users/magedu magedu # su - magedu $ cp /etc/issue /etc/fstab ./
15、扩展mylv1至9G,确保扩展完成后原有数据完全可用;
# umount /users/ #卸载mylv1卷 # lvextend -L 9G -n /dev/myvg/mylv1 #扩展逻辑卷 Size of logical volume myvg/mylv1 changed from 5.00 GiB (640 extents) to 9.00 GiB (1152 extents). Logical volume mylv1 successfully resized. # e2fsck -f /dev/myvg/mylv1 #ext系列文件专用的检测修复工具 e2fsck 1.42.9 (28-Dec-2013) 第一步: 检查inode,块,和大小 第二步: 检查目录结构 第3步: 检查目录连接性 Pass 4: Checking reference counts 第5步: 检查簇概要信息 /dev/myvg/mylv1: 11/327680 files (0.0% non-contiguous), 58462/1310720 blocks [root@localhost ~]# resize2fs /dev/myvg/mylv1 #文件系统重定义大小 resize2fs 1.42.9 (28-Dec-2013) The filesystem is already 1310720 blocks long. Nothing to do! # lvs /dev/myvg/mylv1 LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert mylv1 myvg -wi-a----- 9.00g
16、缩减mylv1至7G,确保缩减完成后原有数据完全可用;
# umount /users/ # e2fsck -f /dev/myvg/mylv1 # resize2fs /dev/myvg/mylv1 7G # lvreduce -L 7G -n /dev/myvg/mylv1 #缩减逻辑卷至7G, 或者使用简便命令 # lvresize -L 7G -r /dev/myvg/mylv1 #设置mylv1为7G,-r为同时更改其文件系统大小 # lvs /dev/myvg/mylv1
17、对mylv1创建快照,并通过备份数据;要求保留原有的属主属组等信息;
# lvcreate -L 6G -s -n lv1snapshot myvg/mylv1-s 创建快照
-n 为快照命名
-p{r|rw} 设置访问权限为只读(R)或读写(RW)。默认是读写。
# lvs /dev/myvg/lv1snapshot LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert lv1snapshot myvg swi-a-s--- 6.00g mylv1 0.00
# lvdisplay /dev/myvg/lv1snapshot --- Logical volume --- LV Path /dev/myvg/lv1snapshot #快照逻辑卷名称 LV Name lv1snapshot #当前使用的卷组名 VG Name myvg LV UUID 0IP9M3-UHcY-izyq-UfZ4-WucA-fzeL-0xxjdw LV Write Access read/write #读写模式下的快照卷,我们甚至可以挂载并使用该卷 LV Creation host, time localhost.localdomain, 2016-09-17 19:33:07 +0800 #快照创建时间。这个很重要,因为快照将跟踪此时间之后的每个改变 LV snapshot status active destination for mylv1 #该快照属于mylv1逻辑卷生效 LV Status available #逻辑卷在线并可用 # open 0 LV Size 7.00 GiB #我们录制快照的源卷大小 Current LE 896 COW-table size 6.00 GiB #写时复制表大小,Cow = copy on Write,这是说对mylv1卷所作的任何改变都会写入此快照 COW-table LE 768 Allocated to snapshot 0.00% #当前使用的快照比例大小 Snapshot chunk size 4.00 KiB #快照组块的大小 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:5
第七周作业