马哥2016全新Linux+Python高端运维班第七周作业
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了马哥2016全新Linux+Python高端运维班第七周作业相关的知识,希望对你有一定的参考价值。
1、创建一个10G分区,并格式为ext4文件系统;
(1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;
答:①首先创建分区,命令如下:(注:仅展示命令,其中一些细节已省略)
[[email protected] ~]# fdisk /dev/sdc ##选择要分区的设备 Command (m for help): n ##“n”表示新建一个分区 Command action ##选择分区的类型,主分区或扩展分区 e extended p primary partition (1-4) e Partition number (1-4): 1 ##选择编号,范围1-4 First cylinder (1-2610, default 1): ##起始扇区,可使用默认值 Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): 10G ##结束扇区,可使用容量单位K,M,G Command (m for help): n ##由于扩展区无法直接使用,我们要再新建逻辑扇区 Command action ##选择分区类型 l logical (5 or over) p primary partition (1-4) l First cylinder (1-10, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-10, default 10): ##选择大小,默认则分配全部扩展空间 Using default value 10 Command (m for help): w ##保存退出 The partition table has been altered!
如图所示:
②使用mke2fs将划分的逻辑分区转换成ext4格式,且block大小为2048, 预留空间百分比为2, 卷标为MYDATA,命令如下:
[[email protected] ~]# mke2fs -t ext4 -b 2048 -m 2 -L ‘MYDATA‘ /dev/sdc5 ##-t:设定文件格式 -b:指定block块大小 -m #:为管理人员预留的空间占据的百分比,#为数字,代表百分之多少 -L:设定卷标
如图所示:
③修改其默挂载属性,可使用tune2fs实现,命令如下:
[[email protected] ~]# tune2fs -o acl /dev/sdc5 ##-o选项为修改默认挂载项 tune2fs 1.41.12 (17-May-2010)
结果如下:
(2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳;
答:挂载使用mount命令来实现,命令如下:
[[email protected] ~]# mount -o nodiratime,noexec -L MYDATA /data/mydata ##"-o options":挂载文件系统的选项;-o后面选项可有多个,用逗号隔开 ##diratime/nodiratime:每一次访问是否更新目录文件的访问时间戳 ##exec/noexec:是否支持将文件系统上的应用程序运行为进程
结果如下:
2、创建一个大小为1G的swap分区,并创建好文件系统,并启用之;
答:首先创建一个1G的的分区,并修改为swap文件系统,如下:
[[email protected] ~]# mkswap /dev/sdb5 ##创建swap Setting up swapspace version 1, size = 7964 KiB no label, UUID=b7841e4a-adfc-4b3e-a092-e89b9ac8121e [[email protected] ~]# swapon /dev/sdb5 ##启用swap
结果如下:
3、写一个脚本
(1)、获取并列出当前系统上的所有磁盘设备;
(2)、显示每个磁盘设备上每个分区相关的空间使用信息;
答:脚本如下
#!/bin/bash echo "当前系统上的磁盘设备:" fdisk -l | egrep "^Disk[[:space:]]/dev" ##"fdisk -l" 查看当前系统磁盘信息,然后筛选以"Disk /dev"开头的行 echo "各分区使用情况:" df -h | grep "^/dev*" ##"df -h"查看当前各分区使用状况,然后筛选以"/dev"开头的行
结果如下:
4、总结RAID的各个级别及其组合方式和性能的不同;
答:
RAID-0:
读写性能提升;可用空间:N*min(s1,s2.....);N硬盘个数;min最小的空间
无容错能力;最少磁盘数:2,2+
RAID-1:
读性能提升、写性能略有下降;可用空间:1*min(S1,S2.....);
有冗余能力,最少磁盘数:2,2+
RAID-5:
读写性能提升;可用空间(N-1)*min(s1,s2....);有容错能力:1块磁盘
最少磁盘数:3,3+1
RAID-6:
读写性能提升;可用空间(N-2)*min(s1,s2....);
有容错能力:2块磁盘;最少磁盘数:4,4+
混合型RAID
RAID-10:
读写性能提升;可用空间:N*min(s1,s2....)/2
有容错能力:每组镜像最多只能坏一块;最少磁盘数:4,4+
5、创建一个大小为10G的RAID1,要求有一个空闲盘,而且CHUNK大小为128k;
答:RAID1要求最少2块硬盘,由于还要一个空闲盘,所以总共使用3块硬盘创建;首先在3块硬盘中创建一个10G空间,以/dev/sda为例:
[[email protected] ~]# fdisk /dev/sda WARNING: DOS-compatible mode is deprecated. It‘s strongly recommended to switch off the mode (command ‘c‘) and change display units to sectors (command ‘u‘). Command (m for help): n ##新建一个分区 Command action e extended p primary partition (1-4) e ##由于我的硬盘已有三个分区,所以我把剩余的全部分成扩展分区 Selected partition 4 First cylinder (1428-3916, default 1428): Using default value 1428 Last cylinder, +cylinders or +size{K,M,G} (1428-3916, default 3916): Using default value 3916 Command (m for help): n ##新建一个10G的分区做RAID使用 First cylinder (1428-3916, default 1428): Using default value 1428 Last cylinder, +cylinders or +size{K,M,G} (1428-3916, default 3916): +10G Command (m for help): t ##调整分区ID Partition number (1-5): 5 ##新的10G分区为5,所以选择5 Hex code (type L to list codes): fd ##调整分区ID为fd Changed system type of partition 5 to fd (Linux raid autodetect) Command (m for help): p ##查看所有分区情况 Disk /dev/sda: 32.2 GB, 32212254720 bytes 255 heads, 63 sectors/track, 3916 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x0002784f Device Boot Start End Blocks Id System /dev/sda1 * 1 26 204800 83 Linux Partition 1 does not end on cylinder boundary. /dev/sda2 26 1301 10240000 83 Linux /dev/sda3 1301 1428 1024000 82 Linux swap / Solaris /dev/sda4 1428 3916 19985446 5 Extended /dev/sda5 1428 2733 10482967 fd Linux raid autodetect Command (m for help): wq ##保存退出 The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: 设备或资源忙. The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) Syncing disks.
分区创建结果如下:
创建RAID0:
[[email protected] ~]# mdadm -C /dev/md0 -a yes -n 2 -l 1 -c 128 -x 1 /dev/sda5 /dev/sdb5 /dev/sdc5 ##注释: ##-C:创建模式 ##-n #:使用#个块设备来创建此RAID; ##-l #:指明要创建的RAID级别; ##-a {yes|no}:自动创建目标RAID设备的设备文件; ##-c CHUNK_SIZE:指明块大小; ##-x #:指明空闲盘的个数; 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 mdadm: /dev/sdc5 appears to contain an ext2fs file system size=80260K mtime=Sun Sep 11 22:12:49 2016 Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started.
结果如下:
6、创建一个大小为4G的RAID5设备,chunk大小为256k,格式化ext4文件系统,要求可开机自动挂载至/backup目录,而且不更新访问时间戳,且支持acl功能;
答:创建3个2G分区,raid5的可用空间为(N-1)*min(s1,s2....)
创建raid5:
[[email protected] ~]# mdadm -C /dev/md0 -l 5 -a yes --chunk=256 -n 3 /dev/sda5 /dev/sdb5 /dev/sdc5 mdadm: /dev/sdc5 appears to contain an ext2fs file system size=80260K mtime=Sun Sep 11 22:12:49 2016 Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started.
结果如下:
挂载过程:
[[email protected] ~]# mke2fs -t ext4 /dev/md0 ##将md0格式化为ext4
[[email protected] ~]# mount /dev/md0 -o auto,noatime,acl /backup ##挂载至/backup
编辑/etc/fstab,开机自动挂载
结果如下:
7、写一个脚本
(1) 接受一个以上文件路径作为参数;
(2) 显示每个文件拥有的行数;
(3) 总结说明本次共为几个文件统计了其行数;
答:脚本代码如下:
#!/bin/bash if [ $# -eq 0 ];then ##“$#”传递给脚本的参数个数,“if”来判断路径不为空 echo "至少需要一个文件路径!" exit 1 fi for i in $*;do ##“$*”传递给脚本所有参数;(调用时将所有参数当独立字符串) echo "$i 文件行数为:$(cat $i | wc -l) 行" ##统计给出的各个文件路径 done echo "本次统计 $# 个文件"
结果如下:
8、写一个脚本
(1) 传递两个以上字符串当作用户名;
(2) 创建这些用户;且密码同用户名;
(3) 总结说明共创建了几个用户;
答:脚本代码如下:
#!/bin/bash for n in $*;do ##使用for循环来判断每一个用户名是否低于或等于2个字符串 if [ $(echo "$n" | wc -c) -le 3 ];then ##判断条件 echo "用户名不得低于2个字符串" exit 1 elif id $n >> /dev/null;then ##判断此用户名是否存在 echo "用户名$n 已存在" exit 1 else ##若用户名不存在且是两个字符串以上,创建用户名 useradd $n echo "$n" | passwd --stdin $n >> /dev/null ##修改用户的密码同用户名 echo "用户$n 已添加,密码同用户名,请及时修改!" fi done echo "本次添加$# 个用户" ##统计添加了多少个用户
结果如下:
用户名已存在的情况
用户名低于2个字符串的情况
符合所有条件的情况
9、写一个脚本,新建20个用户,visitor1-visitor20;计算他们的ID之和;
答:脚本代码如下:
#!/bin/bash export sum=0 ##定义一个变量,后期求ID和用 for i in {1..20};do ##循环次数 if [ id visitor$i ] &> /dev/null ;then ##测试要添加的用户是否已存在,若存在则中断 echo "用户visitor$i 已存在" exit 1 else useradd visitor$i >> /dev/null ##添加用户 echo "用户visitor$i 已添加" let sum+=$(id -u visitor$i) ##计算ID之和 fi done echo "所添加用户的UID之和为:$sum"
结果如下:
10、写一脚本,分别统计/etc/rc.d/rc.sysinit、/etc/rc.d/init.d/functions和/etc/fstab文件中以#号开头的行数之和,以及总的空白行数;
答:脚本代码如下:
#!/bin/bash export sum1=0 ##求以#开头行数之和用 export sp=0 ##求以空格开头行数之和用 for i in $#;do ##循环次数 let sum1+=$(cat $* | grep -o "^#.*" | wc -l) ##找出文件中以#开头的行数并求和 let sp+=$(cat $* | egrep -o "^[[:space:]].*" | wc -l) ##找出文件中以空格开头的行数并求和 done echo "给出的文档中以#开头的行数和为:$sum1" echo "给出的文档中以空格开头的行数和为:$sp"
结果如下:
给出的文件中以#开头的行数:
给出的文件中以空格开头的行数:
11、写一个脚本,显示当前系统上所有默认shell为bash的用户的用户名、UID以及此类所有用户的UID之和;
答:脚本代码如下:
#!/bin/bash export sum=0 ##用于求UID之和用 cat /etc/passwd | egrep "bash$" | cut -d: -f1,3,7 ##显示默认shell为bash的信息 for i in $(cat /etc/passwd | egrep "bash$" | cut -d: -f3);do ##循环次数 let sum+=$i ##求UID之和 done echo "以上UID之和为:$sum"
结果如下:
12、写一个脚本,显示当前系统上所有,拥有附加组的用户的用户名;并说明共有多少个此类用户;
答:脚本代码如下:
#!/bin/bash export sum=0 ##用作计算符合条件用户名数量 for i in $(cat /etc/passwd | cut -d: -f1);do ##循环次数,循环列表为所有用户名 if [ $(groups $i | wc -w) -gt 3 ];then ##对用户名进行group查看,如果有多余的附加组,则统计后的单词数会大于3 echo "$(groups $i)" ##显示出拥有附加组的用户名 let sum+=1 ##累计计算次数 fi done echo "此类用户共有$sum 个"
结果如下:
13、创建一个由至少两个物理卷组成的大小为20G的卷组;要求,PE大小为8M;而在卷组中创建一个大小为5G的逻辑卷mylv1,格式化为ext4文件系统,开机自动挂载至/users目录,支持acl;
答:创建2个10G分区,修改格式为8e(以/dev/sdb为例)
[[email protected] ~]# fdisk /dev/sdb WARNING: DOS-compatible mode is deprecated. It‘s strongly recommended to switch off the mode (command ‘c‘) and change display units to sectors (command ‘u‘). Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) l First cylinder (1-2610, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +10G Command (m for help): t Partition number (1-5): 5 Hex code (type L to list codes): 8e Changed system type of partition 5 to 8e (Linux LVM) Command (m for help): p Disk /dev/sda: 32.2 GB, 32212254720 bytes 255 heads, 63 sectors/track, 3916 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x0002784f Device Boot Start End Blocks Id System /dev/sda1 * 1 26 204800 83 Linux Partition 1 does not end on cylinder boundary. /dev/sda2 26 1301 10240000 83 Linux /dev/sda3 1301 1428 1024000 82 Linux swap / Solaris /dev/sda4 1428 3916 19985446 5 Extended /dev/sda5 1428 2733 10482967 8e Linux LVM Command (m for help): wq The partition table has been altered!
创建PV:
创建GV:
[[email protected] ~]# vgcreate -s 8m myvg /dev/sda5 /dev/sdb5 ##"-s"选项为定义PE大小 Volume group "myvg" successfully created
创建LV:
[[email protected] ~]# lvcreate -L 5G -n mylv1 myvg Logical volume "mylv1" created
格式化mylv1:
挂载至/users,支持acl:
设置开机自动挂载,支持acl:
14、新建用户magedu;其家目录为/users/magedu,而后su切换至此用户,复制多个文件至家目录;
答:
[[email protected] /]# useradd -d /users/magedu magedu [[email protected] etc]$ cp /etc/i* /users/magedu/
15、扩展mylv1至9G,确保扩展完成后原有数据完全可用;
答:
[[email protected] /]# lvextend -L +4G /dev/myvg/mylv1 ##扩展物理边界 Extending logical volume mylv1 to 9.00 GiB Logical volume mylv1 successfully resized [[email protected] /]# resize2fs /dev/myvg/mylv1 ##扩展逻辑边界 resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/myvg/mylv1 is mounted on /users; on-line resizing required old desc_blocks = 1, new_desc_blocks = 1 Performing an on-line resize of /dev/myvg/mylv1 to 2359296 (4k) blocks. The filesystem on /dev/myvg/mylv1 is now 2359296 blocks long.
结果如下:
扩展后数据情况:
16、缩减mylv1至7G,确保缩减完成后原有数据完全可用;
答:
[[email protected] ~]# umount /dev/myvg/mylv1 ##先卸载此卷 [[email protected] ~]# e2fsck -f /dev/myvg/mylv1 ##进行文件系统强制检测 e2fsck 1.41.12 (17-May-2010) 第一步: 检查inode,块,和大小 第二步: 检查目录结构 第3步: 检查目录连接性 Pass 4: Checking reference counts 第5步: 检查簇概要信息 /dev/myvg/mylv1: 25/589824 files (0.0% non-contiguous), 72685/2359296 blocks [[email protected] ~]# resize2fs /dev/myvg/mylv1 resize2fs 1.41.12 (17-May-2010) The filesystem is already 2359296 blocks long. Nothing to do! [[email protected] ~]# resize2fs /dev/myvg/mylv1 7G ##必须先缩减逻辑边界 resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/myvg/mylv1 to 1835008 (4k) blocks. The filesystem on /dev/myvg/mylv1 is now 1835008 blocks long. [[email protected] ~]# lvreduce -L -2G /dev/myvg/mylv1 ##缩减物理边界 WARNING: Reducing active logical volume to 7.00 GiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce mylv1? [y/n]: y Reducing logical volume mylv1 to 7.00 GiB Logical volume mylv1 successfully resized
结果如下:
17、对mylv1创建快照,并通过备份数据;要求保留原有的属主属组等信息;
答:
[[email protected] ~]# lvcreate -L 1G -s -n mylv101 /dev/myvg/mylv1 Logical volume "mylv101" created
结果如下:
本文出自 “时光之书” 博客,谢绝转载!
以上是关于马哥2016全新Linux+Python高端运维班第七周作业的主要内容,如果未能解决你的问题,请参考以下文章
马哥2016全新Linux+Python高端运维班第四期-第五次作业
马哥2016全新Linux+Python高端运维班第四期-第四次作业
马哥2016全新Linux+Python高端运维班第四周作业
马哥2016全新Linux+Python高端运维班第九周作业