A practical example for a logical volume reduce with ext file system

Written by - 0 comments

Published on - Listed in Linux Unix


Already back in 2008 I created the following pages, explaining how to extend and reduce logical volumes (LV):

However, in the mentioned pages, I didn't cover the lvreduce for an ext3 partition. So here's a practical example for an LV used for a MySQL partition:

1. As data-loss is always a possibility (however it actually never happened to me yet) when a file system is reduced, the first step should be a working backup. As this is a MySQL partition, this is of course y MySQL dump of the existing databases.

2. Stop MySQL and unmount the partition:

# /etc/init.d/mysql stop
# umount /var/lib/mysql

3. Make a file system check:

# e2fsck -f /dev/vgdata/lvmysql
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vgdata/lvmysql: 160/2444624 files (4.4% non-contiguous), 1089992/9765888 blocks

 4. Resize the file system. Remember to always shrink the file system before the logical volume!
Here I define a new total size of the file system as 20 GB.

 # resize2fs -p /dev/vgdata/lvmysql 20G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/vg_data/lv_mysql to 5242880 (4k) blocks.
Begin pass 2 (max = 1)
Relocating blocks             XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Begin pass 3 (max = 299)
Scanning inode table          XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Begin pass 4 (max = 8)
Updating inode references     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
The filesystem on /dev/vgdata/lvmysql is now 5242880 blocks long.

5. Make another file system check. It should show the new size in blocks:

# e2fsck -f /dev/vgdata/lvmysql
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vgdata/lvmysql: 160/1308160 files (4.4% non-contiguous), 1017660/5242880 blocks

6. Shrink/reduce the logical volume. Give it a little bit more space than the file system (to make sure the file system isn't bigger than the lv by accident).
As you see, I tell to use a total size of 20.25 GB for the LV.

# lvreduce -L20.25G /dev/vgdata/lvmysql
  WARNING: Reducing active logical volume to 20.25 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lvmysql? [y/n]: y
  Reducing logical volume lvmysql to 20.25 GiB
  Logical volume lvmysql successfully resized

7. And, you guessed it, another file system check, to make sure, everything is OK:

# e2fsck -f /dev/vgdata/lvmysql
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vgdata/lvmysql: 160/1308160 files (4.4% non-contiguous), 1017660/5242880 blocks

The freed up space can now be seen by vgdisplay and can be used to extend other LV's.

After these steps, the partition can be mounted and MySQL started again.

# mount /dev/vgdata/lvmysql /var/lib/mysql
# /etc/init.d/mysql start

In case there are errors in the applications using MySQL or in the error log, you should import the database dumps created in step 1 again.


Add a comment

Show form to leave a comment

Comments (newest first)

No comments yet.

RSS feed

Blog Tags:

  AWS   Android   Ansible   Apache   Apple   Atlassian   BSD   Backup   Bash   Bluecoat   CMS   Chef   Cloud   Coding   Consul   Containers   CouchDB   DB   DNS   Database   Databases   Docker   ELK   Elasticsearch   Filebeat   FreeBSD   Galera   Git   GlusterFS   Grafana   Graphics   HAProxy   HTML   Hacks   Hardware   Icinga   Influx   Internet   Java   KVM   Kibana   Kodi   Kubernetes   LVM   LXC   Linux   Logstash   Mac   Macintosh   Mail   MariaDB   Minio   MongoDB   Monitoring   Multimedia   MySQL   NFS   Nagios   Network   Nginx   OSSEC   OTRS   Office   PGSQL   PHP   Perl   Personal   PostgreSQL   Postgres   PowerDNS   Proxmox   Proxy   Python   Rancher   Rant   Redis   Roundcube   SSL   Samba   Seafile   Security   Shell   SmartOS   Solaris   Surveillance   Systemd   TLS   Tomcat   Ubuntu   Unix   VMWare   VMware   Varnish   Virtualization   Windows   Wireless   Wordpress   Wyse   ZFS   Zoneminder