Skip to content

Instantly share code, notes, and snippets.

@ghostiam
Last active November 28, 2018 07:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ghostiam/85c22858fad4409cb79546351bccac44 to your computer and use it in GitHub Desktop.
Save ghostiam/85c22858fad4409cb79546351bccac44 to your computer and use it in GitHub Desktop.
Create lvm partitions from files for testing
#!/bin/bash
# https://help.ubuntu.ru/wiki/lvm
LVM_FILES_PATH=/mnt/lvm
LVM_FILES_SIZE=1G
LVM_PARTS=("first|1G" "second|1G") # array of "name|size"
VG_NAME=vg
set -x
# remove old
for f in "${LVM_PARTS[@]}"
do
name=$(echo $f | cut -d'|' -f1)
umount "/dev/$VG_NAME/$name"
lvremove -f "$VG_NAME/$name"
done
vgremove -f "$VG_NAME"
for f in $(losetup -l | grep "$LVM_FILES_PATH" | cut -d' ' -f1)
do
pvremove -f "$f"
losetup -d "$f"
done
# create new
mkdir -p "$LVM_FILES_PATH"
# create files
dd if=/dev/zero of="$LVM_FILES_PATH/d01" count=1 bs=$LVM_FILES_SIZE
dd if=/dev/zero of="$LVM_FILES_PATH/d02" count=1 bs=$LVM_FILES_SIZE
dd if=/dev/zero of="$LVM_FILES_PATH/d03" count=1 bs=$LVM_FILES_SIZE
dd if=/dev/zero of="$LVM_FILES_PATH/d04" count=1 bs=$LVM_FILES_SIZE
# setup loop device
losetup -f --show "$LVM_FILES_PATH/d01" > lvm.tmp
losetup -f --show "$LVM_FILES_PATH/d02" >> lvm.tmp
losetup -f --show "$LVM_FILES_PATH/d03" >> lvm.tmp
losetup -f --show "$LVM_FILES_PATH/d04" >> lvm.tmp
# Initialize physical volume(s) for use by LVM
for f in $(cat lvm.tmp)
do
pvcreate "$f"
done
# Create a volume group
vgcreate -s 32M "$VG_NAME" $(cat lvm.tmp | tr '\n' ' ')
# Create a logical volume, filesystem and mount
for f in "${LVM_PARTS[@]}"
do
name=$(echo "$f" | cut -d'|' -f1)
size=$(echo "$f" | cut -d'|' -f2)
lvcreate -n "$name" -L $size "$VG_NAME"
mkfs.ext4 "/dev/$VG_NAME/$name"
mkdir -p "$LVM_FILES_PATH/$name"
mount "/dev/$VG_NAME/$name" "$LVM_FILES_PATH/$name"
done
rm lvm.tmp
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment