磁盘分区、软RAID创建及shell脚本参数传递,for循环,运算表达式应用

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

  • 先使用fdisk工具创建一个10G的新分区。使用fdisk打开要创建磁盘分区的物理设备fdisk /dev/sdb,然后使用n指令创建新的分区,分区类型选此处选择为主分区,第一个柱面使用默认的1,最后的柱面,使用+10G这种表示方式,表示创建的分区大小为10G。


  • 创建后可以使用p指令,查看刚才创建的分区,名为/dev/sdb1

  • 然后使用w指令,保存刚才所做的修改。

(1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA,默认挂载属性包含acl。
使用mke2fs指令完成文件系统的创建,-b选项指定块大小,-m指定预留空间百分比,-L指定卷标。操作过程如下:


使用tune2fs指令可以设置卷的默认挂载属性,操作方式如下:

> [root@bogon ~]# tune2fs -o acl /dev/sdb1

需要注意的是:虽然指定的默认挂载属性包含acl,但在使用mount指令或者查看/etc/mtab文件时看不到acl这一属性,此时可以使用指令dumpe2fs -h /dev/sdb1来查看,其中

Default mount options: acl
即表示acl属性被启用了。

(2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳。
使用mount指令完成文件系统与目录的挂载操作,只有在完成这一步骤以后,物理磁盘空间才能为系统所用。使用-o选项指定noexec禁止程序自动运行,noatime指定不更新文件的访问时间戳。操作过程如下:

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

  • 先使用fdisk工具创建一个1G的分区并指定分区类型为swap。操作过程如下:

  • 使用mkswap指令创建swap分区
    [root@bogon ~]# mkswap /dev/sdb2

  • 使用swapon指令启用新的swap分区
    [root@bogon ~]# swapon /dev/sdb2

  • 使用blkid指令可以查看之前挂载的两个新分区(/dev/sdb1和/dev/sdb2)。

3、写一个脚本:获取当前系统上的所有磁盘设备;并显示每个磁盘设备上每个分区的空间使用信息

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

    RAID-0:
        读出性能提升
        可用空间:N*min(S1,S2,...)
        无容错能力
        最小磁盘数:2
        
    RAID-1:(同一个数据存两份)
        读性能提升,写性能略有下降
        可用空间:1*min(S1,S2,...)
        有冗余能力
        最少磁盘数:2

    
    RAID-5:
        读、写性能提升
        可用空间:(N-1)*min(S1,S2,...)
        有容错能力:1块磁盘
        最少磁盘数:3
        
    RAID-6:
        读、写性能提升
        可用空间:(N-2)*min(S1,S2,...)
        有容错能力:2块磁盘
        最少磁盘数:4
        
混合类型:
    RAID-10:先组建RAID-0再将RAID-0组建为RAID-1
        读、写性能提升
        可用空间:N*min(S1,S2,...)/2
        有容错能力:每组镜像最多只能块一块
        最少磁盘数:4
        
    RAID-01:先组建RAID-1再将RAID-1组建为RAID-0
    
    JBOD:Just a Bunch Of Disks
        功能:将多块磁盘的空间合并一个大的连续空间使用
        可用空间:sum(S1,S2,...)

5、创建一个大小为10G的RAID1,要求有一个空闲盘,而且CHUNK大小为128k。
创建RAID1最少需要2块磁盘且它是同一份数据保存两份(在两块磁盘上都有),可用空间里取决于N块磁盘中容量最小的那块。这里还要求有一个空闲盘,因此需要使用3块磁盘组建RAID1。在Linux系统中创建软RAID的指令为:mdadm,软raid可以基于磁盘分区来实现,即将不同的分区组成RAID组,但如果是将同一物理磁盘的不同分区组成RAID实际意义并不大,当一块物理磁盘故障后,很可能整个RAID组都一同不可用了。所以此处我使用的是给虚拟机添加多块(虚拟)磁盘来实现的,每块磁盘设定为10G大小。具体操作指令为:
mdadm -C /dev/md0 -n 2 -l 1 -c 128 -x 1 /dev/sd{c,d,e}
-C 称为创建模式,表示后面的指令是用来创建指定的RAID
-n 2 指定使用2个块设备来创建此RAID,RAID1最少需要2块磁盘,-n表示在这一RAID组中active的块设备数量
-l 1 指定RAID的级别,1表示RAID1
-c 128 指定CHUNK的大小为128,单位为KB,默认大小为512K
-x 1 指定作为空闲盘的数量

创建过程如下:  
[root@bogon ~]# mdadm -C /dev/md0 -n 2 -l 1 -c 128 -x 1 /dev/sd{c,d,e}   
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  
Continue creating array? y  
mdadm: Defaulting to version 1.2 metadata     
mdadm: array /dev/md0 started.  
        
创建完成后使用cat /proc/mdstat或mdadm -D /dev/md0进行查看其详细状态信息:    
[root@bogon ~]# cat /proc/mdstat  
Personalities : [raid1]  #RAID级别为RAID1  
md0 : active raid1 sde[2](S) sdd[1] sdc[0]  
      10477568 blocks super 1.2 [2/2] [UU]  
      
unused devices: <none>  
[root@bogon ~]# mdadm -D /dev/md0  #查看更为详细的RAID信息  
/dev/md0:  
        Version : 1.2  
  Creation Time : Sun Dec 11 19:28:53 2016  
     Raid Level : raid1  
     Array Size : 10477568 (9.99 GiB 10.73 GB)  
  Used Dev Size : 10477568 (9.99 GiB 10.73 GB)  
   Raid Devices : 2  
  Total Devices : 3  
    Persistence : Superblock is persistent  

    Update Time : Sun Dec 11 19:29:47 2016  
          State : clean   
   Active Devices : 2  
  Working Devices : 3  
  Failed Devices : 0  
    Spare Devices : 1  

           Name : bogon:0  (local to host bogon)  
           UUID : 2beef9f4:5631d26b:078cdccc:ef2fe348  
         Events : 17  

    Number   Major   Minor   RaidDevice State  
       0       8       32        0      active sync   /dev/sdc  
       1       8       48        1      active sync   /dev/sdd  

       2       8       64        -      spare   /dev/sde

6、创建一个大小为4G的RAID5设备,chunk大小为256k,格式化ext4文件系统,要求可开机自动挂载至/backup目录,而且不更新访问时间戳,且支持acl功能
RAID5要求的最少磁盘数为3块,可用空间为(N-1)*min(S1,S2,S3…),要创建一个大小为4G的RAID5,最小的磁盘空间可以设置为2G。但实际生产环境中不大会有这么小的磁盘了。操作步骤如下所示:

  • 使用fdisk创建3个大小为2G的分区:

[root@bogon ~]# fdisk -l /dev/sdb

Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 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: 0x9dca1ea0

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         262     2104483+  83  Linux
/dev/sdb2             263         524     2104515   83  Linux
/dev/sdb3             525         786     2104515   83  Linux
  • 使用mdadm创建chunk为256k的RAID5磁盘组
    mdadm -C /dev/md1 -n 3 -l 5 -c 256 /dev/sdb{1,2,3}

  • 查看创建的RAID5的状态:

[root@bogon ~]# cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4]
md1 : active raid5 sdb3[3] sdb2[1] sdb1[0]
      4204544 blocks super 1.2 level 5, 256k chunk, algorithm 2 [3/3] [UUU]
      
md0 : active raid1 sde[2](S) sdd[1] sdc[0]
      10477568 blocks super 1.2 [2/2] [UU]
      
unused devices: <none>
        
[root@bogon ~]# mdadm -D /dev/md1
/dev/md1:
        Version : 1.2
  Creation Time : Sun Dec 11 22:28:39 2016
     Raid Level : raid5
     Array Size : 4204544 (4.01 GiB 4.31 GB)
  Used Dev Size : 2102272 (2.00 GiB 2.15 GB)
  • 使用mke2fs指令将此RAID5设备格式化成ext4文件系统:

[root@bogon ~]# mke2fs -t mkfs.ext4 /dev/md1

  • 要实现开机自动挂载功能必须修改/etc/fstab文件,将刚创建的RAID5设备挂载上去。
    使用vim编辑器,在/etc/fstab文件中添加如下一行:


  • 使用mount -a指令将/etc/fstab中的设备全部挂载上。

7、写一个脚本 实现以下功能: 接受一个以上文件路径作为参数, 显示每个文件拥有的行数,总结说明本次共为几个文件统计了其行数。
设定此脚本至少需要一个参数并给出提示,$#表示参数的个数。
将脚本提供的所有参数组成一个列表放入for语句依次进行循环执行echo "$i has $(wc -l $i | cut -d" " -f1) lines."$\*表示所有的参数。

#!/bin/bash
#
[ $# -eq 0 ] && echo "At least on path." && exit 1 

for i in $*;do
    echo "$i has $(wc -l $i | cut -d" " -f1) lines."
done

echo "A total of $# files were counted."

8、写一个脚本:传递两个以上字符串当作用户名; 创建这些用户;且密码同用户名;总结说明共创建了几个用户。
依然使用$#来判断参数个数,要求至少输入3个字符串作为用户名。然后将全部参数传递给for进行遍历,循环执行useraddpasswd指令完成用户创建,最后使用$#显示一共添加了多少个用户。

#!/bin/bash
#
[ $# -lt 2 ] && echo "At least gave there strings." && exit 1

for i in $*;do
    useradd $i
    echo $i | passwd --stdin $i
done

echo "$# users added."

9、写一个脚本,新建20个用户,visitor1-visitor20;计算他们的ID之和。
使用for循环语句遍历1-20的列表,依次创建用户,然后使用for循环提取出每个用户的ID,然后作为计算表达式的参数进行算术运算。

#!/bin/bash
#
for i in {1..20};do
    for id in $(useradd visitor$i | id -u visitor$i);do
    let sum+=${id}
    done
done
echo "Sum:$sum."

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

(0)
N24_lantianN24_lantian
上一篇 2016-12-26
下一篇 2016-12-26

相关推荐

  • shell脚本编程之if、case条件语句

    程序执行三种顺序     顺序执行          选择执行          循环执行       &nb…

    Linux干货 2016-08-18
  • Linux磁盘管理

    设备文件 一切皆文件 open(), read(), write(), close() 磁盘结构 磁盘接口类型 并行 IDE:133MB/s SCSI:640MB/s 串口 SATA:6Gbps SAS:6Gbps USB:480MB/s rpm rotationsper minute 硬盘每分钟转数 硬盘结构  图一…

    Linux干货 2016-08-30
  • rsyslog记录日志于mysql

    rsyslog记录日志于mysql:     前提:准备好msql server或mariadb server;     (1) 安装rsyslog连接至mysql server的驱动模块;        &n…

    Linux干货 2016-12-05
  • Http协议中的各种长度限制总结

    HTTP1.0的格式 request(HTTP请求消息)结构:一个请求行.部分消息头,以及实体内容,其中的一些消息内容都是可选择的.消息头和实体内容之间要用空行分开. GET /index.html HTTP/1.1 //请求头,下面都是消息头.Accept: */*Accept-Languang:en-usConnection:keep-aliveHost…

    Linux干货 2015-04-04
  • linux网络管理

    什么是计算机网络     计算机网络是指将不同地理位置上,具有独立功能的计算机和网络设备通过通信链路连接起来,通过操作系统,网络管理软件,和网络通信协议的共同组合下的计算机系统团体,实现资源共享,信息传递的网络。计算机网络的组成部分有各种微小大型计算机,网桥,交换机,路由器,传输介质等网络设备,相应的软件系统,相应的通…

    Linux干货 2016-09-05
  • 配额限制、RAID、LVM

    配置配额系统 在内核中执行以文件系统为单位启用,对不同组或者用户的策略不同; 根据块或者节点进行限制 软限制(soft limit) 硬限制(hard limit) 初始化(/home) 分区挂载选项( /etc/fstab ):usrquota、grpquota 创建数据库: 将selinux调为禁用状态:Permissive quotacheck -cu…

    Linux干货 2017-04-26