{"id":351,"date":"2012-11-10T09:01:13","date_gmt":"2012-11-10T15:01:13","guid":{"rendered":"http:\/\/mcguyverofbeer.com\/?p=351"},"modified":"2012-11-10T09:03:15","modified_gmt":"2012-11-10T15:03:15","slug":"ext4-lvm-add-extend-and-resize-the-fs-all-online","status":"publish","type":"post","link":"https:\/\/www.scottharvanek.com\/?p=351","title":{"rendered":"LVM Add, Extend and Resize the FS (ext4) all online"},"content":{"rendered":"<p>Lets say we have a volume group called vg_hostname, in that volume group there are 3 logical volumes:<\/p>\n<p><code>[root@hostname ~]# lvs<br \/>\n  LV      VG       Attr     LSize   Pool Origin Data%  Move Log Copy%  Convert<br \/>\n  lv_home vg_hostname -wi-ao-- 60.00g<br \/>\n  lv_root vg_hostname -wi-ao--  50.00g<br \/>\n  lv_swap vg_hostname -wi-ao--   1.97g    <\/code><\/p>\n<p> lv_home is mounted as \/home, is 60GB and, is full.  We need to add more space to it but what if the volume group is full?<\/p>\n<p><code>[root@hostname ~]# vgs<br \/>\n  VG       #PV #LV #SN Attr   VSize   VFree<br \/>\n  vg_mail2   2   3   0 wz--n- 120.00g    0 <\/code><\/p>\n<p>Luckily LVM allows us to add another physical volume to the volume group to get the space we need.  So lets add a new 80GB disk, lets assume that this is \/dev\/vdb<\/p>\n<p>First, we need to partition the device and set the partition as type LVM:<br \/>\n<code>[root@hostname ~]# fdisk \/dev\/vdb<br \/>\nDevice contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel<br \/>\nBuilding a new DOS disklabel with disk identifier 0x496ca2c7.<br \/>\nChanges will remain in memory only, until you decide to write them.<br \/>\nAfter that, of course, the previous content won't be recoverable.<\/p>\n<p>Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)<\/p>\n<p>WARNING: DOS-compatible mode is deprecated. It's strongly recommended to<br \/>\n         switch off the mode (command 'c') and change display units to<br \/>\n         sectors (command 'u').<\/p>\n<p>Command (m for help): p<\/p>\n<p>Disk \/dev\/vdb: 85.9 GB, 85899345920 bytes<br \/>\n16 heads, 63 sectors\/track, 166440 cylinders<br \/>\nUnits = cylinders of 1008 * 512 = 516096 bytes<br \/>\nSector size (logical\/physical): 512 bytes \/ 512 bytes<br \/>\nI\/O size (minimum\/optimal): 512 bytes \/ 512 bytes<br \/>\nDisk identifier: 0x496ca2c7<\/p>\n<p>   Device Boot      Start         End      Blocks   Id  System<\/p>\n<p>Command (m for help): n<br \/>\nCommand action<br \/>\n   e   extended<br \/>\n   p   primary partition (1-4)<br \/>\np<br \/>\nPartition number (1-4): 1<br \/>\nFirst cylinder (1-166440, default 1):<br \/>\nUsing default value 1<br \/>\nLast cylinder, +cylinders or +size{K,M,G} (1-166440, default 166440):<br \/>\nUsing default value 166440<\/p>\n<p>Command (m for help): p<\/p>\n<p>Disk \/dev\/vdb: 85.9 GB, 85899345920 bytes<br \/>\n16 heads, 63 sectors\/track, 166440 cylinders<br \/>\nUnits = cylinders of 1008 * 512 = 516096 bytes<br \/>\nSector size (logical\/physical): 512 bytes \/ 512 bytes<br \/>\nI\/O size (minimum\/optimal): 512 bytes \/ 512 bytes<br \/>\nDisk identifier: 0x496ca2c7<\/p>\n<p>   Device Boot      Start         End      Blocks   Id  System<br \/>\n\/dev\/vdb1               1      166440    83885728+  83  Linux<\/p>\n<p>Command (m for help): t<br \/>\nSelected partition 1<br \/>\nHex code (type L to list codes): L<\/p>\n<p> 0  Empty           24  NEC DOS         81  Minix \/ old Lin bf  Solaris<br \/>\n 1  FAT12           39  Plan 9          82  Linux swap \/ So c1  DRDOS\/sec (FAT-<br \/>\n 2  XENIX root      3c  PartitionMagic  83  Linux           c4  DRDOS\/sec (FAT-<br \/>\n 3  XENIX usr       40  Venix 80286     84  OS\/2 hidden C:  c6  DRDOS\/sec (FAT-<br \/>\n 4  FAT16 <32M      41  PPC PReP Boot   85  Linux extended  c7  Syrinx         \n 5  Extended        42  SFS             86  NTFS volume set da  Non-FS data    \n 6  FAT16           4d  QNX4.x          87  NTFS volume set db  CP\/M \/ CTOS \/ .\n 7  HPFS\/NTFS       4e  QNX4.x 2nd part 88  Linux plaintext de  Dell Utility   \n 8  AIX             4f  QNX4.x 3rd part 8e  Linux LVM       df  BootIt         \n 9  AIX bootable    50  OnTrack DM      93  Amoeba          e1  DOS access     \n a  OS\/2 Boot Manag 51  OnTrack DM6 Aux 94  Amoeba BBT      e3  DOS R\/O        \n b  W95 FAT32       52  CP\/M            9f  BSD\/OS          e4  SpeedStor      \n c  W95 FAT32 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad hi eb  BeOS fs        \n e  W95 FAT16 (LBA) 54  OnTrackDM6      a5  FreeBSD         ee  GPT            \n f  W95 Ext'd (LBA) 55  EZ-Drive        a6  OpenBSD         ef  EFI (FAT-12\/16\/\n10  OPUS            56  Golden Bow      a7  NeXTSTEP        f0  Linux\/PA-RISC b\n11  Hidden FAT12    5c  Priam Edisk     a8  Darwin UFS      f1  SpeedStor      \n12  Compaq diagnost 61  SpeedStor       a9  NetBSD          f4  SpeedStor      \n14  Hidden FAT16 <3 63  GNU HURD or Sys ab  Darwin boot     f2  DOS secondary  \n16  Hidden FAT16    64  Novell Netware  af  HFS \/ HFS+      fb  VMware VMFS    \n17  Hidden HPFS\/NTF 65  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE \n18  AST SmartSleep  70  DiskSecure Mult b8  BSDI swap       fd  Linux raid auto\n1b  Hidden W95 FAT3 75  PC\/IX           bb  Boot Wizard hid fe  LANstep        \n1c  Hidden W95 FAT3 80  Old Minix       be  Solaris boot    ff  BBT            \n1e  Hidden W95 FAT1\nHex code (type L to list codes): 8e\nChanged system type of partition 1 to 8e (Linux LVM)\n\nCommand (m for help): p\n\nDisk \/dev\/vdb: 85.9 GB, 85899345920 bytes\n16 heads, 63 sectors\/track, 166440 cylinders\nUnits = cylinders of 1008 * 512 = 516096 bytes\nSector size (logical\/physical): 512 bytes \/ 512 bytes\nI\/O size (minimum\/optimal): 512 bytes \/ 512 bytes\nDisk identifier: 0x496ca2c7\n\n   Device Boot      Start         End      Blocks   Id  System\n\/dev\/vdb1               1      166440    83885728+  8e  Linux LVM\n\nCommand (m for help): w\nThe partition table has been altered!\n\nCalling ioctl() to re-read partition table.\nSyncing disks.<\/code><\/p>\n<p>Now we have a LVM partition as \/dev\/vdb1, next turn it into a usable physical volume:<\/p>\n<p><code>[root@hostname ~]# pvcreate \/dev\/vdb1<br \/>\n  Writing physical volume data to disk \"\/dev\/vdb1\"<br \/>\n  Physical volume \"\/dev\/vdb1\" successfully created<\/code><\/p>\n<p>Adding the new physical volume to our vg_hostname volume group is quite easy:<br \/>\n<code>[root@hostname ~]# vgextend vg_mail2 \/dev\/vdb1<br \/>\n<\/code><\/p>\n<p>Now we have an extra 80GB available in our volume group!<br \/>\n<code>[root@hostname ~]# vgs<br \/>\n  VG       #PV #LV #SN Attr   VSize   VFree<br \/>\n  vg_mail2   2   3   0 wz--n- 199.50g 80.00g<\/code><\/p>\n<p>Next we need to extend our vg_home logical volume to get that 80GB usable for that \"partition\" and since we want to use all available space we set the `-l +100%FREE1 flag\/value to expand the logical volume to all available free space:<\/p>\n<p><code>[root@hostname ~]# lvextend -l +100%FREE \/dev\/vg_hostname\/lv_home<br \/>\n  Extending logical volume lv_home to 147.54 GiB<br \/>\n  Logical volume lv_home successfully resized<\/code><\/p>\n<p>Now our underlying device is 147.54GiB but our file system (ext4) is still the original 60GB, using resize2fs we can extend that ext4 filesystem to consume the new space:<\/p>\n<p><code>[root@hostname ~]# resize2fs \/dev\/vg_hostname\/lv_home<br \/>\nresize2fs 1.41.12 (17-May-2010)<br \/>\nResizing the filesystem on \/dev\/vg_hostname\/lv_home to 38675456 (4k) blocks.<br \/>\nThe filesystem on \/dev\/vg_hostname\/lv_home is now 38675456 blocks long.<\/code><\/p>\n<p>And now, we've added 80GB to our \/home mount without taking the system or mount point offline.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lets say we have a volume group called vg_hostname, in that volume group there are 3 logical volumes: [root@hostname ~]# lvs LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert lv_home vg_hostname -wi-ao&#8211; 60.00g lv_root vg_hostname -wi-ao&#8211; 50.00g &hellip; <a href=\"https:\/\/www.scottharvanek.com\/?p=351\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[18,1],"tags":[],"class_list":["post-351","post","type-post","status-publish","format-standard","hentry","category-linux","category-opensource"],"_links":{"self":[{"href":"https:\/\/www.scottharvanek.com\/index.php?rest_route=\/wp\/v2\/posts\/351","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.scottharvanek.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.scottharvanek.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.scottharvanek.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.scottharvanek.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=351"}],"version-history":[{"count":3,"href":"https:\/\/www.scottharvanek.com\/index.php?rest_route=\/wp\/v2\/posts\/351\/revisions"}],"predecessor-version":[{"id":354,"href":"https:\/\/www.scottharvanek.com\/index.php?rest_route=\/wp\/v2\/posts\/351\/revisions\/354"}],"wp:attachment":[{"href":"https:\/\/www.scottharvanek.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=351"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.scottharvanek.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=351"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.scottharvanek.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=351"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}