Created
September 1, 2017 13:50
-
-
Save biggers/eeb3bf7e0ef8efa3626cd6db18442f26 to your computer and use it in GitHub Desktop.
simple Linux volume mgmt example / recipe(s) - LVM
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-*-sh-*- | |
Various bits, pieces, notes -- on using Linux Volume (Disk) Mgmt, | |
on various Linux distros | |
"A Debian Grimoire - LVM: Logical Volume Management, Version 2" | |
http://deb.riseup.net/storage/lvm2/ | |
### -------- growing filesystem(s) - EXT3 | |
VG=saucyvg ## LVM2 volume-group | |
LVNAME=dockerlv | |
INCR=30000 ## (add 5GB) | |
LV=/dev/$VG/$LVNAME ## LVM2 logical volume (block-device) | |
# FS=/home/zope/$LVNAME ## our Web site | |
sudo lvextend -L +${INCR}M $LV ## add $INCR MB, to $LV filesystem | |
sudo resize2fs $LV | |
# sudo umount $LV ## OPTIONAL: filesystem-check, for integrity | |
# sudo sudo e2fsck -f $LV | |
# sudo mount $LV | |
## -------- creating a MySQL filesystem, | |
# using a new logical volume - ** EXT4 ** | |
sudo lvs | |
sudo vgs # NOTE "VFree" ... remaining free space, for LVs | |
VG=sysvg00 | |
## LVNAME=mysql_var | |
## USERG=mysql.mysql | |
LVNAME=mysqllv | |
USERG=root.wheel | |
FS=/var/lib/mysql | |
FS_T=ext4 | |
# NOTE: space is limited on 160GB drive! ...size in MBytes | |
SZ=8000 | |
LV=/dev/$VG/$LVNAME | |
sudo lvcreate -n${LVNAME} -L${SZ} $VG | |
# "...Rounding up size to full physical extent N.NN GB" | |
# " Logical volume "XXX" created" | |
## make sure 'lvcreate' worked... | |
sudo lvscan -v | |
## make the EXT4 filesystem on $LV | |
sudo mkdir -p $FS | |
sudo mke2fs -t $FS_T -j -O dir_index $LV | |
sudo mount -o noatime,data=journal $LV $FS | |
## Fix permissions, for mysql-user $FS... | |
cd $FS; sudo chown -R $USERG $FS | |
sudo chmod 2775 $FS | |
ls -ld $FS ## note new permissions | |
cd /root | |
## create a FSTAB entry | |
sudo cp -p /etc/fstab /etc/fstab.prev # we BACKUP /etc/fstab **FIRST** | |
sudo tee -a /etc/fstab <<EOF | |
$LV $FS $FS_T defaults,noatime,data=journal 1 2 | |
EOF | |
# test new /etc/fstab... | |
cd / | |
sudo umount $FS | |
sudo mount -a | |
### ---- creating a VolumeGroup, w/ LogicalVols, filesystems: EXT3 | |
VG=sysvg00 | |
# (list of PVs) PV="/dev/hda8 /dev/hda9 /dev/hda10 /dev/hda11 /dev/hda12" | |
PV="/dev/sda4" | |
# sudo umount /data | |
# sudo cp -p /etc/fstab /etc/fstab.0 | |
# sudo sed --in-place ':/dev/md2:d' /etc/fstab | |
## (LVM) initialize new PhysVolume(s) | |
sudo pvcreate -v $PV | |
sudo pvs | |
## create a new VolumeGroup, with "N" Physical Volume(s) | |
sudo vgcreate -v $VG $PV | |
function creat_lvm_fs() | |
{ | |
set -x | |
# creat_lvm_fs sysvg zope 6000 # /home/zope | |
vg=$1 | |
lvname=$2 | |
size=$3 | |
fs=$4 | |
LV=/dev/$vg/$lvname | |
sudo lvcreate -n${lvname} -L${size} $vg || return | |
# "...Rounding up size to full physical extent N.NN GB" | |
# " Logical volume "XXX" created" | |
sudo lvscan -v # make sure 'lvcreate' worked... | |
sudo mkfs.ext4 -j -O dir_index $LV # make ext4 journaled FS on LV | |
# 'dir_index' & 'data=writeback' for ext3 with tune2fs consistently | |
# and significantly improves ext3, and mostly surpasses reiser3 FS | |
# sudo tune2fs -O dir_index -o +journal_data $LV | |
if [ "$fs" != "" ]; then | |
sudo mkdir -p $fs | |
mount $LV $fs | |
## for MySQL user $FS... | |
cd $fs; sudo chown -R mysql.mysql $fs | |
sudo chmod 755 $fs | |
# !!BACKUP!! /etc/fstab **FIRST** | |
sudo cp -p /etc/fstab /etc/fstab.prev | |
sudo tee -a /etc/fstab <<EOF | |
$LV $fs ext4 defaults,noatime,data=journal 1 2 | |
EOF | |
# test new /etc/fstab... | |
cd / | |
sudo umount $fs | |
sudo mount -a | |
fi | |
} | |
VG=sysvg00 | |
creat_lvm_fs $VG mintroot 10G /local/mint/root | |
creat_lvm_fs $VG minthome 5G /local/mint/home | |
creat_lvm_fs $VG git 5G /local/mint/git | |
### ---- "clone" a LogicalVolume (all metadata) ... onto another VG/LV | |
function creat_lv_clone() | |
{ | |
vg=$1 | |
lvname=$2 | |
size=$3 | |
LV=/dev/$vg/$lvname | |
FS=/mnt/backups/$lvname | |
size=$(echo "$size/2" | bc) | |
sudo lvcreate -n${lvname} -L${size}K $vg || return | |
sudo mke2fs -q -j $LV ## make ext3-journaled FS on LV | |
sudo mkdir -p $FS ## make a "backup LV mount-point" and test it... | |
mount $LV $FS | |
mount -l | grep ${vg}-${lvname} | |
lvdisplay -c $LV | |
umount $LV | |
} | |
# lvdisplay -c | grep sciice | |
# creat_lv_clone sysvg64b sciice 12582912 | |
### ---- "copy" a LogicalVolume / filesystem - copy all *real* data | |
function creat_lv_copy() | |
{ | |
#set -x | |
fs=$1 | |
vg=$2 | |
lvname=$3 | |
LV=/dev/$vg/$lvname | |
BK=/mnt/backups/$lvname | |
mount $LV $BK || return | |
mount -l | grep ${vg}-${lvname} | |
(cd $fs; pwd; tar --one-file-system -cf - . | tar -C $BK -xf -) | |
df -h | fgrep $lvname | |
umount $LV | |
} | |
### ---- "sync-up" a LogicalVolume / filesystem - to another backup LV/fs | |
function sync_lv() | |
{ | |
fs=$1 | |
vg=$2 | |
lvname=$3 | |
LV=/dev/$vg/$lvname | |
BK=/mnt/backups/$lvname | |
mount $LV $BK || return | |
mount -l | grep ${vg}-${lvname} | |
(cd $fs; pwd; rsync --dry-run --one-file-system -av --delete . $BK) | |
df -h | fgrep $lvname | |
umount $LV | |
} | |
# creat_lv_copy /home/zope/projmgmt datavg00b pmgmt | |
# creat_lv_copy /home/zope/sciice sysvg64b sciice | |
# sync_lv /var/repos datavg00b hg_repos | |
# creat_lv_copy /home/zope/ccbc_prod datavg00b ccbc_prod | |
# creat_lv_copy /home/zope/ccbc_prod_data datavg01b ccbc_prod_data | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment