4

Linux系统LVM逻辑卷创建过程以及自动化脚本

 3 years ago
source link: https://zhang.ge/5109.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Linux系统LVM逻辑卷创建过程以及自动化脚本 | 张戈博客
Jager · 9月3日 · 2016年linux 5643次已读

最近在上海新建机房的时候,给了我2台M2机型服务器,在做初始化的时候发现有一堆磁盘:

[root@Centos64:~]# fdisk -l | grep '300.1 GB' | sort
Disk /dev/sda: 300.1 GB, 300069052416 bytes
Disk /dev/sdb: 300.1 GB, 300069052416 bytes
Disk /dev/sdc: 300.1 GB, 300069052416 bytes
Disk /dev/sdd: 300.1 GB, 300069052416 bytes
Disk /dev/sde: 300.1 GB, 300069052416 bytes
Disk /dev/sdf: 300.1 GB, 300069052416 bytes
Disk /dev/sdg: 300.1 GB, 300069052416 bytes
Disk /dev/sdh: 300.1 GB, 300069052416 bytes
Disk /dev/sdi: 300.1 GB, 300069052416 bytes
Disk /dev/sdj: 300.1 GB, 300069052416 bytes
Disk /dev/sdk: 300.1 GB, 300069052416 bytes
Disk /dev/sdl: 300.1 GB, 300069052416 bytes

其中挂载的只有 /dev/sda,其他都在那闲着。运管那边告诉我这个机型不能做raid。而根据我这边的业务需求,我并不能一次用到这么多分区,所以必须使用LVM合并使用。

关于LVM的创建,目前网络上一堆详细教程,用起来也非常简单,这里就只贴一下我的过程。

①、用fdisk给每一个磁盘创建一个8e分区:

[root@Centos64:~]# fdisk /dev/sdb
The device presents a logical sector size that is smaller than
the physical sector size. Aligning to a physical sector (or optimal
I/O) size boundary is recommended, or performance may be impacted.
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): n #创建
Command action
e extended
p primary partition (1-4)
p #选择主分区
Partition number (1-4): 1
First cylinder (1-36481, default 1): 1
Last cylinder, +cylinders or +size{K,M,G} (1-36481, default 36481): #直接回车选择最大
Using default value 36481
Command (m for help): t #输入t进入类型选择
Selected partition 1
Hex code (type L to list codes): 8e #输入8e格式
Changed system type of partition 1 to 8e (Linux LVM)
Command (m for help): w #w保存

这样就完成了一块磁盘,接着我们依次将其他 sdc到sdl的磁盘也操作一把。

②、全部完成后,使用 pvcreate 将所有分区转化成物理卷,即添加LVM属性信息并划分PE存储单元:

[root@Centos64:~]# pvcreate /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1 /dev/sdg1 /dev/sdh1 /dev/sdi1 /dev/sdj1 /dev/sdk1 /dev/sdl1
Physical volume "/dev/sdb1" successfully created
Physical volume "/dev/sdc1" successfully created
Physical volume "/dev/sdd1" successfully created
Physical volume "/dev/sde1" successfully created
Physical volume "/dev/sdf1" successfully created
Physical volume "/dev/sdg1" successfully created
Physical volume "/dev/sdh1" successfully created
Physical volume "/dev/sdi1" successfully created
Physical volume "/dev/sdj1" successfully created
Physical volume "/dev/sdk1" successfully created
Physical volume "/dev/sdl1" successfully created

创建完PV之后,就可以使用 pvdisplay 或 pvs 查看详细信息了,篇幅有限,这里我就不贴了。

③、下面我们需要创建一个VG,然后PV都加入到这个卷组当中,卷名可自定义,比如 vg:

[root@Centos64:~]# vgcreate vg /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1 /dev/sdg1 /dev/sdh1 /dev/sdi1 /dev/sdj1 /dev/sdk1 /dev/sdl1
Volume group "vg" successfully created

同样,在创建好VG以后,我们也可以使用 vgdisplay 或者 vgs 命来来查看VG的信息(略)

④、接着,使用 lvcreate 命令基于VG创建逻辑卷,vg 和 lvm 我们自定义的名称:

[root@Centos64:~]# lvcreate -l 100%VG -n lvm vg
Logical volume "lvm" created

同样我们可以使用 lvdisplay 或者 lvs 命令来查看创建好的逻辑卷的信息(略)

⑤、格式化创建的逻辑卷:

[root@Centos64:~]# mkfs.ext4 /dev/vg/lvm

⑥、挂载分区:

[root@Centos64:~]# mkdir /data
[root@Centos64:~]# echo '/dev/vg/lvm /data ext4 noatime,acl,user_xattr 1 2' >> /dev/fstab
[root@Centos64:~]# mount -a
[root@Centos64:~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 9.9G 2.1G 7.4G 22% /
/dev/sda3 20G 370M 19G 2% /usr/local
tmpfs 16G 0 16G 0% /dev/shm
/dev/sda4 244G 205M 232G 1% /data1
/dev/mapper/vg-lvm 3.1T 932M 3.0T 1% /data

这样,我们就完成了LVM的手工创建过程了,我还有一台M2要弄,而且听运管说以后会继续交付这类机型,我可不想这么苦逼的操作了,光那个创建8e格式分区就已经很坑了。

所以,就将上面的操作串成脚本,一键完成:

#!/bin/bash
partition=/data # 定义最终挂载的名称
vgname=vg # 定义逻辑卷组的名称
lvname=lvm # 定义逻辑卷的名称
code='b c d e f g h i k j l' # 根据分区的实际情况修改
disk=
for i in $code
fdisk /dev/sd$i << EOF # 这里自动化完成了所有分区fdisk苦逼的交互步骤
disk="$disk /dev/sd${i}1" # 将所有分区拼起来
pvcreate $disk
vgcreate $vgname $disk
lvcreate -l 100%VG -n $lvmname $vgname
mkfs.ext4 /dev/$vgname/$lvmname
mkdir -p $partition
echo "/dev/$vgname/$lvmname $partition ext4 noatime,acl,user_xattr 1 2" >> /dev/fstab
mount -a

哦了,就写这么多,以备后用。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK