脚本与磁盘管理
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-onoexec,noatime/dev/sdb1/mydata
-o 设置选项,noexec表示禁止程序自动运行,noatime表示不更新文件的访问时间戳
接下设置自动挂载
# cp/etc/fstab/etc/fstab.yyyymmdd
# echo "/dev/sdb1/mydataext4noexec,noatime00">>/etc/fstab
按照/etc/fstab重新加载所有挂载项
# mount -a
#df-m查看挂载结果
3、创建一个大小为1G的swap分区,并启用。
创建swap交换文件
#ddif=/dev/zeroof=/var/swapfilebs=1024count=1024k
交换文件格式化并转换为swap分区
mkswap /var/swapfile
设置swapfile文件的访问权限为600
chmod -R 0600 /var/swapfile
挂载并激活分区:
swapon/var/swapfile
查看swap分区是否正常添加
free -h 或 swapon -s
修改 fstab 配置,设置开机自动挂载该分区
echo "/var/swapfileswapswapdefaults 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-hostnamewww.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【脚本与磁盘管理】脚本运行:$shuserid.sh
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"
脚本内容说明如下:
$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
# vgcreatedatavg/dev/sdb{1,2,3}
#vgdisplay
(3)创建LV
#lvcreate -L200M -n datalvdatavg
#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/datalv200M
再使用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的大小。
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- Docker应用:容器间通信与Mariadb数据库主从复制
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- 第326天
- Shell-Bash变量与运算符
- 逻辑回归的理解与python示例
- Guava|Guava RateLimiter与限流算法
- 我和你之前距离
- CGI,FastCGI,PHP-CGI与PHP-FPM
- 原生家庭之痛与超越