脚本与磁盘管理

1、描述GPT是什么,应该怎么使用。

GPT是GUID Partition Table,GUID分区表。GUID(Globals Unique Identifiers)全局唯一识别。GPT支持128个分区,使用64位,支持8ZB(512Byte/block) 以及64ZB(4096Byte/block)大小的磁盘。
使用128位UUID表示磁盘和分区,GPT分区表自动备份在头和尾两份,并有CRC校验位。具体分为4个区域:
EFI信息区(含保护性MRB区和GPT头)、分区表、GPT分区(最大可有128个分区)、备份分区表信息
UEFI(统一扩展固件接口)硬件支持GPT,它的开机过程是:开机-->UEFI初始化-->引导操作系统-->进入系统
相关的使用命令:
1.gdisk创建GPT分区(交互式创建)与fdisk相似
        -l /dev/sdx 查看分区信息
       以下为交互菜单的信息
        (?|m) 显示交互菜单与帮助
          n 建立分区
          d 删除分区
          c 更改分区名字
        I 显示分区的详细信息
          p 显示分区信息
          t   转换分区类型
          a 将指定分区设置/取消 活动分区
          l 查看分区类型
          o 重建分区表
          v 验证分区表,显示剩余没有被分区划分的扇区数量
          q 退出不保存,不保存,所有的修改都不生效
          w 退出并保存

2.parted命令(交互式或命令式,一旦操作即时生效,使用时请注意)
   parted /dev/sdb mklabel gpt 给指定的磁盘指定GPT的分区方式
   parted  /dev/sdb mkpart primary 1 200(单位默认为M)创建新分区
   parted  /dev/sdb print  显示分区信息
   parted  /dev/sdb rm 1  删除分区
   parted  -l /dev/sdb 查看分区
3.partprobe同步硬盘上分区表到内存中。当两者不同步时使用。

2、创建一个10G的分区,并格式化为ext4文件系统。要求:

(1)block大小为2048,预留空间20%,卷标为MYDATA,

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

(3)可开机自动挂载。

以root用户登录,假设要处理的磁盘为/dev/sdb
# gdisk  /dev/sdb
输入 n新建分区,按p添加主分区,分区编号默认,开始位置默认,分区大小增加"+10G",然后输入w保存分区设置
接下来创建文件系统(假设上面建立的分区编号为/dev/sdb1
#  mkfs -t ext4 -b 2048  -m 20   -L "MYDATA"   /dev/sdb1
-t 指定文件系统类型, -m指定预留空间,-L指定卷标
# mkdir   /mydata       创建挂载点目录 
# mount   -o  noexec,noatime  /dev/sdb1    /mydata
-o 设置选项,noexec表示禁止程序自动运行,noatime表示不更新文件的访问时间戳
接下设置自动挂载
# cp   /etc/fstab   /etc/fstab.yyyymmdd
# echo "/dev/sdb1   /mydata    ext4  noexec,noatime  0   0"  >>/etc/fstab
按照/etc/fstab重新加载所有挂载项
# mount -a
#df  -m   查看挂载结果

3、创建一个大小为1G的swap分区,并启用。

创建swap交换文件
#dd  if=/dev/zero  of=/var/swapfile  bs=1024   count=1024k
交换文件格式化并转换为swap分区
mkswap /var/swapfile
设置swapfile文件的访问权限为600
chmod -R 0600 /var/swapfile
挂载并激活分区:
swapon  /var/swapfile
查看swap分区是否正常添加
 free -h 或 swapon -s
修改 fstab 配置,设置开机自动挂载该分区
echo "/var/swapfile    swap   swap   defaults 0 0" >> /etc/fstab

4、编写脚本计算/etc/passwd文件中第10个用户和第20个用户id号之和。

脚本内容如下:

#!/bin/bash
awk -F: 'BEGIN{sum=0}{if(NR==10 || NR==20)sum=sum+$3}END{print sum}' /etc/passwd

脚本说明如下:
“-F: ”是由于/etc/passwd文件是以“:”分隔的字段的,用户id位于第3个字段,即$3
BEGIN{sum=0}   在进入行处理之前,先设置一个变量sum,初始值为0
NR 是awk内置变量之一,表示记录的行号
{if(NR==10 || NR==20)sum=sum+$3}  表示当行号为10或20时,把$3字段(即用户ID号)加入到sum中汇总
END{print sum}  表示在行处理之后,打印出sum变量的值。

5、将当前主机名保存到hostName变量中,主机名如果为空,或者为localhost.localdomain则将设置为www.magedu.com

脚本内容如下:

#!/bin/bash
hostName=$(hostname)
[ "${hostName}" == "" -o "${hostName}" == "localhost.localdomain" ] && {
        hostname www.magedu.com
        hostnamectl set-hostname  www.magedu.com
}
echo "Now,the HOSTNAME is $(hostname)"

脚本说明如下:
使用$(COMMAND),可以得到COMMAND命令执行的结果内容
"${hostName}" 字符串变量在比较中最后要加上引号和花括号
字符串是否相等使用“==”进行比较
-o 表示两个条件的或操作,即条件1或者条件2为真时,才为真
[  条件表达式  ] && { ....}  是更为简单写法,实现类似if语句的功能,注意[]内侧两边的空格不能少
hostname  新主机名  :可以临时修改主机名(仅当前shell内有效)
hostnamectl set-hostname 新主机名 :可以永久修改主机名(在centos7中可用)

6、编写脚本,通过命令行参数传入一个用户名,判断id号是偶数还是奇数。

脚本内容如下:

#!/bin/bash
userName=$1
userID=$(id -u $userName)
echo "$userName,your UID is $userID"
res=$(expr $userID % 2)
[ "${res}" == "0" ] && echo "UID is even number" || echo "UID is odd number"

脚本运行:  $sh  userid.sh 
脚本内容说明如下:
$1表示脚本的命令行参数的第一个
"id -u $userName"  表示取后面这个用户名对应的UID
expr $userID % 2   表示把$userID模除2,即得到除的余数
[  条件表达式  ] && 语句1 ||  语句2:当条件表达式为真时,执行语句1,否则执行语句2.,实现类似if...then...else....fi的功能。

7、lvm基本应用以及扩展缩减实现
(1)先创建PV:
    #fdisk  /dev/sdb
    输入t来修改分区类型,输入要修改的分区号1,再输入8e
    输入t来修改分区类型,输入要修改的分区号2,再输入8e
    输入t来修改分区类型,输入要修改的分区号3,再输入8e
    输入w保存修改退出
    #pvcreate  /dev/sdb{1,2,3}
    #pvdisplay   /dev/sdb{1,2,3}

 (2)创建VG
    # vgcreate  datavg  /dev/sdb{1,2,3}
    #vgdisplay  
    (3)创建LV
    #lvcreate -L200M -n datalv   datavg
    #lvdisplay
    (4)创建文件系统
    # mkfs -t ext4  /dev/datavg/datalv
    #mkdir  /mnt/mydata
    # mount /dev/datavg/datalv   /mnt/mydata
    (5)扩展
    #fdisk  /dev/sdb
    输入t来修改分区类型,输入要修改的分区号4,再输入8e
    输入w保存修改退出
    #pvcreate  /dev/sdb4
    把sdb4加入到datavg中,实现datavg的扩容
    # vgextend datavg  /dev/sdb4
    # vgs  查看datavg的使用情况,是否有空闲的空间
    #给datalv增加100M的空间
    # lvextend -L 100M /dev/datavg/datalv
    #重新加载内核中的文件系统
    #resize2fs  /dev/datavg/datalv
   (6)缩减
    确定要缩减为多大?至少能容纳原有的所有数据,逻辑卷缩减有风险,所以要卸载并强行检测文件系统
    缩减LV的步骤:
           先卸载逻辑卷
            #umount  /dev/datavg/datalv
            e2fsck命令检测lv上空余的空间
            #e2fsck -f  /dev/datavg/datalv
            使用resize2fs将文件系统减少到200M
            #resize2fs  /dev/datavg/datalv  200M
            再使用lvreduce命令将逻辑卷减少到200M
            #lvreduce -L 200M /dev/datavg/datalv  
            注意,文件系统大小和逻辑卷大小一定要保持一致才行,如果逻辑卷大于文件系统,由于部分区域未格式化成文件系统会造成空间的浪费,如果逻辑卷小于文件系统,那数据就出问题了
            然后重新挂载
            # mount /dev/datavg/datalv   /mnt/mydata

     缩减VG的步骤:
            将/dev/sdb4上存储的数据移到其它物理卷中
            #pvmove   /dev/sdb4
            将/dev/sdb4从datavg卷组中移除
            # vgreduce datavg /dev/sdb4
            将/dev/sdb4从物理卷上移除
            #pvremove /dev/sdb4
            #vgs    查看现在vg的大小。

你可能感兴趣的:(脚本与磁盘管理)