一、背景
云主机挂载一块32T的共享云硬盘测试LVM分区下,卸载后在其他云主机使用情况
二、过程验证
1、挂载后查看云硬盘
fdisk -l /dev/vde //这是我新的云硬盘
分区形式默认设置为 GPT
2、建立磁盘分区
2.1、直接裸设备做文件系统
执行:mkfs -t <文件系统格式> /dev/vdb
2.2、建立分区后再做文件系统
因大于20T,这里用parted工具,没有进行安装yum install -y parted
parted /dev/vde
help mklable //查看mklable命令的用法及支持的分区表
或:mkpart primary 0 16TB //创建一个分区
【补充】
也可直接输入mkpart不带任何参数----新建分区,按提示交互操作:
(parted) unit //输入unit更改默认单位,如果不知道支持那些单位直接回车
Unit? [compact]? //按两次Tab键,列出支持的单位,
Partition name? []? //分区的名字,可直接回车不给分区命名
File system type? [ext2]? //分区被格式化的文件系统,可以按两次Tab键查看支持的文件系统
File system type? [ext2]? ext4 //输入被格式化的文件系统为ext4
Start? 0% //开始位置,这里要输入0%或2048s或1M都可以
End? 1G //结束位置,默认单位为compact,使用其他单位必须在数字后面加上单位
(parted) name //输入name指令更改分区名
(parted) set //输入set更改分区标记
Flag to Invert? lvm //标记为lvm类型
New state? [on]/off? on //输入on回车表示打开
(parted) rm //输入删除指令rm直接回车,后面加上分区号回车后就可直接删除分区
Partition number? 3 //输入要删除的分区号,定要慎重,一旦回车是不可退的。
(parted) resizepart //输入调整分区的指令resizepart直接回车,如要增加容量,增加容量的分区后面必须得有可用的未分配的分区空间才可以
Partition number? 2 //输入要更改的分区
End? [2.00GB]? 10G //扩容后这个分区的结束位置,需根据扩容前分区结束的位置和增加的容量来确定最终的分区位置
【直接命令式】
parted /dev/sdc mklabel gpt //直接创建GPT分区表
parted /dev/sdc unit GB print //在查看指令print前添加unit GB指令来以GB显示
parted /dev/sdc set 3 lvm //为分区3添加lvm标记
parted /dev/sdc rm 3 //删除分区3
parted /dev/sdc unit GB print //查看分区的信息,以GB为单位显示
3、为测试,将磁盘制作为lvm
1)制作PV和vg
2)制作lv:
lvcreate -L 1T -n lv-test hbeivideo
4、格式化lvm分区,创建文件系统
我们可使用mkfs.ext4或mke4fs命令使用ext4文件系统类型正确格式化新分区。
mke4fs命令所在rpm包是e4fsprogs,可执行yum install e4fsprogs* 安装;
mkfs -t ext4 /dev/hbeivideo/lv-test
mke4fs -t ext4 /dev/sdb1
mke4fs -L /卷标1 /dev/sdb1
从上图可了解,lv命名时不要用-,标识不清
如果在上述命令中没有加卷标的话,可执行如下命令填加:
e4label /dev/sdb1 卷标识1
e2abel /dev/sdb1 卷标识2 //使用e4label命令标记分区
tune4fs -l /dev/sdb1 //查看分区信息,用法与tune2fs一致
5、挂载使用
6.从云主机卸载云硬盘挂载到其他云主机
可以看到云硬盘挂载到新的云主机后,在新云主机里可以正常看到:
挂载使用,检查确认文件是否正常:
从上图可看到,文件可正常在新的云主机读取到。
三、附录:
1)磁盘格式化脚本
#!/bin/bash
#This shell is produced by EBS@cmss
#data: 2021-6-2
##need to yum install e4fsprogs、psmisc
export PATH=/usr/local/sbin/:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
clear
echo -e "\n\033[36mStep 1: Initializing script and check root privilege\033[0m"
if [ "$(id -u)" = "0" ];then
echo -e "\033[33mIs running, please wait!\033[0m"
yum -y install e4fsprogs > /dev/null 2>&1
yum -y install psmisc > /dev/null 2>&1
echo -e "\033[32mSuccess, the script is ready to run!\033[0m"
else
echo -e "\033[31mError, this script must be run as root!\n\033[0m"
exit 1
fi
echo -e "\n\033[36mStep 2: Show all active disks:\033[0m"
fdisk -l 2>/dev/null | grep -o "Disk /dev/.*" |grep -vE "sda|vda"
echo -e -n "\n\033[36mStep 3: Please choose the disk(e.g. /dev/sdb and q to quit):\033[0m"
read Disk
if [ $Disk == q ];then
exit
fi
#analysis usr's input
until fdisk -l 2>/dev/null | grep -o "Disk /dev/.*" |grep -vE "sda|vda" | grep -w "Disk $Disk" &>/dev/null && [[ $Disk != "/dev" ]];do
#until fdisk -l 2>/dev/null | grep -o "Disk /dev/.*" | sed '1d' | grep -vE "root|swap" | grep -w "Disk $Disk" &>/dev/null;do
echo -e -n "\033[31mError input, Please try again (e.g. /dev/sdb and q to quit):\033[0m"
read Disk
if [ "$Disk" == "q" ];then
exit
fi
done
while mount | grep $Disk > /dev/null 2>&1;do
echo -e "\033[31m\nYour disk has been mounted:\033[0m"
mount | grep "$Disk"
echo -e -n "\033[31m\nForce umounting?[y/n]:\033[0m"
read Umount
until [ $Umount == y -o $Umount == n ];do
echo -e -n "\033[31mError input, please try again [y/n]:\033[0m"
read Umount
done
if [ $Umount == n ];then
exit
else
echo -e "\033[33mIs running, please wait!\033[0m"
#awk will be wrong with " ",replace it with ''
for i in $(mount | grep "$Disk" | awk '{print $3}');do
fuser -km $i >/dev/null
umount $i >/dev/null
#use '\' to recognize '/' is a path's symbol
temp=$(echo $Disk | sed 's;/;\\\/;g')
sed -i -e "/^$temp/d" /etc/fstab
sleep 2
done
echo -e "\033[32mSuccessfully umount this disk!\033[0m"
fi
echo -e -n "\n\033[31mReady to begin to format the disk? [y/n]:\033[0m"
read Choice
until [ $Choice == y -o $Choice == n ];do
echo -e -n "\033[31mError input, please try again [y/n]:\033[0m"
read Choice
done
if [ $Choice == n ];then
exit
else
echo -e "\033[33mIs running, Please wait!\033[0m"
dd if=/dev/zero of=$Disk bs=512 count=1 &>/dev/null
sleep 2
sync
fi
echo -e "\033[32mThis disk had been formatted\033[0m"
done
echo -e "\n\033[36mStep 4: This disk is formatting\033[0m"
echo -e "\033[33mIs running, please wait!\033[0m"
fdisk_mkfs() {
echo y | mkfs.ext4 ${1}
}
fdisk_mkfs $Disk > /dev/null 2>&1
echo -e "\033[32mSuccess, the disk has been formatted!\033[0m"
echo -e "\n\033[36mStep 5: Make a directory and mount it\033[0m"
echo -e "\n\033[36mWarning:Files that previously existed in this directory will be hidden!\033[0m"
echo -e -n "\033[33mPlease enter a location to mount (e.g.: /mnt/data):\033[0m"
read Mount
mkdir -p $Mount > /dev/null 2>&1
mount ${Disk} $Mount
echo -e "\033[32mSuccess, the mount is completed!\033[0m"
echo -e "\n\033[36mStep 6: Write configuration to /etc/fstab and mount device\033[0m"
echo ${Disk} $Mount 'ext4 defaults 0 0' >> /etc/fstab
echo -e "\033[32mSuccess, the /etc/fstab is Write!\033[0m"
echo -e "\n\033[36mStep 7: Show information about the file system on which each FILE resides\033[0m"
df -h
sleep 2
echo -e "\n\033[36mStep 8: Show the write configuration to /etc/fstab\033[0m"
cat /etc/fstab
LinuxVMDiskAutoInitialize.sh
脚本中会用到e4fsprogs、psmisc2个包。执行:yum install e4fsprogs、psmisc;其中
Psmisc软件包包含三个帮助管理/proc目录的程序。离线安装。
fuser 显示使用指定文件或者文件系统的进程的PID。
killall 杀死某个名字的进程,它向运行指定命令的所有进程发出信号。
pstree 树型显示当前运行的进程
chmod -x LinuxVMDataDiskAutoInitialize.sh //脚本初始化完成后会显示出除了系统盘以外的盘符,如图一所示,忽略警告信息,根据提示输入需要格式化的盘符,如/dev/sdb。