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的大小。