马哥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文件系统,如下:

技术分享然后创建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高端运维班第九周作业

马哥2016全新Linux+Python高端运维班第八周作业

马哥2016全新Linux+Python高端运维班第四期-第六次作业