首页 > 代码库 > 第七周作业

第七周作业

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


新增一个20G磁盘,使用lsblk命令列出块设备信息,设备名为sdb


技术分享

技术分享


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


# mke2fs -t ext4 -b 2048 -m 2 -L MYDATA /dev/sdb1

     -t 文件系统类型,-b blcok大小,-m 预留空间百分比,-L 指明卷标

# tune2fs -o acl /dev/sdb1


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


# mkdir -p /data/mydata

  #-p 自动创建各级目录

# mount -t ext4 -o noexec,noatime /dev/sdb1 /data/mydata/

  #挂载至/data/mydata目录


技术分享


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


# fdisk /dev/sdb
# mkswap -L SWAP /dev/sdb2   #创建交换分区
# swapon /dev/sdb2   #启用交换分区

 技术分享

创建1G分区,创建交换分区前,设置分区类型的id为82(swap)


技术分享

技术分享

 

3、写一个脚本

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

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


#/bin/bash
for i in $(fdisk -l | grep ‘^/dev/[sh]d‘ | cut -d‘ ‘ -f1 );do
        echo  "fdisk $i"
        df -h $i
done


4、总结RAID的各个级别及其组合方式和性能的不同;

独立冗余磁盘阵列(Redundant Arrays of Independent Disks,RAID)

RAID-0: 没有奇偶校验的条带

            读、写性能提升;

            可用空间:N*min(S1,S2,...)

            无容错能力

            最少磁盘数:2, 2+

技术分享技术分享

RAID-1:独立磁盘冗余阵列

读性能提升、写性能略有下降;

可用空间:1*min(S1,S2,...)

有冗余能力

最少磁盘数:2, 2+

技术分享

技术分享

RAID-3: 带奇偶验证码的并行传送

使用单块磁盘存储简单的 奇偶校验信息,所以最终磁盘数量为 N+1 。当这N+1个硬盘中的其中一个硬盘出现故障时, 从其它N个硬盘中的数据也可以恢复原始数据,当更换一个新硬盘后,系统可以重新恢复完整 的校验容错信息。会把数据的写入操作分散到多个磁盘上进行,不管是向哪一个数据盘写入数据, 都需要同时重写校验盘中的相关信息。因此,对于那些经常需要执行大量写入操作的应用来 说,校验盘的负载将会很大,无法满足程序的运行速度,从而导致整个RAID系统性能的下降

         技术分享

RAID-4: 带奇偶校验码的独立磁盘结构

与RAID3类似,但RAID4是按块(扇区)存取。无须像RAID3那样,哪怕每一次小I/O操作也要涉 及全组,只需涉及组中两块硬盘(一块数据盘,一块校验盘)即可,从而提高了小量数据 I/O速度。

技术分享

RAID-5:分布式奇偶校验的独立磁盘结构

            读、写性能提升

            可用空间:(N-1)*min(S1,S2,...)

            有容错能力:1块磁盘

            最少磁盘数:3, 3+

数据以块为单位分布到各个硬盘上。RAID 5不对数据进行备份,而是把数据和与其相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上。当RAID5的一个磁盘数据损坏后,利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据

技术分享技术分享

RAID-6: 两种存储的奇偶校验码的磁盘结构

读、写性能提升

            可用空间:(N-2)*min(S1,S2,...)

            有容错能力:2块磁盘

            最少磁盘数:4, 4+

RAID6技术是在RAID 5基础上,为了进一步加强数据保护而设计的一种RAID方式,实际上是一种扩展RAID 5等级。与RAID 5的不同之处于除了每个硬盘上都有同级数据XOR校验区外,还有一个针对每个数据块的XOR校验区。

技术分享技术分享

RAID-10:镜象阵列条带(磁盘利用率50%)

                            Raid 10是一个Raid 0与Raid1的组合体

读、写性能提升

可用空间:N*min(S1,S2,...)/2

有容错能力:每组镜像最多只能坏一块;

最少磁盘数:4, 4+

技术分享技术分享


5、创建一个大小为10G的RAID1,要求有一个空闲盘,而且CHUNK大小为128k;

技术分享

mdadm命令用于管理系统软件RAID硬盘阵列,格式为:"mdadm [模式] <RAID设备名称> [选项] [成员设备名称]"

[模式] 

-C 创建一个新的阵列,每个设备具有超级块

-v 显示过程

-S  停止阵列

-A 将已经停止的阵列重新装配


[选项]

-a {yes|no}:自动创建目标RAID设备的设备文件

-r: 移除磁盘

-n: 指定设备数量

-x #: 指明空闲盘(热备磁盘)的个数 

-l  指定raid级别

-c CHUNK_SIZE: 指明块大小


# mdadm -Cv /dev/md0 -a yes -n 2 -x 1 -l 1 -c 128 /dev/sdb /dev/sdc /dev/sdd          
mdadm: chunk size ignored for this level
mdadm: /dev/sdb appears to be part of a raid array:
       level=raid0 devices=0 ctime=Thu Jan  1 08:00:00 1970
mdadm: partition table exists on /dev/sdb but will be lost or
       meaningless after creating array
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=http://www.mamicode.com/0.90>


初始化时间和磁盘阵列的读写的应用相关,使用cat /proc/mdstat信息查询RAID阵列当前重构的速度和预期的完成时间

# mke2fs -t ext4 /dev/md0   #将RAID磁盘阵列格式化为ext4格式
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 2619392 blocks
130969 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2151677952
80 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
 
Allocating group tables: 完成                           
正在写入inode表: 完成                           
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
# mdadm -D /dev/md0   #显示raid的详细信息
/dev/md0:
        Version : 1.2                              #RAID的版本
  Creation Time : Fri Sep 16 20:16:21 2016        #创建的时间
     Raid Level : raid1        #RAID级别
     Array Size : 10477568 (9.99 GiB 10.73 GB)          #阵列容量
  Used Dev Size : 10477568 (9.99 GiB 10.73 GB)       #可用空间
   Raid Devices : 2                    #Raid设备数量                            
  Total Devices : 3                    #总设备数
    Persistence : Superblock is persistent           #超级块是持久的
    Update Time : Fri Sep 16 20:17:10 2016       #更新时间
          State : active, resyncing             #各个设备的状态
Active Devices : 2
Working Devices : 3
Failed Devices : 0
  Spare Devices : 1
 
  Resync Status : 99% complete
 
           Name : localhost.localdomain:0  (local to host localhost.localdomain)
           UUID : a7333f65:b0b3b600:876412aa:88493bca
         Events : 16
 
    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc
 
       2       8       48        -      spare   /dev/sdd

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


 技术分享


# mdadm -Cv /dev/md0 -a yes -n 3  -l 5 -c 256 /dev/sdb /dev/sdc /dev/sdd
# mkfs -t ext4 /dev/md0        #格式化为ext4文件系统


# vim /etc/fstab

  #添加下面一行

/dev/md0               /backup                  ext4    acl,nodiratime  0 0

或者

# echo "/dev/md0 /backup ext4 acl,nodiratime 0 0" >> /etc/fstab

文件系统挂载配置文件/etc/fstab格式

要挂载的设备或伪文件系统     挂载点     文件系统类型      挂载选项     转储频率      自检次序

7、写一个脚本

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

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

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

#!/bin/bash
#
num=0
line=0
if [ $# -gt 0 ];then                 #传递给脚本的参数的个数大于0
for i in $*;do
    line=$(wc -l $i | cut -d‘ ‘ -f 1 )
    let num++
    echo -e "File path:$i\nline number:$line"
done
echo -e "Total files:$num"
else
if [ $# -eq 0 ]; then                #传递给脚本的参数的个数等于0
    echo "please input File path"
fi
fi


条件测试表达式前后必须有空格


8、写一个脚本

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

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

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

#!/bin/bash
count=0
if [ $# -le 2 ];then            #传递给脚本的参数的个数小于2
echo "greater than two user name!"
exit 1
fi
for i in $*;do                                                 
id $i &>/dev/null               #$i为用户名字符串
if [ $? -eq 0 ];then            #执行状态等于0,命令执行成功
echo "user $i exist!"
else
useradd $i && echo "$i" | passwd --stdin "$i"               
#&& 逻辑与,当命令1正确执行, 则命令2才会执行。当命令1执行不正确, 则命令2不会执行。
let count++                     #创建用户一次,变量count自加一次
echo "user:$i added"
fi
done
echo "total $count users"


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

#/bin/bash
uid=0
idsum=0
for i in {1..20};do
   if id visitor$i &> /dev/null; then  #id命令执行成功,then 后边的语句将会被执行;否则,执行 else 后边的语句
      echo "visitor$i exist!"
      uid=$(cat /etc/passwd | grep "visitor$i" | cut -d: -f3)   #用户名存在,取出uid
else
      useradd visitor$i &> /dev/null
      uid=$(cat /etc/passwd | grep "visitor$i" | cut -d: -f3)  #用户名不存在,添加用户名,取出uid
   fi
let idsum+=$uid          #uid数字叠加
done
echo "users id sums: $idsum"


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

#!/bin/bash
line1=0
line2=0
for i in {/etc/rc.d/rc.sysinit /etc/rc.d/init.d/functions /etc/fstab};do
    let line1+=$(cat $i | grep "^[#]" | wc -l) #号开头的行数之和
    let line2+=$(cat $i | grep "^$" | wc -l)    空白行数总和
done
   echo "# lines:$line1"
   echo "spaces lines:$line2"


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


#!/bin/bash
num=0
grep "bash$" /etc/passwd | awk -F: ‘{print $1,$3}‘         
#过滤/etc/passwd默认shell为bash的行,以冒号取第一,第三字段
for i in $(grep "bash$" /etc/passwd | cut -d: -f1);do
    let num+=$i
done
echo "UID sum is $num"


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

#!/bin/bash
num=0
user=$(cut -d: -f1  /etc/passwd)
for i in $user; do
    group=$(id $i | cut -d‘ ‘ -f3 | awk -F, ‘{print $2}‘ )
    if [ -n "$group" ];then                      #判断字符串是否非空
        echo "$i"
        let num=$num+1
    fi
done  
echo "user num $num"

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

# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk
├─sda1            8:1    0  500M  0 part /boot
└─sda2            8:2    0 19.5G  0 part
  ├─centos-root 253:0    0 17.5G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   40G  0 disk
├─sdb1            8:17   0   10G  0 part
└─sdb2            8:18   0   10G  0 part
sr0              11:0    1  7.2G  0 rom  
# pvcreate /dev/sdb{1,2}        #创建物理卷(PV)
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdb2" successfully created
#  pvs                     #报告物理卷的信息
  PV         VG     Fmt  Attr PSize  PFree
  /dev/sda2  centos lvm2 a--  19.51g 40.00m
  /dev/sdb1  myvg   lvm2 a--   9.99g  4.99g
  /dev/sdb2  myvg   lvm2 a--   9.99g  9.99g
# vgcreate -s 8M  myvg  /dev/sdb{1,2}  
#创建卷组(VG),-s指明物理区域(PE)大小,PE为VG的最小组成单位
  Volume group "myvg" successfully created
# vgs myvg             #报告卷组的信息
  VG   #PV #LV #SN Attr   VSize  VFree
  myvg   2   1   0 wz--n- 19.98g 14.98g
# vgdisplay myvg      #显示卷组的详细属性
  --- Volume group ---
  VG Name               myvg                        
  System ID            
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               19.98 GiB
  PE Size               8.00 MiB
  Total PE              2558
  Alloc PE / Size       640 / 5.00 GiB
  Free  PE / Size       1918 / 14.98 GiB
  VG UUID               hE9CPp-pOWw-Td3Z-bEkQ-5jD3-Knyu-BziWzC
# lvcreate -L 5G -n /dev/myvg/mylv1 /dev/myvg     
#创建逻辑卷,-L指定大小,-n指定逻辑卷名,
  Logical volume "mylv1" created.
#逻辑卷中可用于分配的最小存储单元LE(Logical Extents)    
# lvs myvg/mylv1        #报告逻辑卷的信息 
  LV    VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  mylv1 myvg -wi-ao---- 5.00g   
# mkfs -t ext4 /dev/myvg/mylv1 
# mkdir users
# vim /etc/fstab
#要挂载的设备或伪文件系统     挂载点     文件系统类型      挂载选项     转储频率      自检次序
#添加一行
/dev/myvg/mylv1         /users                  ext4    defaults,acl              0 0
# mount -o acl /dev/myvg/mylv1 /users     #挂载到/users目录


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

# useradd -dm /users/magedu magedu
# su - magedu
$ cp /etc/issue /etc/fstab ./


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

# umount /users/        #卸载mylv1卷
# lvextend -L 9G -n /dev/myvg/mylv1           #扩展逻辑卷
  Size of logical volume myvg/mylv1 changed from 5.00 GiB (640 extents) to 9.00 GiB (1152 extents).
  Logical volume mylv1 successfully resized.  
# e2fsck -f /dev/myvg/mylv1              #ext系列文件专用的检测修复工具 
e2fsck 1.42.9 (28-Dec-2013)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/myvg/mylv1: 11/327680 files (0.0% non-contiguous), 58462/1310720 blocks
[root@localhost ~]# resize2fs /dev/myvg/mylv1       #文件系统重定义大小
resize2fs 1.42.9 (28-Dec-2013)
The filesystem is already 1310720 blocks long.  Nothing to do!
# lvs /dev/myvg/mylv1
  LV    VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  mylv1 myvg -wi-a----- 9.00g

  

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

# umount /users/
# e2fsck -f /dev/myvg/mylv1
# resize2fs /dev/myvg/mylv1 7G
# lvreduce -L 7G -n /dev/myvg/mylv1       #缩减逻辑卷至7G,
或者使用简便命令
# lvresize -L 7G -r /dev/myvg/mylv1   #设置mylv1为7G,-r为同时更改其文件系统大小
# lvs /dev/myvg/mylv1


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

# lvcreate -L 6G -s -n lv1snapshot myvg/mylv1

-s  创建快照

-n 为快照命名

-p{r|rw} 设置访问权限为只读(R)或读写(RW)。默认是读写。

# lvs /dev/myvg/lv1snapshot
  LV          VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv1snapshot myvg swi-a-s--- 6.00g      mylv1  0.00


# lvdisplay /dev/myvg/lv1snapshot
  --- Logical volume ---
  LV Path                /dev/myvg/lv1snapshot     #快照逻辑卷名称
  LV Name                lv1snapshot            #当前使用的卷组名
  VG Name                myvg
  LV UUID                0IP9M3-UHcY-izyq-UfZ4-WucA-fzeL-0xxjdw
  LV Write Access        read/write   #读写模式下的快照卷,我们甚至可以挂载并使用该卷
  LV Creation host, time localhost.localdomain, 2016-09-17 19:33:07 +0800 #快照创建时间。这个很重要,因为快照将跟踪此时间之后的每个改变
  LV snapshot status     active destination for mylv1
  #该快照属于mylv1逻辑卷生效
  LV Status              available         #逻辑卷在线并可用
  # open                 0
  LV Size                7.00 GiB         #我们录制快照的源卷大小
  Current LE             896
  COW-table size         6.00 GiB    
  #写时复制表大小,Cow = copy on Write,这是说对mylv1卷所作的任何改变都会写入此快照
  COW-table LE           768
  Allocated to snapshot  0.00%       #当前使用的快照比例大小
  Snapshot chunk size    4.00 KiB    #快照组块的大小
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:5





第七周作业