马哥教育网络班22期+第7周课程练习 忍者乱太郎喻成

第七周 
1、创建一个10G分区,并格式为ext4文件系统;
   (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;
    我个人比较喜欢使用交互式的分区工具fdisk
    我以fdisk为例:
        先添加一个硬盘到虚拟机后
 使用命令: fdisk -l 查询分区情况:

        Disk /dev/sda: 64.4 GB, 64424509440 bytes, 125829120 sectors  
        Units = sectors of 1 * 512 = 512 bytes        
        Sector size (logical/physical): 512 bytes / 512 bytes        
        I/O size (minimum/optimal): 512 bytes / 512 bytes        
        Disk label type: dos        
        Disk identifier: 0x0002a567
        Device Boot      Start         End      Blocks   Id  System        
        /dev/sda1   *        2048     1026047      512000   83  Linux        
        /dev/sda2         1026048   125829119    62401536   8e  Linux LVM
        Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors       
        Units = sectors of 1 * 512 = 512 bytes       
        Sector size (logical/physical): 512 bytes / 512 bytes       
        I/O size (minimum/optimal): 512 bytes / 512 bytes

   可以看见我挂载了一个新的未分区硬盘/dev/sdb到计算机上, 现在用fdisk对/dev/sdb分区
   命令为
         fdisk /dev/sdb # 进入相关sdb的fdisk交互式编程接口
         g 回车 # 因为是新硬盘,先建立GPT分区表
         fdisk 回应:Building a new GPT disklabel (GUID: 4FD83B09-C8A1-4617-BE78-80F87C388356)
         n 回车 # 创建一个分区
         Partition number (1-128, default 1): 直接回车使用默认值
         First sector (2048-41943006, default 2048): 直接回车
         Last sector, +sectors or +size{K,M,G,T,P} (2048-41943006, default 41943006): +10G 回车完成n选项

        根据mke2fs的文档 -b block-size -m reserved-blocks-percentage -L volume-label
         为新的分区建立文件系统

   mkfs.ext4 -b 2048 -m 2 -L MYDATA /dev/sdb1

      
       用tune2fs -l观察新分区的文件系统
       tune2fs -l /dev/sdb1
       得到的回复是:

tune2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:   MYDATA
Last mounted on:          <not available>
Filesystem UUID:          e1d96c33-8ab1-43c1-9fdd-b56e245b6adf
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              655360
Block count:              5242880
Reserved block count:     104857
Free blocks:              5121266
Free inodes:              655349
First block:              0
Block size:               2048
Fragment size:            2048
Group descriptor size:    64
Reserved GDT blocks:      512
Blocks per group:         16384
Fragments per group:      16384
Inodes per group:         2048
Inode blocks per group:   256
Flex block group size:    16
Filesystem created:       Wed Nov  9 07:37:45 2016
Last mount time:          n/a
Last write time:          Wed Nov  9 07:37:52 2016
Mount count:              0
Maximum mount count:      -1
Last checked:             Wed Nov  9 07:37:45 2016
Check interval:           0 (<none>)
Lifetime writes:          65 MB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:           256
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      c107d650-fe51-4421-bccc-a756008aa3d9
Journal backup:           inode blocks

此文件系统已经满足要求 acl 已经在默认挂载选项上, 如果不是则使用下指令来更改默认挂载选项:
   

    tune2fs -o acl /dev/sdb1

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

  mkdir -p /data/mydata
  mount -o noatime -o noauto /dev/sdb1 /data/mydata

2、创建一个大小为1G的swap分区,并创建好文件系统,并启用之;
    创建一个1G的分区 /dev/sdb2 方法同上一题

    mkswap /dev/sdb2
    swapon /dev/sdb2

    使用swap 命令可以看到 swap 分区已经挂载好了

    NAME      TYPE       SIZE USED PRIO
    /dev/dm-1 partition    2G   3M   -1
    /dev/sdb2 partition 1024M   0B   -2

   
3、写一个脚本
   (1)、获取并列出当前系统上的所有磁盘设备;
       

fdisk -l | grep  -o "\/dev\/s.."| uniq?

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

 fdisk -l $(fdisk -l | grep  -o "\/dev\/s.."| uniq)

4、总结RAID的各个级别及其组合方式和性能的不同;
     RAID-0:对两块磁盘进行并行读写,性能上有较大提升,应该提高了一倍
     没有数据被备份所以无容错能力,空间利用率100%
    RAID-1:又称磁盘镜像,两块磁盘进行全盘备份,一份数据会同时写入两块磁盘中,全盘备份,安全性高,但是磁盘利用率为1/2
                   读取的时候性能会有提升应该会接近RAID-0,但是写入的时候性能就会下降至略微小于两块磁盘中写速度较慢的磁盘的写速度.

     RAID-2:因为商业环境用的不多故简单地说,N个磁盘以bit的方式平行存放数据,M个磁盘存放汉明校验码,
                   读写数据不考虑校验是单个硬盘的N倍。磁盘利用率也很高为N/(M+N), 但实现复杂,不适合工业界粗暴的方式
     RAID-3:与RAID-2 相同只不过使用了较为简单的亦或校验法所以M为1,磁盘利用率提高但是安全性下降
     RAID-4:与RAID-3 相同只不过RAID-3是以位为单位进行读写,但是RAID4是以块为单位,这样集中校验读写速度会略有提高
     2,3,4商业运用不广泛
     RAID-5:4 的升级版,将奇偶校验分布到磁盘列阵结构中而不是使用单独的备份磁盘使得安全性有所提高,工业界应用较多。

    RAID-10:高可靠性与高效磁盘结构。先做RAID-1,再做RAID-0
                   读性能有提升提升近N倍,可用空间下降一半,冗余能力:每组可以容纳一块坏,但不能有一组坏。从概率上优于RAID-01
    RAID-01:先做RAID-0,再做RAID-1,读写性能有提升近N倍,可用空间下降一半冗余能力: 每组一块坏组坏,一组坏没事, 从概率上坏于RAID-10

5、创建一个大小为10G的RAID1,要求有一个空闲盘,而且CHUNK大小为128k;
   连结新硬盘   /dev/sdc 分出两个10G的分区(如题一),/dev/sdc1, /dev/sdc2

     mdadm --create /dev/md0 --level=1 --raid-devices=2 --chunk=128K /dev/sdc{1,2}

   创建完毕

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

   mdadm --create /dev/md1 --level=5 --raid-devices=2 --chunk=256K /dev/sdc{3,4}

   mkfs.ext4 /dev/md1 #格式化RAID设备到ext4文件格式
   编辑/etc/fstab 添加一行 实现开机自动挂载

  /dev/md1      /backup         ext4      defaults,noatime,acl      0      2

7、写一个脚本
   (1) 接受一个以上文件路径作为参数;
   (2) 显示每个文件拥有的行数;
   (3) 总结说明本次共为几个文件统计了其行数;

#!/bin/bash

paths=$@;
files_num_total=$#;
declare -i lines_num_total=0;

for path in $paths; do    
    wc $path;    
    let lines_num_total+=$(wc -l $path| awk '{print $1;}');
done
printf "%d files counted, %d lines in total\n" $files_num_total $lines_num_total

8、写一个脚本
   (1) 传递两个以上字符串当作用户名;
   (2) 创建这些用户;且密码同用户名;
   (3) 总结说明共创建了几个用户;

#!/bin/bash

names=$@;
names_num=$#;
declare -i users_added=0;

for name in $names; do    
    useradd $name -p $name&&let "users_added++";
done
printf "%d names input, %d users added in total\n" $names_num $users_added

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

#!/bin/bash
declare -i sum_ids;

for x in $(seq 1 20); do    
    useradd visitor$x
done;
for x in $(seq 1 20); do    
    sum_ids+=$(cat /etc/passwd| awk -F: -v name=visitor$x '{if($1==name) {print $3;}}')
done;
printf "The sum of user ids are %s\n" $sum_ids

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

#!/bin/bash

declare -a files=("/etc/rc.d/rc.sysinit" "/etc/rc.d/init.d/functions" "/etc/fstab")
function count_lines 
{        
    sharp_line_numbers=$(cat $1 | grep "^#"|wc -l);
    empty_line_numbers=$(cat $1 | grep "^\s*$"|wc -l);        
    printf "%d lines start with #, %d empty lines in %s\n" $sharp_line_numbers $empty_line_numbers $1;
}

for file in ${files[@]}; do        
    count_lines $file;
done

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

#!/bin/bash

declare -i uid_sum = 0;
while read line
do    
    shell_using=$(echo $line| cut -d":" -f7);    
    if [ $shell_using == "/bin/bash" ]; then         
        uid=$(echo $line| cut -d":" -f3);         
        uname=$(echo $line| cut -d":" -f1);         
        printf "user %s %s use bash\n" $uid $uname;         
        let uid_sum+=uid;    
    fi
done < /etc/passwd
printf "uid sum are %d\n" $uid_sum;

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

#!/bin/bash
declare -i uid_sum=0;
declare extra_users="";
while read line
do   
    extra_users_row=$(echo $line| cut -d":" -f4);   
    if [[ ! -z $extra_users_row ]]; then      
        if [[ ! -z $extra_users ]]; then          
            extra_users="$extra_users,$extra_users_row";      
        else          
            extra_users="$extra_users_row";      
        fi   
    fi
done < /etc/group

IFS=', ' read -r -a extra_users_array <<< "$extra_users"

declare -A extra_users_set;

for name in ${extra_users_array[@]}; 
    do  extra_users_set[$name]=1;
done

printf "%s have extra groups and the total number of them are %d" $extra_users ${#extra_users_set[@]}

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

pvcreate /dev/sdb1
pvcreate /dev/sdb2

创建卷组

vgcreate test_vg /dev/sdb1 -s 8M
vgextend test_vg /dev/sdb2

创建逻辑卷

lvcreate -L 5G test_vg -n mylvl

格式化文件系统ext4

mkfs.ext4 /dev/test_vg/mylvl

编辑/etc/fstab 添加一行 实现开机自动挂载

/dev/test_vg/mylvl      /users         ext4      defaults,acl      0      3

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

useradd magedu -b /users

切换至此用户su magedu
复制多个文件至家目录(var内部的所有文件)

cp -R /var ~/

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

lvextend -L +4G /dev/test_vg/mylvl

重塑文件系统适应新空间

 resize2fs /dev/test_vg/mylvl

16、缩减mylv1至7G,确保缩减完成后原有数据完全可用;
  lv缩减需要先卸载

  umount /users

  首先缩减文件系统

  e2fsck -f /dev/test_vg/mylvl
  lvreduce -L 7G /dev/test_vg/mylvl

  再重新挂载即可

  mount /dev/test_vg/mylvl /users

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

  lvcreate -L1G -s -n backup /dev/test_vg/mylvl

  如有需要恢复,挂载后覆盖被备份逻辑卷挂载路径即可
 
 

原创文章,作者:chengyu,如若转载,请注明出处:http://www.178linux.com/59443

(0)
chengyuchengyu
上一篇 2016-11-21 10:13
下一篇 2016-11-21 10:13

相关推荐

  • 条件选择if语句

    单分支的if语句 if 判断条件; then 条件为真的分支代码 fi       单分支if结构的执行流程:首先判断条件测试操作的结果,如果返回值为0表示条件成立,则执行then后面的命令序列,一直到遇见fi为止表示结束,继续执行其他脚本代码;如果返回不为0,则忽略then后面的命令序列,直接跳至fi行以后执行其他脚…

    Linux干货 2016-08-16
  • 管窥Linux史

    管窥Linux史 众所周知,绝大部分发行版本都被称为类Unix系统,要说Linux就应该先了解Unix的历史,Unix的起源应该赘述MULTICS的历史,Unix的父辈是颇具开拓性的Multics项目…… Unix创世纪 二战结束以后,冷战开始了。1957年苏联发射了第一颗人造卫星,进而开始筹备发射载人宇宙飞船。与此同时,美国宇航局的研究却连连受挫。航天领域…

    Linux干货 2016-10-14
  • 生产环境日志审计

         日志审计,就是记录所有系统和相关用户行为的信息,并且可以自动分析,处理。在中小企业环境中,一般都是在单个服务器上记录日志,而大型企业的生产环境当中,会有专门的日志服务器乃至集群。本文通过sudo配合centos自带的rsyslog(syslog)服务,进行日志审计。    &nb…

    Linux干货 2016-10-20
  • SElinux 管理

    SELinux: Secure Enhanced Linux(安全强化的linux) SElinux安全上下文是由五个元素组成的: ①User:指示登录系统的用户类型,如root,user_u,system_u,多数本地进程都属于自由(unconfined)进程 ②Role:定义文件,进程和用户的用途:文件:object_r,进程和用户:syste…

    Linux干货 2016-09-26
  • 条件判断、文件查找与压缩

    一、条件判断 1.条件选择if语句   选择执行:   注意:if语句可嵌套 (1).单分支if 判断条件:then   条件为真的分支代码fi (2).双分支if 判断条件; then   条件为真的分支代码else   条件为假的分支代码fi (3).多分…

    Linux干货 2016-08-15
  • Linux之磁盘管理

    Linux之磁盘管理       linux系统中, 一切都是文件, 而这些文件都是存储在磁盘中, 因此对于磁盘的管理是非常重要的, Linux磁盘管理的好坏, 直接关系到整个系统的性能问题, 本文主要介绍了磁盘结构, 分区类型, 管理分区, 管理文件系统, 挂载设备, 管理虚拟内存这几大项的内容.    &…

    Linux干货 2016-08-29

评论列表(1条)

  • luoweiro
    luoweiro 2016-11-29 22:56

    对于LVM这部分只是,希望能和RAID一起总结一下,而且各自的特点都要有详细的说明。