最新消息:阿啰哈,本人90后,目前单身,欢迎妹子们来撩!.(。→‿←。) 微信:frank01991

LVM磁盘抽离

CentOS 林志斌 986浏览
假如,LVM中有两个磁盘,且磁盘当中储存着一些数据,由于某些原因(如旧磁盘使用年限较久,想用新磁盘替换旧磁盘;或这两个磁盘容量较小,想用一个新的大容量磁盘替换旧磁盘,等等),现在想用一个新的磁盘替换掉这两个旧磁盘,旧磁盘会最终从系统中抽离出来。

先准备一下模拟环境,创建两个PV
[[email protected] ~]# pvcreate /dev/sd{b,c}1
  Writing physical volume data to disk "/dev/sdb1"
  Physical volume "/dev/sdb1" successfully created
  Writing physical volume data to disk "/dev/sdc1"
  Physical volume "/dev/sdc1" successfully created
[[email protected] ~]# pvs
  PV         VG       Fmt  Attr PSize    PFree   
  /dev/sda2  VolGroup lvm2 a--    19.51g       0 
  /dev/sdb1           lvm2 a--  1019.72m 1019.72m
  /dev/sdc1           lvm2 a--  1019.72m 1019.72m

把这两个PV组成一个VG
[[email protected] ~]# vgcreate kashuVG /dev/sd[b-c]1
  Volume group "kashuVG" successfully created

[[email protected] ~]# vgs
  VG       #PV #LV #SN Attr   VSize  VFree
  VolGroup   1   2   0 wz--n- 19.51g    0 
  kashuVG    2   0   0 wz--n-  1.98g 1.98g

把VG中所有的容量都给新建的LV
[[email protected] ~]# lvcreate -l 100%VG -n kashuLV kashuVG
  Logical volume "kashuLV" created

[[email protected] ~]# lvs
  LV      VG       Attr     LSize  Pool Origin Data%  Move Log Copy%  Convert
  lv_root VolGroup -wi-ao-- 18.51g                                           
  lv_swap VolGroup -wi-ao--  1.00g                                           
  kashuLV kashuVG  -wi-a---  1.98g         

创建文件系统
[[email protected] ~]# mkfs.ext4 /dev/kashuVG/kashuLV 
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
130048 inodes, 520192 blocks
26009 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=532676608
16 block groups
32768 blocks per group, 32768 fragments per group
8128 inodes per group
Superblock backups stored on blocks: 
32768, 98304, 163840, 229376, 294912

Writing inode tables: done                            
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 25 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

挂载,并在这个LV中放入一些数据
[[email protected] ~]# mount /dev/kashuVG/kashuLV /mnt/kashuLV/
[[email protected] ~]# cp -a /boot/ /etc/ /mnt/kashuLV/
[[email protected] ~]# ls /mnt/kashuLV/
boot  etc  lost+found

这个LV一共有2GB的容量
[[email protected] ~]# lvdisplay /dev/kashuVG/kashuLV 
  --- Logical volume ---
  LV Path                /dev/kashuVG/kashuLV
  LV Name                kashuLV
  VG Name                kashuVG
  LV UUID                PMVI1z-zMd1-LLhB-qAdf-nv1e-okUA-ZrdYDX
  LV Write Access        read/write
  LV Creation host, time kashu.localdomain, 2013-05-10 05:24:25 -0400
  LV Status              available
  # open                 1
  LV Size                1.98 GiB
  Current LE             508
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:2
   
但该分区目前实际只使用了94MB
[[email protected] ~]# df -hT | grep kashu
/dev/mapper/kashuVG-kashuLV    ext4    2.0G   94M  1.8G   5% /mnt/kashuLV



好,环境就像上面这样。我准备在系统中放入一个新磁盘,替换掉这两个旧磁盘,最终这两个旧磁盘会被拿出来,但数据始终不能受到一点损坏,原磁盘中的数据会被迁移到新的磁盘中继续被使用。

1、使用fdisk或parted把sdd新磁盘进行分区,类型设置为8e,并且所有容量都划分到一个分区中了(步骤没贴出来)。开始新建一个PV
[[email protected] ~]# pvcreate /dev/sdd1
  Writing physical volume data to disk "/dev/sdd1"
  Physical volume "/dev/sdd1" successfully created

[[email protected] ~]# pvs
  PV         VG       Fmt  Attr PSize    PFree   
  /dev/sda2  VolGroup lvm2 a--    19.51g       0 
  /dev/sdb1  kashuVG  lvm2 a--  1016.00m       0 
  /dev/sdc1  kashuVG  lvm2 a--  1016.00m       0 
  /dev/sdd1           lvm2 a--  1019.72m 1019.72m

2、把新PV加入到VG中
[[email protected] ~]# vgextend kashuVG /dev/sdd1
  Volume group "kashuVG" successfully extended

[[email protected] ~]# pvs
  PV         VG       Fmt  Attr PSize    PFree   
  /dev/sda2  VolGroup lvm2 a--    19.51g       0 
  /dev/sdb1  kashuVG  lvm2 a--  1016.00m       0 
  /dev/sdc1  kashuVG  lvm2 a--  1016.00m       0 
  /dev/sdd1  kashuVG  lvm2 a--  1016.00m 1016.00m

3、/dev/sdd1这个PV共254个PE,可用容量有1GB,需要保证待会迁移到新磁盘(新LV)中的数据能够被全部容纳。
[[email protected] ~]# pvdisplay /dev/sdd1
  --- Physical volume ---
  PV Name               /dev/sdd1
  VG Name               kashuVG
  PV Size               1019.72 MiB / not usable 3.72 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              254
  Free PE               254
  Allocated PE          0
  PV UUID               27pvVQ-lERX-91ew-0XL2-Oxbk-NFKh-7l6c4M

[[email protected] ~]# lvs
  LV      VG       Attr     LSize  Pool Origin Data%  Move Log Copy%  Convert
  lv_root VolGroup -wi-ao-- 18.51g                                           
  lv_swap VolGroup -wi-ao--  1.00g                                           
  kashuLV kashuVG  -wi-ao--  1.98g                                           

把VG中的254个空闲PE添加到/dev/kashuVG/kashuLV中,实现LV的扩容
[[email protected] ~]# lvresize -l +254 /dev/kashuVG/kashuLV 
  Extending logical volume kashuLV to 2.98 GiB
  Logical volume kashuLV successfully resized

[[email protected] ~]# lvs
  LV      VG       Attr     LSize  Pool Origin Data%  Move Log Copy%  Convert
  lv_root VolGroup -wi-ao-- 18.51g                                           
  lv_swap VolGroup -wi-ao--  1.00g                                           
  kashuLV kashuVG  -wi-ao--  2.98g                                           

4、虽然LV已扩容,但文件系统的大小并未被同时更新,所以必需使用resize2fs把文件系统也更新
[[email protected] ~]# df -hT | grep kashu
/dev/mapper/kashuVG-kashuLV    ext4    2.0G   92M  1.8G   5% /mnt/kashuLV

[[email protected] ~]# resize2fs /dev/kashuVG/kashuLV 
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/kashuVG/kashuLV is mounted on /mnt/kashuLV; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/kashuVG/kashuLV to 780288 (4k) blocks.
The filesystem on /dev/kashuVG/kashuLV is now 780288 blocks long.

[[email protected] ~]# df -hT | grep kashu
/dev/mapper/kashuVG-kashuLV    ext4    3.0G   92M  2.7G   4% /mnt/kashuLV

5、上面的所有操作其实就是把新磁盘加入到现有的LV中,扩容了。因为接一来我们才可以把数据迁移到新磁盘中。
先umount挂载点
[[email protected] ~]# umount /mnt/kashuLV/

6、使用e2fsck -f检查文件系统
[[email protected] ~]# e2fsck -f /dev/kashuVG/kashuLV 
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/kashuVG/kashuLV: 1113/195072 files (0.0% non-contiguous), 35573/780288 blocks

7、把文件系统减小到500MB。这步操作一定要保证:所减小到的500MB要大于该文件系统已有数据的总大小(92MB)
[[email protected] ~]# resize2fs /dev/kashuVG/kashuLV 500M
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/kashuVG/kashuLV to 128000 (4k) blocks.
The filesystem on /dev/kashuVG/kashuLV is now 128000 blocks long.

8、重新挂载,查看文件系统的确减小到了500MB
[[email protected] ~]# mount /dev/kashuVG/kashuLV /mnt/kashuLV/
[[email protected] ~]# df -hT | grep kashu
/dev/mapper/kashuVG-kashuLV    ext4    493M   90M  378M  20% /mnt/kashuLV

9、接着,把3GB的LV也缩小,减去2.3GB,最终LV剩700MB了(而且操作时尽量注意LV大于对应的文件系统大小)
[[email protected] ~]# lvs
  LV      VG       Attr     LSize  Pool Origin Data%  Move Log Copy%  Convert
  lv_root VolGroup -wi-ao-- 18.51g
  lv_swap VolGroup -wi-ao--  1.00g
  kashuLV kashuVG  -wi-ao--  2.98g

[[email protected] ~]# lvresize -L -2.3G /dev/kashuVG/kashuLV 
  Rounding size to boundary between physical extents: 2.30 GiB
  WARNING: Reducing active and open logical volume to 696.00 MiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce kashuLV? [y/n]: y
  Reducing logical volume kashuLV to 696.00 MiB
  Logical volume kashuLV successfully resized

[[email protected] ~]# lvs
  LV      VG       Attr     LSize   Pool Origin Data%  Move Log Copy%  Convert
  lv_root VolGroup -wi-ao--  18.51g                                           
  lv_swap VolGroup -wi-ao--   1.00g                                           
  kashuLV kashuVG  -wi-ao-- 696.00m                                           

10、接下来,检查一下PV中的PE分配情况,sdb1和sdc1中所有的PE都应该向sdd1中移动。那现在只有sdb1中的PE需要向sdd1中移动,因为sdc1中所有的PE都是空闲的,这个就不需要移了。
[[email protected] ~]# pvdisplay /dev/sd{b,c,d}1
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               kashuVG
  PV Size               1019.72 MiB / not usable 3.72 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              254
  Free PE               80
  Allocated PE          174
  PV UUID               TEiNQm-3H9i-OpmE-p5cX-KgRS-aGuf-HKaLON
   
  --- Physical volume ---
  PV Name               /dev/sdc1
  VG Name               kashuVG
  PV Size               1019.72 MiB / not usable 3.72 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              254
  Free PE               254
  Allocated PE          0
  PV UUID               Duz6zM-GJwo-8cc5-5Jp2-vGiH-0j0L-gSvUtl
   
  --- Physical volume ---
  PV Name               /dev/sdd1
  VG Name               kashuVG
  PV Size               1019.72 MiB / not usable 3.72 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              254
  Free PE               254
  Allocated PE          0
  PV UUID               27pvVQ-lERX-91ew-0XL2-Oxbk-NFKh-7l6c4M
把sdb1中的所有PE都移动到sdd1中(注意,因为sdd1完全可以容纳sdb1中所有的PE)
[[email protected] ~]# pvmove /dev/sdb1 /dev/sdd1
  /dev/sdb1: Moved: 0.0%
  /dev/sdb1: Moved: 100.0%

移动完成后再检查一下,现在sdb1和sdc1所有的PE都空闲了
[[email protected] ~]# pvdisplay /dev/sd[b-d]1
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               kashuVG
  PV Size               1019.72 MiB / not usable 3.72 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              254
  Free PE               254
  Allocated PE          0
  PV UUID               TEiNQm-3H9i-OpmE-p5cX-KgRS-aGuf-HKaLON
   
  --- Physical volume ---
  PV Name               /dev/sdc1
  VG Name               kashuVG
  PV Size               1019.72 MiB / not usable 3.72 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              254
  Free PE               254
  Allocated PE          0
  PV UUID               Duz6zM-GJwo-8cc5-5Jp2-vGiH-0j0L-gSvUtl
   
  --- Physical volume ---
  PV Name               /dev/sdd1
  VG Name               kashuVG
  PV Size               1019.72 MiB / not usable 3.72 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              254
  Free PE               80
  Allocated PE          174
  PV UUID               27pvVQ-lERX-91ew-0XL2-Oxbk-NFKh-7l6c4M
11、可以把sdb1和sdc1这两个PV从VG中移除了
[[email protected] ~]# vgreduce kashuVG /dev/sd[b-c]1
  Removed "/dev/sdb1" from volume group "kashuVG"
  Removed "/dev/sdc1" from volume group "kashuVG"

[[email protected] ~]# pvs
  PV         VG       Fmt  Attr PSize    PFree   
  /dev/sda2  VolGroup lvm2 a--    19.51g       0 
  /dev/sdb1           lvm2 a--  1019.72m 1019.72m
  /dev/sdc1           lvm2 a--  1019.72m 1019.72m
  /dev/sdd1  kashuVG  lvm2 a--  1016.00m  320.00m

12、之后就可以把这两个PV删除了。当删除这两个PV后,其实就可以把这两个磁盘从系统中抽离出来了。至此就已经完成了。
[[email protected] ~]# pvremove /dev/sd[b-c]1
  Labels on physical volume "/dev/sdb1" successfully wiped
  Labels on physical volume "/dev/sdc1" successfully wiped

[[email protected] ~]# pvs
  PV         VG       Fmt  Attr PSize    PFree  
  /dev/sda2  VolGroup lvm2 a--    19.51g      0 
  /dev/sdd1  kashuVG  lvm2 a--  1016.00m 320.00m

13、但是,我们还是得回来检查一下数据,数据完好无损。
[[email protected] ~]# ll /mnt/kashuLV/
total 24
dr-xr-xr-x.  6 root root  4096 May  2 03:53 boot
drwxr-xr-x. 60 root root  4096 May 10 05:25 etc
drwx------   2 root root 16384 May 10 05:24 lost+found

[[email protected] ~]# cat /mnt/kashuLV/etc/fstab 
# /etc/fstab
# Created by anaconda on Fri Mar 29 07:11:47 2013
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
#lable mount point fs type options dump fsck
/dev/mapper/VolGroup-lv_root /                       ext4    defaults        1 1
UUID=c7122f5e-be55-4e0a-882e-a49e94f1e58d /boot                   ext4    defaults,usrquota,grpquota        1 2
/dev/mapper/VolGroup-lv_swap  swap                    swap    defaults        0  0
tmpfs /dev/shm                tmpfs   defaults        0  0
devpts /dev/pts                devpts  gid=5,mode=620  0  0
sysfs /sys                    sysfs   defaults        0  0
proc /proc                   proc    defaults        0  0

转载请注明:林志斌 » LVM磁盘抽离

发表评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址