linux 원 키 분할 스 크 립 트, LVM 자동 확장 지원
37637 단어 shell
남 겨 진 문제: 1. 현재 2T 디스크 이상 의 파 티 션 (GPT 파 티 션 형식 을 사용 해 야 합 니 다) 2. 또한 파 티 션 을 할 때 실제 파 티 션 크기 와 프로필 이 지정 한 작은 차이 가 있 을 수 있 습 니 다.
2. 파 티 션 프로필 형식 설명: 예: novavolumes sdb msdos 200 primary 1 0
nova_volumes sdb msdos 400 primary 2 0
첫 번 째 열: LVM 볼 륨 이름, 두 번 째 열 을 "-"로 대체 할 필요 가 없다 면 사용 하 는 물리 디스크 이름, sda/sdb/sdc 등 세 번 째 열: 디스크 파 티 션 시트 형식, 지원 (msdos, 2T 이하, gpt 는 2T 이상) 네 번 째 열: 파 티 션 크기, M 단위 로 다섯 번 째 열: 파 티 션 유형(메 인 파 티 션/확장 파 티 션/논리 파 티 션 및 하나의 물리 디스크 에 하나의 확장 파 티 션 만 허용) 여섯 번 째 열: ID, 정형 숫자 를 설정 하고 비어 있 을 수 없 으 며 일곱 번 째 열 을 반복 할 수 없습니다. 부모 ID 번호, 정형 숫자 를 설정 합 니 다. ID 가 0 일 때 부모 ID 번호 가 없 음 을 표시 합 니 다. 0 이 아니라면 중복 도 허용 되 지 않 습 니 다.
다섯 째, 여섯 번 째 열의 설정 은 관계 형 데이터 개발 을 할 때 모두 알 아야 한다. 설정 줄 간 의 부자 관 계 를 표시 하 는 것 이지 만 이 스 크 립 트 에 서 는 다 층 부자 관 계 를 지원 하지 않 는 다.
상기의 설정 에 대한 설명: 첫 번 째 줄: 설정/dev/sdb 첫 번 째 파 티 션, 유형 은 메 인 파 티 션 200 M, 소속 LVM 볼 륨 이름 은 nova volumes 두 번 째 줄: 설정/dev/sdb 두 번 째 파 티 션, 유형 은 메 인 파 티 션 400 M, 소속 LVM 볼 륨 이름 은 nova volumes 입 니 다.
세 번 째 줄: 설정/dev/sdb 세 번 째 파 티 션, 유형 은 확장 파 티 션 300 M 네 번 째 줄: 설정/dev/sdb 네 번 째 파 티 션, 유형 은 논리 파 티 션 100 M 입 니 다. 세 번 째 줄 의 확장 파 티 션 300 M 의 일부분 에 속 합 니 다. 또한 LVM 볼 륨 이름 은 nova volumes 다섯 번 째 줄: 배치/dev/sdb 네 번 째 파 티 션, 유형 은 논리 파 티 션 100 M 으로 세 번 째 줄 의 확장 에 속 합 니 다.300 M 의 일부분 을 구분 하고 그 안에 속 하 는 LVM 볼 륨 이름 은 nova volumes 입 니 다.
#!/bin/bash
cfglist="disk_custsize_partition.list";
cfglist_vaild="disk_custsize_partition_vaild.list";
cfglist_vaild_for_disk_tmp="disk_custsize_partition_vaild_for_disk_tmp.list";
cfglist_vaild_for_disk_logical_tmp="disk_custsize_partition_vaild_for_disk_logical_tmp.list";
fdisk_cmd_part="parted";
fdisk_cmd_fdk="fdisk";
partition_array=("primary" "extended" "logical");
partition_main_max=4;
dev_array=();
length=${#dev_array[@]};
for i in `ls /dev/sd* |grep -vE "[0-9]"`
do
dev_basename=`basename $i`;
dev_dirname=`dirname $i`;
#echo $dev_basename" "$dev_dirname;
dev_array[$length]=$dev_basename;
_length_=$(( length++ ));
#echo $length":"
done
#echo "OOOK,array()";
#echo ${dev_array[@]};
if [[ -f $cfglist ]]
then
> $cfglist_vaild;
cat $cfglist|grep -v "#"|while read line
do
cfg_array=($line);
sub_disk=${cfg_array[1]};
if [[ -e "/dev/$sub_disk" ]]
then
#echo "/dev/"$sub_disk;
echo $line >> $cfglist_vaild;
fi
done
fi
fdisk_test=$( which $fdisk_cmd_fdk );
parted_test=$( which $fdisk_cmd_part );
if [[ -n $fdisk_test ]] && [[ -n $parted_test ]]
then
#echo " fdisk parted OK";
for i in ${dev_array[@]}
do
echo "initial partition : "$i;
hd_sysdir="/dev";
hd_dev="$i";
hd_allinbyte=`$fdisk_cmd_fdk -l $hd_sysdir/$hd_dev |grep -E "^Disk $hd_sysdir/$hd_dev"|awk '{print $5}'`;
hd_allinMbyte=$(( $hd_allinbyte/1000/1000));
hd_allinMbyte_Used_Str=$($fdisk_cmd_part $hd_sysdir/$hd_dev print|grep -P '^[[:space:]][1-9]+'|awk '{print $3}'|tail -n 1);
if [[ -n $hd_allinMbyte_Used_Str ]] ;
then
hd_allinMbyte_Used_Array=( $( echo $hd_allinMbyte_Used_Str |sed "s/\([0-9]\+\)\(B\|MB\|GB\|TB\|PB\)/\1 \2/" ) );
#echo "hd_allinMbyte_Used :"${hd_allinMbyte_Used_Array[0]}" :"${hd_allinMbyte_Used_Array[1]};
hd_allinMbyte_Used_Array[1]=$( echo ${hd_allinMbyte_Used_Array[1]}|tr '[a-z]' '[A-Z]' );
case "${hd_allinMbyte_Used_Array[1]}" in
MB|mb)
hd_allinMbyte_Used=${hd_allinMbyte_Used_Array[0]};
;;
GB|gb)
hd_allinMbyte_Used=$(( ${hd_allinMbyte_Used_Array[0]}*1000 ));
;;
TB|tb)
hd_allinMbyte_Used=$(( ${hd_allinMbyte_Used_Array[0]}*1000*1000 ));
;;
PB|pb)
hd_allinMbyte_Used=$(( ${hd_allinMbyte_Used_Array[0]}*1000*1000*1000 ));
;;
*)
hd_allinMbyte_Used=$(( ${hd_allinMbyte_Used_Array[0]}/1000 ));
;;
esac
else
hd_allinMbyte_Used=0;
#echo "hd_allinMbyte_Used_Array : 0 MB"};
fi
echo "hd_allinMbyte_Used_Array:"${hd_allinMbyte_Used_Array[0]};
hd_allinMbyte_Used=$( printf "%.f" $hd_allinMbyte_Used );
hd_allinMbyte_Vaild=$(( $hd_allinMbyte - $hd_allinMbyte_Used ));
echo "$hd_allinbyte : $hd_allinMbyte $hd_allinMbyte_Used ($hd_allinMbyte_Vaild)";
#continue;
#disk label
hd_lable=`$fdisk_cmd_part -s $hd_sysdir/$hd_dev print|grep -E "^Partition Table:"|awk '{print $NF}'`;
if [[ -z $hd_lable ]];
then
hd_allinGigabytes=$(( $hd_allinbyte/1000/1000/1000 ));
if [[ $hd_allinGigabytes -gt 2048 ]];
then
hd_lable_type="gpt";
else
hd_lable_type="msdos";
fi
mklabel_cmd="$fdisk_cmd_part -s $hd_sysdir/$hd_dev mklabel $hd_lable_type";
echo ">>> mklabel_cmd :"$mklabel_cmd;
eval "$mklabel_cmd";
fi
#continue;
for k in ${partition_array[@]};
do
echo "partition type:"$k;
if [[ ! ($k = "logical") ]];
then
#primary partition process
partition_main_used=`$fdisk_cmd_part $hd_sysdir/$hd_dev print|grep -P '^[[:space:]][1-9]+'|awk 'BEGIN{t=0};{if($5~"primary|extended"){t++}};END{print t}'`;
if [[ $partition_main_used -ge $partition_main_max ]]
then
echo "The number of Partition: primary/extend is reach the max:$partition_main_max";
continue;
fi
#partition start
> $cfglist_vaild_for_disk_tmp;
case "$k" in
primary)
#echo "primary cfglist_vaild ";
cat $cfglist_vaild |grep -E "[[:space:]]$hd_dev[[:space:]]"|awk '{if($5~"'$k'"){print $0}}' > $cfglist_vaild_for_disk_tmp;
;;
extended)
#echo "extended cfglist_vaild ";
cfg_seq_num=`cat $cfglist_vaild |grep -E "[[:space:]]$hd_dev[[:space:]]"|awk '$5 =="'$k'" {print $6}'|head -n 1`;
cat $cfglist_vaild |grep -E "[[:space:]]$hd_dev[[:space:]]"|awk '$5 =="'$k'" || $7 =="'$cfg_seq_num'" {print $0}' > $cfglist_vaild_for_disk_tmp;
;;
esac
while read line;
do
#echo $line;continue;
sub_dev=($line);
echo ">>> Subdev: " ${sub_dev[@]};
hd_build_scount_req=${sub_dev[3]};
hd_partition_type_req=${sub_dev[4]};
hd_partition_seq=${sub_dev[5]};
hd_partition_seq_parent=${sub_dev[6]};
if [[ ($hd_partition_type_req = "primary" || $hd_partition_type_req = "extended") && ($hd_allinMbyte_Vaild -ge $hd_build_scount_req) ]];
then
echo ">>> disk count : $hd_allinMbyte $hd_allinMbyte_Used $hd_allinMbyte_Vaild $hd_build_scount_req";
if [[ $hd_allinMbyte_Used -eq 0 ]];
then
hd_build_start=1;
else
hd_build_start=$hd_allinMbyte_Used;
fi
hd_build_end=$(( hd_build_start + hd_build_scount_req ));
hd_build_partition_type="";
case "$k" in
primary)
hd_build_partition_type="ext4";
;;
extended)
hd_build_partition_type="";
;;
esac
#start partition create
parted_cmd="$parted_test -s $hd_sysdir/$hd_dev mkpart $hd_partition_type_req $hd_build_partition_type $hd_build_start $hd_build_end";
echo "parted cmd: $parted_cmd";
eval "$parted_cmd";
parted_cmd_res=$?;
#wile loop,variables reset
#hd_allinMbyte_Used=$hd_build_end;
#echo "DDDD hd_build_end >> "$hd_build_end;
#hd_allinMbyte_Vaild=$(( hd_allinMbyte - hd_allinMbyte_Used ));
if [[ $k = "extended" ]];
then
#exntended/logical partition process
hd_ext_all=$hd_build_scount_req;
hd_ext_all_start=$(( hd_build_start + 1 ));
hd_ext_all_end=$hd_build_end;
hd_ext_allinMbyte_Vaild=$hd_ext_all;
echo "exntended/logical partition process!"$hd_ext_all" : "$hd_ext_all_start" : "$hd_ext_all_end;
> $cfglist_vaild_for_disk_logical_tmp
cat $cfglist_vaild |grep -E "[[:space:]]$hd_dev[[:space:]]"|awk '{if($5=="logical" && $7=="'$hd_partition_seq'"){print $0}}' > $cfglist_vaild_for_disk_logical_tmp;
hd_build_logicalline_seq=0;
while read logicalline;
do
#echo $logicalline;
cfg_ext_array=($logicalline);
hd_build_ext_req=${cfg_ext_array[3]};
#echo ">>> $hd_ext_allinMbyte_Vaild -ge $hd_build_ext_req";
if [[ $hd_ext_allinMbyte_Vaild -ge $hd_build_ext_req ]];
then
if [[ hd_build_logicalline_seq -eq 0 ]];
then
hd_build_ext_start=$hd_ext_all_start;
fi
hd_build_ext_end=$(( hd_build_ext_start + hd_build_ext_req -1 ));
#start partition (extend) create
parted_ext_cmd="$parted_test -s $hd_sysdir/$hd_dev mkpart logical ext4 $hd_build_ext_start $hd_build_ext_end";
echo "partedext cmd: $parted_ext_cmd";
eval "$parted_ext_cmd";
sleep 1;
if [[ $? -eq 0 ]];
then
hd_ext_allinMbyte_Vaild=$(( hd_ext_allinMbyte_Vaild - hd_build_ext_req ));
hd_build_ext_start=$(( hd_build_ext_end+1 ));
hd_build_ext_end=0;
#lvm create
partition_create_seq=`$fdisk_cmd_fdk -l $hd_sysdir/$hd_dev|grep -E "^$hd_sysdir/$hd_dev" |cut -d " " -f 1|sed -e "s/^.*$hd_dev//"|tail -n 1`;
vg_obg_id="${cfg_ext_array[0]}";
if [[ $vg_obg_id != '-' ]];
then
eval "vg_obg_id_length=$(echo '${#'$vg_obg_id'[@]}')";
echo "LV-Vg Create: $vg_obg_id";
eval "(pvdisplay -s $hd_sysdir/$hd_dev 2>&1) > /dev/null";
if [[ $? -ne 0 ]];
then
vg_cmd="pvcreate -f $hd_sysdir/$hd_dev"$partition_create_seq;
echo "Vgcreate cmd: $vg_cmd";
eval "$vg_cmd";
#put pgid in the vg arrays
eval "${vg_obg_id}[$vg_obg_id_length]='$hd_sysdir/$hd_dev$partition_create_seq'";
echo "$vg_obg_id_length: '"$hd_sysdir"/"$hd_dev$partition_create_seq"'";
vg_obg_id_length=$(( vg_obg_id_length+1 ));
fi
fi
fi
fi
hd_build_logicalline_seq=$(( hd_build_logicalline_seq + 1 ));
done < $cfglist_vaild_for_disk_logical_tmp;
> $cfglist_vaild_for_disk_logical_tmp;
fi
#end if [[ $k = "extended" ]]
#wile loop,variables reset
hd_allinMbyte_Used=$hd_build_end;
#echo "DDDD hd_build_end >> "$hd_build_end;
hd_allinMbyte_Vaild=$(( hd_allinMbyte - hd_allinMbyte_Used ));
#continue;
#Lvm: pvcreate
#echo "LVM: parted_cmd_res:"${sub_dev[0]};
if [[ $parted_cmd_res -eq 0 ]];
then
partition_create_seq=`$fdisk_cmd_fdk -l $hd_sysdir/$hd_dev|grep -E "^$hd_sysdir/$hd_dev" |cut -d " " -f 1|sed -e "s/^.*$hd_dev//"|tail -n 1`;
if [[ ${sub_dev[0]} != '-' ]];
then
vg_obg_id="${sub_dev[0]}";
eval "vg_obg_id_length=$(echo '${#'$vg_obg_id'[@]}')";
echo "LV-Vg Create: $vg_obg_id";
eval "(pvdisplay -s $hd_sysdir/$hd_dev 2>&1) > /dev/null";
if [[ $? -ne 0 ]];
then
vg_cmd="pvcreate -f $hd_sysdir/$hd_dev"$partition_create_seq;
echo "Vgcreate cmd: $vg_cmd";
eval "$vg_cmd";
#put pgid in the vg arrays
eval "${vg_obg_id}[$vg_obg_id_length]='$hd_sysdir/$hd_dev$partition_create_seq'";
echo "$vg_obg_id_length: '"$hd_sysdir"/"$hd_dev$partition_create_seq"'";
vg_obg_id_length=$(( vg_obg_id_length+1 ));
fi
fi
fi
#end if [[ $? -eq 0 ]]
fi
#end if [[ $hd_allinMbyte_Vaild -ge $hd_build_scount_req ]]
done < $cfglist_vaild_for_disk_tmp;
fi
#end if [[ ! ($k = "primary" ]]
done
continue;
done;
else
echo " system doesn't install fdisk or parted!";
exit 1;
fi
#echo "partition customize end";exit
#lvm start
unset vg_obg_id vg_obg_id_length;
for i in `cat $cfglist_vaild |cut -d " " -f 1|grep -v "-"|sort -u`;
do
vg_obg_id=$i;
echo "__"$i"__";
eval "vg_obg_id_length=$(echo '${#'$vg_obg_id'[@]}')";
for ((j=0;j<$vg_obg_id_length;j++))
do
eval 'vg_obg_disk_name=${'$vg_obg_id'[$j]}';
echo $j":"$vg_obg_disk_name;
eval "(vgdisplay -s $vg_obg_id 2>&1) > /dev/null"
if [[ $? -eq 0 ]];
then
eval "(vgextend $vg_obg_id $vg_obg_disk_name 2>&1) >/dev/null";
else
eval "(vgcreate $vg_obg_id $vg_obg_disk_name 2>&1) >/dev/null";
fi
done;
done;
exit 0;
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ZSH에서 물고기까지ZSH는 수년 동안 내 기본 셸이었습니다. 이제 몇 달 동안 사용하면서 ZSH 구성에 대해 몇 가지 사항을 발견했습니다. 우리는 을 제공하는 시스템과 더 빨리 상호 작용하는 경향이 있습니다. 내.zshrc 구성에는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.