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

时间:2022-06-27 03:08:11

1、创建一个10G分区,并格式为ext4文件系统;

(1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;

答:①首先创建分区,命令如下:(注:仅展示命令,其中一些细节已省略)

[root@csd ~]# 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!
如图所示:

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

②使用mke2fs将划分的逻辑分区转换成ext4格式,且block大小为2048, 预留空间百分比为2, 卷标为MYDATA,命令如下:

[root@csd ~]# mke2fs -t ext4 -b 2048 -m 2 -L 'MYDATA' /dev/sdc5##-t:设定文件格式  -b:指定block块大小  -m #:为管理人员预留的空间占据的百分比,#为数字,代表百分之多少  -L:设定卷标

如图所示:


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

③修改其默挂载属性,可使用tune2fs实现,命令如下:

[root@csd ~]# tune2fs -o acl /dev/sdc5     ##-o选项为修改默认挂载项tune2fs 1.41.12 (17-May-2010)

结果如下:

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

(2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳;

答:挂载使用mount命令来实现,命令如下:

[root@csd ~]# mount -o nodiratime,noexec -L MYDATA /data/mydata##"-o options":挂载文件系统的选项;-o后面选项可有多个,用逗号隔开##diratime/nodiratime:每一次访问是否更新目录文件的访问时间戳##exec/noexec:是否支持将文件系统上的应用程序运行为进程

结果如下:

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

2、创建一个大小为1G的swap分区,并创建好文件系统,并启用之;

答:首先创建一个1G的的分区,并修改为swap文件系统,如下:

马哥2016全新Linux+Python高端运维班第七周作业然后创建swap并启用,命令如下

[root@csd ~]# mkswap /dev/sdb5                  ##创建swapSetting up swapspace version 1, size = 7964 KiBno label, UUID=b7841e4a-adfc-4b3e-a092-e89b9ac8121e[root@csd ~]# swapon /dev/sdb5                  ##启用swap

结果如下:

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

3、写一个脚本

(1)、获取并列出当前系统上的所有磁盘设备;

(2)、显示每个磁盘设备上每个分区相关的空间使用信息;

答:脚本如下

#!/bin/bashecho "当前系统上的磁盘设备:"fdisk -l | egrep "^Disk[[:space:]]/dev"       ##"fdisk -l" 查看当前系统磁盘信息,然后筛选以"Disk /dev"开头的行echo "各分区使用情况:"df -h | grep "^/dev*"                ##"df -h"查看当前各分区使用状况,然后筛选以"/dev"开头的行

结果如下:

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

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为例:

[root@csd ~]# fdisk /dev/sdaWARNING: 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 4First cylinder (1428-3916, default 1428): Using default value 1428Last cylinder, +cylinders or +size{K,M,G} (1428-3916, default 3916): Using default value 3916Command (m for help): n       ##新建一个10G的分区做RAID使用First cylinder (1428-3916, default 1428): Using default value 1428Last cylinder, +cylinders or +size{K,M,G} (1428-3916, default 3916): +10GCommand (m for help): t       ##调整分区IDPartition number (1-5): 5     ##新的10G分区为5,所以选择5Hex code (type L to list codes): fd    ##调整分区ID为fdChanged system type of partition 5 to fd (Linux raid autodetect)Command (m for help): p       ##查看所有分区情况Disk /dev/sda: 32.2 GB, 32212254720 bytes255 heads, 63 sectors/track, 3916 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x0002784f   Device Boot      Start         End      Blocks   Id  System/dev/sda1   *           1          26      204800   83  LinuxPartition 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 autodetectCommand (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 atthe next reboot or after you run partprobe(8) or kpartx(8)Syncing disks.

分区创建结果如下:

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

创建RAID0:

[root@csd ~]# 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.90mdadm: /dev/sdc5 appears to contain an ext2fs file system    size=80260K  mtime=Sun Sep 11 22:12:49 2016Continue creating array? ymdadm: Defaulting to version 1.2 metadatamdadm: array /dev/md0 started.

结果如下:

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

6、创建一个大小为4G的RAID5设备,chunk大小为256k,格式化ext4文件系统,要求可开机自动挂载至/backup目录,而且不更新访问时间戳,且支持acl功能;

答:创建3个2G分区,raid5的可用空间为(N-1)*min(s1,s2....)

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

创建raid5:

[root@csd ~]# mdadm -C /dev/md0 -l 5 -a yes --chunk=256 -n 3 /dev/sda5 /dev/sdb5 /dev/sdc5mdadm: /dev/sdc5 appears to contain an ext2fs file system    size=80260K  mtime=Sun Sep 11 22:12:49 2016Continue creating array? ymdadm: Defaulting to version 1.2 metadatamdadm: array /dev/md0 started.

结果如下:

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

挂载过程:

[root@csd ~]# mke2fs -t ext4 /dev/md0    ##将md0格式化为ext4

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

[root@csd ~]# mount /dev/md0 -o auto,noatime,acl /backup  ##挂载至/backup

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

编辑/etc/fstab,开机自动挂载

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

结果如下:

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

7、写一个脚本

(1) 接受一个以上文件路径作为参数;

(2) 显示每个文件拥有的行数;

(3) 总结说明本次共为几个文件统计了其行数;

答:脚本代码如下:

#!/bin/bashif [ $# -eq 0 ];then               ##“$#”传递给脚本的参数个数,“if”来判断路径不为空echo "至少需要一个文件路径!"      exit 1fifor i in $*;do                     ##“$*”传递给脚本所有参数;(调用时将所有参数当独立字符串)echo "$i 文件行数为:$(cat $i | wc -l) 行"   ##统计给出的各个文件路径doneecho "本次统计 $# 个文件"

结果如下:

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

8、写一个脚本

(1) 传递两个以上字符串当作用户名;

(2) 创建这些用户;且密码同用户名;

(3) 总结说明共创建了几个用户;

答:脚本代码如下:

#!/bin/bashfor n in $*;do                            ##使用for循环来判断每一个用户名是否低于或等于2个字符串if [ $(echo "$n" | wc -c) -le 3 ];then    ##判断条件echo "用户名不得低于2个字符串"exit 1elifid $n >> /dev/null;then                   ##判断此用户名是否存在echo "用户名$n 已存在"exit 1else                                      ##若用户名不存在且是两个字符串以上,创建用户名useradd $n                                   echo "$n" | passwd --stdin $n >> /dev/null      ##修改用户的密码同用户名echo "用户$n 已添加,密码同用户名,请及时修改!"fidoneecho "本次添加$# 个用户"                   ##统计添加了多少个用户

结果如下:

用户名已存在的情况

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

用户名低于2个字符串的情况

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

符合所有条件的情况

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

9、写一个脚本,新建20个用户,visitor1-visitor20;计算他们的ID之和;

答:脚本代码如下:

#!/bin/bashexport sum=0                          ##定义一个变量,后期求ID和用for i in {1..20};do                   ##循环次数if [ id visitor$i ] &> /dev/null ;then    ##测试要添加的用户是否已存在,若存在则中断echo "用户visitor$i 已存在" exit 1elseuseradd visitor$i >> /dev/null        ##添加用户echo "用户visitor$i 已添加"           let sum+=$(id -u visitor$i)           ##计算ID之和fidoneecho "所添加用户的UID之和为:$sum"

结果如下:

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

10、写一脚本,分别统计/etc/rc.d/rc.sysinit、/etc/rc.d/init.d/functions和/etc/fstab文件中以#号开头的行数之和,以及总的空白行数;

答:脚本代码如下:

#!/bin/bashexport sum1=0              ##求以#开头行数之和用export sp=0                ##求以空格开头行数之和用for i in $#;do             ##循环次数let sum1+=$(cat $* | grep -o "^#.*" | wc -l)   ##找出文件中以#开头的行数并求和let sp+=$(cat $* | egrep -o "^[[:space:]].*" | wc -l)  ##找出文件中以空格开头的行数并求和doneecho "给出的文档中以#开头的行数和为:$sum1"      echo "给出的文档中以空格开头的行数和为:$sp"

结果如下:

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

给出的文件中以#开头的行数:

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

给出的文件中以空格开头的行数:

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

11、写一个脚本,显示当前系统上所有默认shell为bash的用户的用户名、UID以及此类所有用户的UID之和;

答:脚本代码如下:

#!/bin/bashexport 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之和doneecho "以上UID之和为:$sum"

结果如下:

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

12、写一个脚本,显示当前系统上所有,拥有附加组的用户的用户名;并说明共有多少个此类用户;

答:脚本代码如下:

#!/bin/bashexport sum=0                  ##用作计算符合条件用户名数量for i in $(cat /etc/passwd | cut -d: -f1);do   ##循环次数,循环列表为所有用户名if [ $(groups $i | wc -w) -gt 3 ];then         ##对用户名进行group查看,如果有多余的附加组,则统计后的单词数会大于3echo "$(groups $i)"           ##显示出拥有附加组的用户名let sum+=1                    ##累计计算次数fidoneecho "此类用户共有$sum 个"

结果如下:

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

13、创建一个由至少两个物理卷组成的大小为20G的卷组;要求,PE大小为8M;而在卷组中创建一个大小为5G的逻辑卷mylv1,格式化为ext4文件系统,开机自动挂载至/users目录,支持acl;

答:创建2个10G分区,修改格式为8e(以/dev/sdb为例)

[root@csd ~]# fdisk /dev/sdbWARNING: 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): nCommand action   l   logical (5 or over)   p   primary partition (1-4)lFirst cylinder (1-2610, default 1): Using default value 1Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +10GCommand (m for help): tPartition number (1-5): 5Hex code (type L to list codes): 8eChanged system type of partition 5 to 8e (Linux LVM)Command (m for help): pDisk /dev/sda: 32.2 GB, 32212254720 bytes255 heads, 63 sectors/track, 3916 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x0002784f   Device Boot      Start         End      Blocks   Id  System/dev/sda1   *           1          26      204800   83  LinuxPartition 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 LVMCommand (m for help): wqThe partition table has been altered!

创建PV:

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

创建GV:

[root@csd ~]# vgcreate -s 8m myvg /dev/sda5 /dev/sdb5   ##"-s"选项为定义PE大小  Volume group "myvg" successfully created

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

创建LV:

[root@csd ~]# lvcreate -L 5G -n mylv1 myvg  Logical volume "mylv1" created

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

格式化mylv1:

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

挂载至/users,支持acl:

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

设置开机自动挂载,支持acl:

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

14、新建用户magedu;其家目录为/users/magedu,而后su切换至此用户,复制多个文件至家目录;

答:

[root@csd /]# useradd -d /users/magedu magedu[magedu@csd etc]$ cp /etc/i* /users/magedu/

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

15、扩展mylv1至9G,确保扩展完成后原有数据完全可用;

答:

[root@csd /]# lvextend -L +4G /dev/myvg/mylv1      ##扩展物理边界  Extending logical volume mylv1 to 9.00 GiB  Logical volume mylv1 successfully resized[root@csd /]# resize2fs /dev/myvg/mylv1            ##扩展逻辑边界resize2fs 1.41.12 (17-May-2010)Filesystem at /dev/myvg/mylv1 is mounted on /users; on-line resizing requiredold desc_blocks = 1, new_desc_blocks = 1Performing an on-line resize of /dev/myvg/mylv1 to 2359296 (4k) blocks.The filesystem on /dev/myvg/mylv1 is now 2359296 blocks long.

结果如下:

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

扩展后数据情况:

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

16、缩减mylv1至7G,确保缩减完成后原有数据完全可用;

答:

[root@csd ~]# umount /dev/myvg/mylv1            ##先卸载此卷[root@csd ~]# 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[root@csd ~]# resize2fs /dev/myvg/mylv1 resize2fs 1.41.12 (17-May-2010)The filesystem is already 2359296 blocks long.  Nothing to do![root@csd ~]# 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.[root@csd ~]# 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

结果如下:

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

17、对mylv1创建快照,并通过备份数据;要求保留原有的属主属组等信息;

答:

[root@csd ~]# lvcreate -L 1G -s -n mylv101 /dev/myvg/mylv1   Logical volume "mylv101" created

结果如下:

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

本文出自 “时光之书” 博客,谢绝转载!