一、LVM介绍
LVM 是 Logical Volume Manager(逻辑卷管理器)的缩写,它是Linux环境下的一种硬盘管理技术。使用 LVM 可以为你带来许多好处:
1. 灵活性:LVM 允许你在不影响现有数据的情况下调整存储空间。例如,如果一个逻辑卷容量满了,你可以从其他逻辑卷那里获得空间并添加到该卷,或者你可以添加新的物理设备(比如硬盘)来增加容量。
2. 快照功能:LVM 提供了创建硬盘状态快照的功能,这对于备份和恢复数据来说是非常有用的。在快照创建后,系统变动的数据会被记录在快照中,而原始数据保持不变。这样,如果出现问题,你可以随时将硬盘状态恢复到快照创建时的状态。
3. 分区的动态扩展和收缩:与传统的硬盘分区相比,LVM 允许你在系统运行期间动态地调整逻辑卷的大小。这使得空间的管理更加灵活,可以按需进行分配。
4. 多磁盘管理:LVM 可以把多块硬盘组合成一个大的逻辑卷组,对于用户来说,他们只需要管理这个逻辑卷,而不需要关心底层的物理硬盘。这简化了磁盘空间的管理。
5. 数据可迁移性:在 LVM 的管理下,存储数据可以很容易地从一块硬盘迁移到另一块硬盘,同时也可以在不同的逻辑卷之间移动。
6. 存储利用率高:通过把多个物理设备组织为一个逻辑卷组,可以使整个存储系统的存储利用率更高。
二、一键分区脚本
#! /bin/bash
# Author:zhh
# Function:新建一个分区,并做成逻辑卷
cat /proc/partitions > old
read -p "请输入要分区的硬盘(写绝对路径,如:/dev/sda):" A
if [ -e $A ];then
echo "true"
else
echo "该设备不存在!!"
exit
fi
read -p "请输入要创建的磁盘分区类型(这里只能是主分区,默认按回车即可):" B
read -p "请输入分区数字,范围1-4,默认从1开始,默认按回车即可:" C
read -p "请输入扇区起始表号,默认按回车即可:" D
read -p "请输入要分区的分区大小(格式:如 +5G ):" E
read -p "请输入要划分为逻辑卷的分区盘符(默认回车即可):" Z
fdisk $A << EOF
n
p
$C
$D
$E
t
$Z
8e
p
w
EOF
echo "一个标准LVM的分区已经建立好!!"
partprobe $A
echo "-------------------------------"
cat /proc/partitions
cat /proc/partitions > new
F=`diff new old | grep "<" | awk '{print $5}'`
echo "-------------------------------"
echo $F
pvcreate /dev/$F
echo "该硬盘已做成物理卷!"
n=`vgs | grep myvg |wc -l`
if [ $n -eq 0 ];then
vgcreate myvg /dev/$F
echo "该物理卷已加入卷组myvg中"
else
vgextend myvg /dev/$F
echo "该物理卷已加入卷组myvg中"
vgs
free=`vgs| awk '$1~/myvg/{print}'|awk '{print $7}'`
echo "该卷组剩余的空间大小为:$free "
lvs
exit
fi
vgs
free=`vgs| awk '$1~/myvg/{print}'|awk '{print $6}'`
echo "该卷组剩余的空间大小为:$free "
read -p "请输入你要创建逻辑卷的大小(如:1G):" repy2
lvcreate -L $repy2 -n mylv myvg
echo "已成功创建逻辑卷mylv"
echo "------------------------"
lvs
echo "------------------------"
echo "你想对新分区设定什么类型的文件系统?有以下选项:"
echo "A:ext4文件系统"
echo "B:xfs文件系统"
read -p "请输入你的选择:" G
case $G in
a|A)
mkfs.ext4 /dev/myvg/mylv
echo "该分区将被挂载在 "/mnt/$F" 下"
m=`ls /mnt/|grep $F | wc -l`
if [ $m -eq 0 ];then
mkdir /mnt/$F
fi
echo "/dev/myvg/mylv /mnt/$F ext4 defaults 0 0" >> /etc/fstab
mount -a
df -Th
;;
b|B)
mkfs.xfs -f /dev/myvg/mylv
echo "该分区将被挂载在 "/mnt/$F" 下"
m=`ls /mnt/|grep $F | wc -l`
if [ $m -eq 0 ];then
mkdir /mnt/$F
fi
echo "/dev/myvg/mylv /mnt/$F xfs defaults 0 0" >> /etc/fstab
mount -a
df -Th
;;
*)
echo "你的输入有误!!"
esac