设为首页 收藏本站
查看: 2095|回复: 0

[经验分享] Linux作业7

[复制链接]

尚未签到

发表于 2018-5-19 11:54:16 | 显示全部楼层 |阅读模式
  1、创建一个10G分区,并格式为ext4文件系统;
     (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;
     (2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳;
  1、创建分区;

  使用fdisk命令在磁盘/dev/sdb上创建分区,过程如下:
DSC0000.png

  

  2、格式化分区;

  使用mke2fs命令将/dev/sdb1格式为ext4文件系统:
  mke2fs命令选项说明:
        -t:指定文件系统;

      -b:指定磁盘块大小,单位为字节;

      -m:指定为管理人员预留的空间占据的百分比;为避免空间耗尽导致管理操作(mv、cp等)无法完成,可使用该参数指定一定比例的预留空间,默认5%;
      -L:指定卷标;
DSC0001.png

  

  CentOS7中格式化分区时默认已经包含acl挂载选项,可通过tune2fs -l命令进行查看,如下:
DSC0002.png

  如果不包含,可通过tune2fs命令选项来修改默认的挂载属性,如下:

  tune2fs -o {FEATURE|^FEATURE}
  FEATURE:启用默认属性
  ^FEATURE:禁用默认属性
DSC0003.png

  

  3、挂载文件系统
  使用mount命令挂载文件系统,过程如下:

  1).创建文件系统挂载目录,即挂载点;

  2).使用mount命令进行挂载,并使用-o来启用或禁用文件系统选项;

  mount文件系统选项说明:

  noexec: 不允许文件系统上的文件运行为进程,即使文件有执行权限;

  noatime:在访问文件或目录时不更新其访问时间戳,以减少磁盘I/O;
  3).验证;
DSC0004.png

     

  2、创建一个大小为1G的swap分区,并创建好文件系统,并启用之;
      1). 使用free命令查看下当前的swap空间大小:
      DSC0005.png
  

      2). 使用fdisk命令创建一个分区,并修改该分区ID为82(82为swap文件系统的ID,默认为83):

      DSC0006.png
  

  使用partx命令通知kernel重读磁盘分区表,选项说明如下:
  -a: 通知kernel添加制定或全部分区

  -v: verbose,显示详细信息

  -s: 列出分区

DSC0007.png

  

      3). 使用mkswap命令将分区格式化为swap文件系统:

      DSC0008.png
  

      4). 使用swapon命令激活swap交换分区:

          swapon命令常用选项说明:
          -a: 激活所有的交换分区;
          -v: verbose,显示详细信息;

          -s, --summary: 显示摘要信息;

          -p, --priority <prio>: 指定交换分区设备的优先级;
           DSC0009.png
  

      5). 验证:

      DSC00010.png
      可使用swapon -s或free -m命令验证结果。  
  

  3、写一个脚本
     (1)、获取并列出当前系统上的所有磁盘设备;
#!/bin/bash
#
echo "$(fdisk -l /dev/[sh]d[a-z] | grep -o '^Disk /dev/[sh]d[a-z]')"   结果:

DSC00011.png

     (2)、显示每个磁盘设备上每个分区相关的空间使用信息;
#!/bin/bash
#
diskDev=$(fdisk -l /dev/[sh]d[a-z] | grep -o '^/dev/[sh]d[a-z][[:digit:]]')
for i in $diskDev
do
    echo "$(fdisk -l $i)\n"
done  结果:
      DSC00012.png
  4、总结RAID的各个级别及其组合方式和性能的不同;
      常用RAID级别及说明如下表:
RAID级别描述性能冗余可用空间最少磁盘数
RAID-0被称为条带卷(strip);将多块磁盘并行组织起来,将数据条带化后切割为多段(chunk),平均同时存往各磁盘,读取数据时也从多块磁盘读取数据后再在RAID控制器的组织下组合为完整的数据;读、写性能均有提升无容错能力,且风险率会随磁盘个数的增加而增长N*min(S1,S2,...)
    磁盘个数*最小磁盘可用空间
2
RAID-1被称为镜像卷(mirror);将多块磁盘并行组织起来,数据chunk在多块磁盘各写一份,读取时分别从各磁盘读取;读性能提升,写性能略有下降1*min(S1,S2,…)
    由最小可用空间的磁盘决定
2
RAID-4
    不常用
磁盘分两类,一类用来存储数据,另一类用来存储校验码(数据磁盘的异或值)。校验码磁盘至少有一块,数据chunk以条带方式存储到各数据磁盘上,同时计算出数据的异或值并存储于校验磁盘;读写性能有提升,但更换磁盘后数据恢复时校验盘会成为瓶颈有,允许坏1块磁盘(N-1)*min(S1,S2,…)
    数据磁盘个数*最小磁盘的可用空间
3
RAID-5与RAID-4类似,不同之处为各磁盘轮流作为校验磁盘;读、写性能均有提升有,允许坏1块磁盘(N-1)*min(S1,S2,…)
    数据磁盘个数*最小磁盘的可用空间

RAID-6
    不常用
与RAID-5类似,不同之处为同时由2块磁盘轮流作为校验盘;读、写性能均有提升有,允许坏2块磁盘(N-2)*min(S1,S2,…)4
RAID-10多块磁盘先组织为RAID-1,再将多组磁盘镜像组织为RAID-0,即先镜像再条带;读、写性能均有提升有,每组镜像最多同时只能坏一块N*min(S1,S2,...)/2
    所有最小磁盘空间数量的一半
4
RAID-01
    不常用
与RAID-10相反,多块磁盘先组织为条带,多组磁盘条带再组织为镜像;读、写性能均有提升有,同时只能有一个条带组出现故障,哪怕整个条带组的所有磁盘都出故障;N*min(S1,S2,...)/2
    所有最小磁盘空间数量的一半
4
JBOD将多块磁盘的可用空间串行组织为一个大的连续空间;无容错能力,且风险率会随磁盘个数的增加而增长sum(S1,S2,…)N
  

  5、创建一个大小为10G的RAID1,要求有一个空闲盘,而且CHUNK大小为128k;
    1). 创建三个大小为10G的分区,用来模拟三块磁盘(RAID-1至少需要2块磁盘,1块用来模拟空闲盘):
      DSC00013.png
  

    通知kernel重读磁盘分区表:
      DSC00014.png
     
    2). 创建RAID:
      Linux下的软RAID是通过kernel的md模块来实现的,mdadm命令为kernel的md模块的管理命令,其常用选项及相关参数如下:
      语法格式:mdadm [mode] <raiddevice> [options] <component-devices>
      模式:
  创建:-C

  -n #: 使用#个块设备来创建此RAID;
  -l #:指明要创建的RAID的级别,mdadm支持的RAID级别:LINEAR, RAID0, RAID1, RAID4, RAID5, RAID6, RAID10;;
  -a {yes|no}:自动创建目标RAID设备的设备文件;
  -c CHUNK_SIZE: 指明块大小;
  -x #: 指明空闲盘的个数;
  装配: -A
  监控: -F
  管理:
  -f:将磁盘人工标记为损坏(faulty)
  -r:将块设备从RAID卷中移除
  -a:向RAID卷中添加块设备
  -S, --stop:拆除RAID卷,释放所有块设备
# mdadm -C /dev/md0 -a yes -l 1 -n 2 -x 1 -c 128 /dev/sdb{1,2,3}       检查RAID设备状态,带有冗余功能的RAID在创建后需要做按位对齐,使得某磁盘在损坏后可以恢复:
          检查命令: mdadm -D 或 cat /proc/mdstat
DSC00015.png

  对齐成功后:

DSC00016.png

  

   3). 使用RAID:
    (1).格式化。将/dev/md0格式化为ext4文件系统,并指明卷标为“MD0”:
DSC00017.png

  

    (2).挂载。将/dev/md0挂载至/mydata,并检查挂载状态:
      DSC00018.png
  

   4). 模拟磁盘故障:
      将/dev/sdb1人工标记为故障,来模拟磁盘错误,并观察空闲磁块的状态:

      DSC00019.png
  

      卸载故障磁盘:

      DSC00020.png
     

      向RAID卷中添加块设备/dev/sdb1:

      DSC00021.png
  

   5). 拆除RAID卷:
      拆除RAID前需先卸载该RAID:

      DSC00022.png
  

     

  6、创建一个大小为4G的RAID5设备,chunk大小为256k,格式化ext4文件系统,要求可开机自动挂载至/backup目录,而且不更新访问时间戳,且支持acl功能;
    1). 创建四个大小为4G的分区(/dev/sdb{5,6,7,8}),用来模拟组建RAID卷的磁盘设备,其三个作为数据盘,一个作为空闲盘:
      DSC00023.png    
  

    2). 创建RAID-5,chunk为256K:
      DSC00024.png
  

    3). 格式化RAID设备为ext4文件系统,指明卷标,并检查默认挂载属性:
      DSC00025.png
  

    4). 修改/etc/fstab文件:
      /etc/fstab文件中增加一行,使用卷标自动挂载RAID设备,并使用noatime参数。如下:

LABEL=MD0   /mydata     ext4    defaults,noatime,acl    0 0   运行以下命令,根据/etc/fstab挂载设备:
# mount -a  

    5). 查看挂载状态:

      DSC00026.png
  

  7、写一个脚本

     (1) 接受一个以上文件路径作为参数;
     (2) 显示每个文件拥有的行数;
     (3) 总结说明本次共为几个文件统计了其行数;
#!/bin/bash
#
if [ $# -eq 0 ];then
    echo "Parameters cannot be empty!"
    exit 1
fi
fileCount=0
for i in $@
do
    if [ -f $i ]
    then
        linecount=($(wc -l $i))
        echo "$i has $linecount lines."
        let fileCount++
    else
        echo "$i not be regular file!"
    fi
done
echo -e "Counted files: $fileCount \n"       结果:
DSC00027.png

  8、写一个脚本
     (1) 传递两个以上字符串当作用户名;
     (2) 创建这些用户;且密码同用户名;
     (3) 总结说明共创建了几个用户;
#/bin/bash
#
if [ ! $UID -eq 0 ]
then
    echo "Please login root."
    exit 1
fi
if [ $# -eq 0 ]
then
    echo -e "Parameters cannot be empty!\n"
fi
userCount=0
for user in $@
do
    if id $user &> /dev/null
    then
        echo "$user already exists."
    else
        useradd $user
        [ $? -eq 0 ] && echo "$user" | passwd --stdin $user > /dev/null || echo -e "$user not created!\n"
        echo "$user to create success!"
        let userCount++
    fi
done
echo -e "Total of created user: $userCount\n"       结果:
      DSC00028.png
  

  9、写一个脚本,新建20个用户,visitor1-visitor20;计算他们的ID之和;
#/bin/bash
#
declare -i userNum=1
declare -i sumUID=0
while [ $userNum -le 20 ] ; do
    if id visitor$userNum &> /dev/null ; then
        echo "visitor$userNum already existing!"
    else
        useradd visitor$userNum &> /dev/null && echo "visitor$userNum" | passwd --stdin visitor$userNum &> /dev/null
        [ $? -eq 0 ] && echo "visitor$userNum created successfully." || echo "visitor$userNum Chris create failure!"
    fi
    echo "visitor$userNum UID is: $(id -u visitor$userNum)"
    let sumUID+=$(id -u visitor$userNum)
    let userNum++
done
echo "The sum of the UID: $sumUID"      结果:

DSC00029.png

  

  10、写一脚本,分别统计/etc/rc.d/rc.sysinit、/etc/rc.d/init.d/functions和/etc/fstab文件中以#号开头的行数之和,以及总的空白行数;
#/bin/bash
#
declare -i sum1=0  # Sum for # lines
declare -i sum2=0  # Sum for null lines
for file in $@; do
    if [ -f $file ]; then
            s1=$(grep '^#' $file | wc -l)
            s2=$(grep '^$' $file | wc -l)
            echo "$file # lines: $s1"
            echo "$file null lines: $s2"
            sum1+=s1
            sum2+=s2
    else
        echo "$file not found or not text file!"
    fi
done
echo -e "\nTotal # lines: $sum1"
echo "Total null lines: $sum2"  结果:

   DSC00030.png
  11、写一个脚本,显示当前系统上所有默认shell为bash的用户的用户名、UID以及此类所有用户的UID之和;
#!/bin/bash
#
userList=$(grep '\/bin\/bash$' /etc/passwd)
declare -i sumUID=0
for user in $userList ; do
    userName=$(echo $user | cut -d: -f1)
    uid=$(echo $user | cut -d: -f3)
    echo -e "User: $userName\tUID: $uid"
    let sumUID+=$uid
done
echo "Sum UID: $sumUID"      结果:
      DSC00031.png
  

  12、写一个脚本,显示当前系统上所有,拥有附加组的用户的用户名;并说明共有多少个此类用户;
#!/bin/bash
#
allUsername=$(cut -d: -f1 /etc/passwd)
declare -i sumSG=0
echo 'There are supplementary groups of user: '
for user in $allUsername; do
    if id $user | grep ',' &> /dev/null ; then
       echo -n "$user "
       let sumSG++
    fi
done
echo -e  "\nSum users: $sumSG"      结果:
      DSC00032.png
  

  13、创建一个由至少两个物理卷组成的大小为20G的卷组;要求,PE大小为8M;而在卷组中创建一个大小为5G的逻辑卷mylv1,格式化为ext4文件系统,开机自动挂载至/users目录,支持acl;
      1). 创建磁盘块。创建/dev/sdb{1,2,3}并调整分区ID为8e,用来模拟构成PV的磁盘块:

           DSC00033.png
  

      2). 创建PV;

          使用pvcreate命令创建PV,使用pvs命令显示pv列表:
           DSC00034.png
  

      3). 创建VG;

          创建vg命令:vgcreate  [-s #[kKmMgGtTpPeE]] VolumeGroupName  PhysicalDevicePath [PhysicalDevicePath...]
              -s: 指定PE的大小

          显示vg详情:vgdisplay [VolumeGroupName]
           DSC00035.png
  

      4). 创建LV;

          LV创建命令:lvcreate -L #[mMgGtT] -n NAME VolumeGroup
              -L: 指定LV的大小;

              -n: 批定LV的名称;

          LV查看命令:lvdisplay  [-a|--all]  [-v|--verbose]  [VolumeGroupName|LogicalVolume{Name|Path} ...]
          创建大小为5G的逻辑卷mylv1:

               DSC00036.png
  
  5). 格式化LV,并检查默认挂载选项;

  将/dev/mapper/myvg-mylv1格式化为ext4文件系统:
   DSC00037.png
  
  6). 创建/users挂载点,修改/etc/fstab使LV自动挂载,并启用acl功能:
# mkdir -v /users
mkdir: created directory ‘/users’
# blkid /dev/mapper/myvg-mylv1
/dev/mapper/myvg-mylv1: UUID="18c0e102-3072-4b5f-96c8-6c914169ae71" TYPE="ext4"
# vim /etc/fstab
UUID=18c0e102-3072-4b5f-96c8-6c914169ae71   /users  ext4    defaults,acl    0 0     #在/etc/fstab文件中添加该行
# mount -a      结果:
      DSC00038.png
  

  14、新建用户magedu;其家目录为/users/magedu,而后su切换至此用户,复制多个文件至家目录;
[root@C1 ~]# useradd -d /users/magedu magedu
[root@C1 ~]# su - magedu
[magedu@C1 ~]$ pwd
/users/magedu
[magedu@C1 ~]$ cp /etc/fstab /etc/hosts .  

  15、扩展mylv1至9G,确保扩展完成后原有数据完全可用;
      扩展LV分区需要两步:

      1). 使用lvextend命令扩展LV;

          # lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME
      2). 使用resize2fs命令扩展逻辑卷上的文件系统,当不指定[NEW_SIZE]时代表扩展至最大;
          # resize2fs /dev/VG_NAME/LV_NAME [NEW_SIZE]
      DSC00039.png
      检查源数据是否可用:

      DSC00040.png
  16、缩减mylv1至7G,确保缩减完成后原有数据完全可用;
      收缩LV需经过以下步骤:

          1). 卸载文件。收缩LV不允许在线运行;
          2). 收缩前强制检查LV;
          3). 收缩LV前需使用resize2fs命令收缩LV上的文件系统。注意:必须保证收缩后的空间可以存下该LV下的所有数据;
          4). 使用lvreduce命令收缩LV至指定大小,空间大小的指定也可使用相对值,如:-2G;
          5). 收缩LV后重新挂载该LV;

          6). 检查数据是否可用;

      过程如下:

           DSC00041.png
  

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


  •   对LV创建的快照可以保存LV在某一核的所有信息,包换状态信息和数据;
  •   快照的大小可以于LV相同也可不同,这取决于快照的使用期限,当对LV创建快照时相当于创建了一个LV上元数据的监听器,当LV上数据更新时会首先将LV中的数据复制一份到快照后再对LV上的数据进行修改,在读取数据时会先检查快照中是否有数据,有则读取,没有则会读取与之对应的LV上的数据,此时快照相当于LV的另一个入口;

  •   LV和与之对应的快照必须在同一个卷组(VG)中;

  •   LV的快照可以单独挂载;

  LV快照创建命令:

  lvcreate -s -L #[mMgGtT] -p r -n snapshot_lv_name original_lv_name           
  -s|--snapshot: 指明创建快照;
  -L|--size: 指定快照大小;
  -p|--permission  {r|rw}: 指定快照是否可写,通常快照为只读;
  -n|--name    SnapshotLogicalVolume{Name|Path}: 指定快照名;
  对mylv1创建快照并检查快照信息:
DSC00042.png

  

  查看LV上的元数据信息,修改后再与快照上同文件元数据对比:   

DSC00043.png

  


  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-461986-1-1.html 上篇帖子: linux目录2 下篇帖子: Linux终端命令大全
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表