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

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

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

答:①首先建立分区,命令以下:(注:仅展现命令,其中一些细节已省略)bash

[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!
如图所示:

wKiom1fdCgiyJqh6AAXZ3VZgKRQ695.jpg

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

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

如图所示:ide


wKioL1fdEoOSyQXyAABWA7_XTuY210.png

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

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

结果以下:测试

wKioL1fdE8aAKbTEAAKgq5ZAwnA988.jpg

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

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

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

结果以下:
spa

wKioL1fdFnbRKYCHAAH0SXjtuyE268.jpg

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

答:首先建立一个1G的的分区,并修改成swap文件系统,以下:

wKiom1fdHeHTCUVzAAQ4Zk7CP-Q170.jpg而后建立swap并启用,命令以下

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

结果以下:

wKioL1fdHsGSIAc8AADTgBB-eAs042.jpg

三、写一个脚本

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

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

答:脚本以下

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

结果以下:

wKiom1feg12CEA7jAAGaK0KOTkI159.jpg

四、总结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+

五、建立一个大小为10G的RAID1,要求有一个空闲盘,并且CHUNK大小为128k;

答:RAID1要求最少2块硬盘,因为还要一个空闲盘,因此总共使用3块硬盘建立;首先在3块硬盘中建立一个10G空间,以/dev/sda为例:

[root@csd ~]# 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.

分区建立结果以下:

wKioL1fejkSiqnioAAYaPK-xUfY510.jpg

建立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.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.

结果以下:

wKioL1felHvwzmFjAAQo10QctSk555.jpg

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

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

wKioL1femyWhA-E1AAZbPXFZ7Yg100.jpg

建立raid5:

[root@csd ~]# 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.

结果以下:

wKiom1fen3Cg51lRAATYPC0p0Lc583.jpg

挂载过程:

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

wKiom1feoF_iFzTZAAPuwHGrYGU610.jpg

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

wKioL1feorLTyG22AAHTBLgAa1E060.jpg

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

wKiom1fepUzA5R0wAAMwWcRa1SE783.jpg

结果以下:

wKiom1feplmgZsCTAATVlfZAL94036.jpg

七、写一个脚本

(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 "本次统计 $# 个文件"

结果以下:

wKiom1fesGWBP_gaAADy27LgUfQ032.jpg

八、写一个脚本

(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 "本次添加$# 个用户"                   ##统计添加了多少个用户

结果以下:

用户名已存在的状况

wKiom1fevZShU72OAABfkY85We8291.jpg

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

wKioL1feve-irb7_AADMYl4tFKE788.jpg

符合全部条件的状况

wKioL1fevnvx8AXzAAFfPn4uC8E911.jpg

九、写一个脚本,新建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"

结果以下:

wKiom1ffsQmCVbpNAAJ4HnKna2w227.jpg

十、写一脚本,分别统计/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"

结果以下:

wKioL1ffth_CdskzAADvgrX8uwg994.jpg

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

wKioL1fftmrCF88HAAE7LVaej48048.jpg

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

wKioL1fftrvCarmUAAErAMkcx6I581.jpg

十一、写一个脚本,显示当前系统上全部默认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"

结果以下:

wKioL1ffvVrSFS4wAAXi_ljPoMw404.jpg

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

答:脚本代码以下:

#!/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 个"

结果以下:

wKioL1ffyRLhoG7WAAE1XkDFlOM978.jpg

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

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

[root@csd ~]# 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:

wKiom1ffze6DzGi6AAG78CyioYw119.jpg

建立GV:

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

wKioL1ff0DDz53kuAAIaI90-nLU784.jpg

建立LV:

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

wKiom1ff0MySxuMdAAIAiKU4D18171.jpg

格式化mylv1:

wKiom1ff0ZWgLZlgAAQxuo1iYzI065.jpg

挂载至/users,支持acl:

wKiom1ff06WhScyaAAI7z0SAinc621.jpg

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

wKioL1ff02TTD9foAAMtvoORHCI533.jpg

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

答:

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

wKioL1ff1pPwN-KPAAK9kyI68ck966.jpg

1五、扩展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 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.

结果以下:

wKiom1ff1-bgk6uwAAK9kyI68ck845.jpg

扩展后数据状况:

wKioL1ff2DLBF-bKAACfyxovOXM817.jpg

1六、缩减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

结果以下:

wKiom1ff5fmQ6ADhAAKr5U-c1Ag078.jpg

1七、对mylv1建立快照,并经过备份数据;要求保留原有的属主属组等信息;

答:

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

结果以下:

wKiom1ff6AXCFeoaAAK-3p63uyU689.jpg

相关文章
相关标签/搜索