分析家 发表于 2015-10-11 13:22:47

在xen下调整基于文件的lvm大小

  One of the best references for getting started using virtual machines using XEN and CentOS can be found here. It is well written, very easy to follow and can quickly get you up and running.
  Recently I had the task of revisiting a virtual machine that was provisioned with a file based file system as outlined in the tutorial. The main task I needed to achieve was to expand the size of the filesystem. Given that the tutorial has you build the virtual machine using tools that have this capability I figured it would not be that hard.
  What is not obvious is that although the filesystem is made in such a way as to easily support this, that the actual practice of making it happen is a little more complicated. Having spent a lot of time googling all the various technologies and not coming up with a solution, I thought I would share what I learned, and give a recipe to perform the same operation on your own virtual server. All the usual caveats apply (use at your own risk, etc.)
  If you are attempting to do something similar, or you are using a different Linux distribution it still may be useful to look at the following, and translate the steps accordingly.
  Here is the recipe, feel free to let me know if it works for you:
  1. Shutdown the VM
  2. Backup the disk image file:
  cp /xen/client8.img /xen/client8.img.backup
  3. Restart the VM so that it can continue to serve while we work
  4. Okay now make a working image from the backup:
  cp client8.img.backup client8ext.img
  5. Use dd to append more space to the end of the file:
  dd if=/dev/zero of=/xen/client8xen.img bs=1M seek=10000 count=5000
  This assumes an initial filesystem that is 10G and is expanding it to 15G
  6. Check to see that the disk image file has grown the correct amount
  ls -l /xen/client8ext.img
  Should look something like
  -rw-r–r– 1 root root 15728640000 Oct 26 02:22 client8ext.img
  7. Mount the disk image on the loopback device:
  /sbin/losetup /dev/loop1 /xen/client8ext.img
  Here I am mounting it on loop1 because my initial loop0 was already in use. Just make sure that you mount it on an unused loop device and you should be fine.
  Check that it has mounted okay:
  /sbin/fdisk -l -u /dev/loop1
  Should look something like:
  Disk /dev/loop1: 15.7 GB, 15728640000 bytes
255 heads, 63 sectors/track, 1912 cylinders, total 30720000 sectors
Units = sectors of 1 * 512 = 512 bytes
  Device Boot      Start         End      Blocks   IdSystem
/dev/loop1p1   *          63      208844      104391   83Linux
/dev/loop1p2          208845    20466809    10128982+8eLinux LVM
  7. Find the start of the primary root partition. In the above example the LVM partition starts at 208845. Use the following formula to find the offset in the file where the LVM starts.
  START * 512
  8. Mount the volume group using the -o parameter and the calculated start value:
  /sbin/losetup -o 106928640 /dev/loop2 /dev/loop1
  9. Edit lvm.conf to filter out any other devices. If you are not actively using lvm on your working server it may be easy enough to just filter out everything but the loop devices. and return it back after you have finished. Here is a good reference on how to do this. In the end I just ended up changing the filter setting to
  filter = [ "a/loop.*/", "r/.*/" ]
  10. Rerun vgscan and check that it finds the volumes
  /sbin/vgscan
  You should see something like:
  Reading all physical volumes.This may take a while…
Found volume group “VolGroup00″ using metadata type lvm2
  11. Okay now to resize the physical volume. Check to see that you can see it:
  /usr/sbin/pvdisplay
  Should get something like:
  — Physical volume —
PV Name               /dev/loop2
VG Name               VolGroup00
PV Size               9.66 GB / not usable 3.58 MB
Allocatable         yes (but full)
PE Size (KByte)       32768
Total PE            309
Free PE               0
Allocated PE          309
PV UUID               IUefv0-aFx9-iPQn-p2nb-VOGO-ioQo-4XsfUc
  12. Okay now to resize the physical volume:
  /usr/sbin/pvresize /dev/loop2
  Check that it worked:
  /usr/sbin/pvdisplay
  Output should now look something like:
  — Physical volume —
PV Name               /dev/loop2
VG Name               VolGroup00
PV Size               14.55 GB / not usable 17.84 MB
Allocatable         yes
PE Size (KByte)       32768
Total PE            465
Free PE               156
Allocated PE          309
PV UUID               IUefv0-aFx9-iPQn-p2nb-VOGO-ioQo-4XsfUc
  13. Now to resize the logical volumes:
  /usr/sbin/lvdisplay
  Should get something like:
  — Logical volume —
LV Name                /dev/VolGroup00/LogVol00
VG Name                VolGroup00
LV UUID                4vMcGJ-jOdo-idMa-Q3qR-31Hg-YKHs-2ppTQA
LV Write Access      read/write
LV Status            NOT available
LV Size                9.16 GB
Current LE             293
Segments               1
Allocation             inherit
Read ahead sectors   0
  — Logical volume —
LV Name                /dev/VolGroup00/LogVol01
VG Name                VolGroup00
LV UUID                wRtiQA-dZX1-fKI0-4yv2-FfPw-0F3C-8RThgX
LV Write Access      read/write
LV Status            NOT available
LV Size                512.00 MB
Current LE             16
Segments               1
Allocation             inherit
Read ahead sectors   0
  14. Start by extending the swap space:
  /usr/sbin/lvextend -L +512M /dev/VolGroup00/LogVol01
  Then extend the root partition. Let’s use all available space this time.
  Look up free extents:
  /usr/sbin/vgdisplay
  Get Something like:
  — Volume group —
VG Name               VolGroup00
System ID
Format                lvm2
Metadata Areas      1
Metadata Sequence No5
VG Access             read/write
VG Status             resizable
MAX LV                0
Cur LV                2
Open LV               0
Max PV                0
Cur PV                1
Act PV                1
VG Size               14.53 GB
PE Size               32.00 MB
Total PE            465
Alloc PE / Size       325 / 10.16 GB
FreePE / Size       140 / 4.38 GB
VG UUID               ecCfkb-oPKd-Tf4S-VTLj-2M9c-LJJj-BHBPh2
  15. Free extents are 140. Use this to extend the root partition:
  /usr/sbin/lvextend -l+140 /dev/VolGroup00/LogVol00
  16. Activate the root logical volume so that we can resize it:
  /usr/sbin/lvchange -ay /dev/VolGroup00/LogVol00
  17. Now we need to resize the file system. The docs I found suggest that you run a filesystem check both before and after you have resized the partiion:
  /sbin/e2fsck -f /dev/VolGroup00/LogVol00
/sbin/resize2fs /dev/VolGroup00/LogVol00
  Check the filesystem again:
  /sbin/e2fsck -f /dev/VolGroup00/LogVol00
  18. Okay now deactivate the root partition:
  /usr/sbin/lvchange -an /dev/VolGroup00/LogVol00
  19. Activate the swap partition:
  /usr/sbin/lvchange -ay /dev/VolGroup00/LogVol01
  20. Run mkswap on the extended swap partition:
  /sbin/mkswap /dev/VolGroup00/LogVol01
  21. Everything okay, now deactivate it again:
  /usr/sbin/lvchange -an /dev/VolGroup00/LogVol01
  22. Change the size of the LVM partition on /dev/loop1 using fdisk. This step caught me out. The disk partition information needs to be updated to reflect the new LVM size. Just launch fdisk and find the last partition. Then change it to reflect the full size of the drive.
  
  fdisk /dev/loop1
           fdisk>d
           fdisk>2
           fdisk>n
           fdisk>2
           fdisk>enter
           fdisk>enter
           fdisk>w
  23. Deactivate the loop devices:
  /sbin/losetup -d /dev/loop2
/sbin/losetup -d /dev/loop1
  Your file based filesystem should now be ready to use with your current virtual machine. Change the appropriate line in your server’s XEN configuration and restart your server and enjoy!
             版权声明:本文为博主原创文章,未经博主允许不得转载。
页: [1]
查看完整版本: 在xen下调整基于文件的lvm大小