【Shell 脚本速成】03、Shell 脚本实战案例(一)数据磁盘初始化

目录

一、案例应用场景

二、案例需求

脚本所需相关知识点

三、案例算法

四、代码实现

五、实现验证


 

一、案例应用场景

        生产环境中的服务器一般会分为系统盘和数据盘两种磁盘,以dell R730举例,该服务器是一个2U的机架式服务器,满载可以挂载14块磁盘(2块在机箱内做系统盘,12块在面板做数据盘),我们一般的策略是系统盘做raid1,保障系统稳定性12块数据磁盘我们做raid10 或者 raid50,保障数据盘容错的同时还能做到优化IO的效果。

        raid磁盘的容量是一定的,线上的数据又是不断增长的,也就是说总有一天会把你的数据磁盘填满,那怎么办?为了解决这个问题,人们想到了LVM(逻辑卷管理系统),当前数据盘容量不够用的时候,我们可以通过san存储获得网络磁盘,然后将该网络存储动态加入LVM中的卷组后就可以扩大LV了。整个过程采用在线扩容的方式,不会影响线上业务正是基于这个原因,我们又在系统中把raid数据盘在存数据之前做成了LVM磁盘,方便后续的扩容。

        注意:有数据的磁盘不能再做LVM,因为需要格式化,数据会全部丢失。必须提前布局,否则就得提前准备跑路资金了。

二、案例需求

给虚拟机添加一块磁盘(以sdb为例),要求使用脚本对该磁盘分三个区:

 1)主分区 /dev/sdb3 543M 文件系统 ext4 要求开机自动挂载到/data/data1目录

 2) 逻辑分区 /dev/sdb5 2G

 3) 逻辑分区 /dev/sdb6 3G

然后使用/dev/sdb5、/dev/sdb6 新建卷组vg100,并创建一个PE为16M,容量为2.5G的逻辑卷lv100,并格式化为xfs,默认开机自动挂载到/data/data2目录

脚本所需相关知识点

  • fdisk
  • mkfs
  • /etc/fstab
  • lvm(逻辑卷)

可以查看下面两篇文章了解相关知识点:

fdisk 命令实现磁盘分区详细教程_Stars.Sky的博客-CSDN博客_使用fdisk命令进行硬盘分区 

LVM(逻辑卷管理器)_Stars.Sky的博客-CSDN博客_lvm逻辑卷管理器

三、案例算法

算法:完成一个任务的代码思路。

1、分区
2、创建逻辑卷
    2.1  创建物理卷
    2.2  创建卷组
    2.3  创建逻辑卷
3、格式化 /dev/sdb3   /dev/vg100/lv100
4、修改 /etc/fstab文件
5、挂载分区
6、验证并输出挂载结果

四、代码实现

代码实现的要点:要清楚每一步的步骤,不同的系统可能有细微的差别,一味的复制可不行的,需要提前动手做一下fdisk分区,把步骤捋清楚。

注意:我是CentOS 7.6 操作系统,适用于下面这个脚本。其他系统(ubuntu、红帽等)可能不适用。

[root@shell ~]# vi disk_partition.sh
#!/bin/bash

#1、分区
# fdisk 是交互式命令;<< 是追加输出,把fdisk 的问题答案按照顺序提前写好在一个包里或括号里,EOF相当于括号,实现自动回答;
# 3与+543M 中间空一行相当于回车,于此类推;e 创建扩展分区;3、4代表创建sdb3和sdb4分区。

fdisk /dev/sdb <<EOF
n
p
3

+543M
n
e
4


n
l

+2G
n
l

+3G
w
EOF

#2、创建逻辑卷
   #2.1 创建物理卷
    pvcreate /dev/sdb5 /dev/sdb6
   #2.2 创建卷组
    vgcreate -s 16M vg100 /dev/sdb{5..6}
   #2.3 创建逻辑卷
    lvcreate -L 2.5G -n lv100 vg100

#3、格式化
mkfs.ext4 /dev/sdb3
mkfs.xfs /dev/vg100/lv100

#4、修改/etc/fstab,实现自动挂载
echo  "/dev/sdb3   /data/data1 ext4  defaults   0 0" >> /etc/fstab
echo "/dev/vg100/lv100 /data/data2  xfs   defaults 0 0" >> /etc/fstab

#5、创建并挂载分区
mkdir -p /data/data{1..2}
mount -a

#6、验证并输出挂载结果
mount |grep "/dev/sdb3"
test $? -eq 0&&echo "/dev/sdb3 挂载成功" || echo "/dev/sdb3挂载失败"

# 注意检索的时候,mount输出中LV的表示方式,或者直接检索挂载点/data/data2也可以。
mount |grep "vg100-lv100"
test $? -eq 0&&echo "/dev/vg100/lv100 挂载成功" || echo "/dev/vg100/lv100挂载失败"

五、实现验证

# 使用如下命令查看是否挂载成功
[root@sql-master ~]# sh disk_partition.sh

[root@sql-master ~]# ls /data/

[root@sql-master ~]# df -Th

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

[root@sql-master ~]# mount

上一篇文章:【Shell 脚本速成】02、Shell 变量详解_Stars.Sky的博客-CSDN博客 

参考文档:shell脚本实战案例-数据磁盘初始化-组团学

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Stars.Sky

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值