Skip to content

Instantly share code, notes, and snippets.

@coder36
Last active August 29, 2015 13:58
Show Gist options
  • Save coder36/10376216 to your computer and use it in GitHub Desktop.
Save coder36/10376216 to your computer and use it in GitHub Desktop.
LVM Spike

LVM Spike

lvm guide

lvm deployment guide

really nice lvm tutorial

lvm wikipedia

Prerequisites

Setup

mkdir centos
cd centos
vagrant add box centos64-fpm.box https://github.com/2creatives/vagrant-centos/releases/download/v0.1.0/centos64-x86_64-20131030.box
vagrant init centos64-fpm.box

Open up Virtual box and manually add some epmpty disk images:

  1. Right click on VM (must be shutdown) -> settings -> storage
  2. Click the +harddisk icon -> Create new disk -> VMDK -> Dynamically allocated
  3. Set size to 8GB and name to: disk2
  4. Click create

Create disk2 and disk3

vagrant up
vagrant ssh
sudo yum update
sudo yum install lvm2

Disks

Use fdisk to set up the new disks. Create a primary partition, setting the partition id "Linux LVM" - 8e. Assuming that disk2 presents itself as /dev/sdb:

List the disks: $ sudo fdisk -l $ sudo fdisk /dev/sdb

Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x082bfac9.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help):


** Press: m

Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)


** Press: n

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)

** Press: p
Partition number (1-4):

** Press: 1
First cylinder (1-1044, default 1):   

** Press: Enter
Last cylinder, +cylinders or +size{K,M,G} (1-1044, default 1044):

** Press: Enter	
Command (m for help):

** Press: t
Hex code (type L to list codes):

** Press: L
 0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris
 1  FAT12           39  Plan 9          82  Linux swap / So c1  DRDOS/sec (FAT-
 2  XENIX root      3c  PartitionMagic  83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       40  Venix 80286     84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      41  PPC PReP Boot   85  Linux extended  c7  Syrinx
 5  Extended        42  SFS             86  NTFS volume set da  Non-FS data
 6  FAT16           4d  QNX4.x          87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS       4e  QNX4.x 2nd part 88  Linux plaintext de  Dell Utility
 8  AIX             4f  QNX4.x 3rd part 8e  Linux LVM       df  BootIt
 9  AIX bootable    50  OnTrack DM      93  Amoeba          e1  DOS access
 a  OS/2 Boot Manag 51  OnTrack DM6 Aux 94  Amoeba BBT      e3  DOS R/O
 b  W95 FAT32       52  CP/M            9f  BSD/OS          e4  SpeedStor
 c  W95 FAT32 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad hi eb  BeOS fs
 e  W95 FAT16 (LBA) 54  OnTrackDM6      a5  FreeBSD         ee  GPT
 f  W95 Ext'd (LBA) 55  EZ-Drive        a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            56  Golden Bow      a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    5c  Priam Edisk     a8  Darwin UFS      f1  SpeedStor
12  Compaq diagnost 61  SpeedStor       a9  NetBSD          f4  SpeedStor
14  Hidden FAT16 <3 63  GNU HURD or Sys ab  Darwin boot     f2  DOS secondary
16  Hidden FAT16    64  Novell Netware  af  HFS / HFS+      fb  VMware VMFS
17  Hidden HPFS/NTF 65  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE
18  AST SmartSleep  70  DiskSecure Mult b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 75  PC/IX           bb  Boot Wizard hid fe  LANstep
1c  Hidden W95 FAT3 80  Old Minix       be  Solaris boot    ff  BBT
1e  Hidden W95 FAT1
Hex code (type L to list codes):

** Type: 8e
Command (m for help):

** Type: w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

Done! Repeat for /dev/sdb and /dev/sdc. This will create /dev/sb1 and /dev/sdc2

Using LVM

At this point we have 2 disks which we are going to use to create 1 logical bolume.

The key areas we'll tackle are:

  • Physical Volumes
  • Volume Groups
  • Logical Volumes

Read what is LVM?. Theres a nice layed diagram here which shows the relationship between physical volumes, volume groups and logical volumes.

Physical Volumes

$ pvcreate /dev/sdb1
$ pvcreate /dev/sdc1
$ pvdisplay

Volume Groups

$ vgcreate data /dev/sdb1 /dev/sdc1	
$ vgdisplay

Logical Volumes

$ lvcreate --name repo --size 10G data 
$ lvdisplay

Mount repo

Create a file system > mkfs.ext3 /dev/data/repo > mkdir /repo > mount /dev/data/repo /repo

Resizing filesystems

Basic steps:

  1. unmount filesysten

  2. Remove journaling (if required) <-- I'm not sure if this totally necessary

  3. Run file system check against fs

  4. Resize (be careful not to shrink to less that current df -h value!)

  5. Add journaling

    umount /dev/data/repo tune2fs -O ^has_journal /dev/data/repo e2fsck -f /dev/data/repo resize2fs /dev/data/repo 1G e2fsck -f /dev/data/repo tune2fs -O +has_journal /dev/data/repo mount /dev/data/repo /repo df -h

Removing Logical Volume

> lvremove /dev/data/repo

Removing Physical Volume

The plan here is to remove /dev/sdb1. Ensure that the logical volumes can fit on /dev/sdc1

> lvreduce -L2G /dev/data/repo
> pvmove /dev/sdb1
> pvs -o+pv_used
> vgreduce data /dev/sdb1
> pvremove /dev/sdb1

see here

Adding Physical Volume

This can be done online!

> vgextend data /dev/sdc1
> lvextend -L 10G /dev/data/repo
> resize2fs /dev/data/repo 10GB          

Conclusions

LVM is straight forward to use. It allows the addition and removal of physical storage in a way that is transparent to the file system.

* Only use in scenarios where we anticipate that we may need to extend storage

Operations which can be done online (whilst the file system is mounted): * Add new Physical Volumes * Extend Logical Volumes * Extend file system * Shrink logical volumes () * Removing physical volumes * pvmove

Operations which need to be done offline * Shrink file system * Shrink logicl volumes (this can be done online, but risky)

Finally, when shrinking, removing physical volumes etc extreme care must be taken. Think about what you are doing!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment