LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 859|回复: 1

RHEL6 x86 LVM Merge 出错,好像是Bug

[复制链接]
发表于 2010-11-23 23:42:52 | 显示全部楼层 |阅读模式
具体操作如下,略过pv、vg、lv创建过程!



  1. [root@rhelv6 ~]# lvs
  2. LV       VG        Attr   LSize   Origin Snap%  Move Log Copy%  Convert
  3. LogVol00 vg_rhelv6 -wi-ao   5.06g
  4. LogVol01 vg_rhelv6 -wi-ao   2.00g
  5. LogVol02 vg_rhelv6 -wi-ao   1.00g
  6. LogVol03 vg_rhelv6 -wi-ao 480.00m
  7. test     vg_rhelv6 -wi-ao 500.00m
复制代码


可以看到test作为一个可写的LV已经处在挂接(open)状态


  1. [root@rhelv6 ~]# lvcreate  -L 40M -s /dev/vg_rhelv6/test -n s1
  2. Logical volume "s1" created
  3. [root@rhelv6 ~]# lvs
  4. LV       VG        Attr   LSize   Origin Snap%  Move Log Copy%  Convert
  5. LogVol00 vg_rhelv6 -wi-ao   5.06g
  6. LogVol01 vg_rhelv6 -wi-ao   2.00g
  7. LogVol02 vg_rhelv6 -wi-ao   1.00g
  8. LogVol03 vg_rhelv6 -wi-ao 480.00m
  9. s1       vg_rhelv6 swi-a-  40.00m test     0.03
  10. test     vg_rhelv6 owi-ao 500.00m
复制代码


创建一个test lv的snapshot,名字为s1。目前test 为 origin lv 。


  1. [root@rhelv6 ~]# df
  2. 文件系统             1K-块      已用      可用 已用% 挂载点
  3. /dev/mapper/vg_rhelv6-LogVol01
  4.                       2064208    389096   1570256  20% /
  5. tmpfs                   255784        88    255696   1% /dev/shm
  6. /dev/sda1               198337     24176    163921  13% /boot
  7. /dev/mapper/vg_rhelv6-LogVol03
  8.                        476012     10885    440551   3% /home
  9. /dev/mapper/vg_rhelv6-LogVol00
  10.                       5220944   2455132   2500596  50% /usr
  11. /dev/mapper/vg_rhelv6-test
  12.                        495844     10518    459726   3% /opt/real
  13. [root@rhelv6 ~]# mount /dev/vg_rhelv6/s1 /opt/snap/
  14. [root@rhelv6 ~]# cp /var/log/messages  /opt/snap/
  15. [root@rhelv6 ~]# lvs
  16. LV       VG        Attr   LSize   Origin Snap%  Move Log Copy%  Convert
  17. LogVol00 vg_rhelv6 -wi-ao   5.06g
  18. LogVol01 vg_rhelv6 -wi-ao   2.00g
  19. LogVol02 vg_rhelv6 -wi-ao   1.00g
  20. LogVol03 vg_rhelv6 -wi-ao 480.00m
  21. s1       vg_rhelv6 swi-ao  40.00m test     0.06
  22. test     vg_rhelv6 owi-ao 500.00m
复制代码

挂接并写入snapshot , 为后面的merge做准备。目前存储在s1上的数据是写入cow设备的!


  1. [root@rhelv6 ~]# umount /opt/real
  2. [root@rhelv6 ~]# umount /opt/snap
  3. [root@rhelv6 ~]# lvs
  4. LV       VG        Attr   LSize   Origin Snap%  Move Log Copy%  Convert
  5. LogVol00 vg_rhelv6 -wi-ao   5.06g
  6. LogVol01 vg_rhelv6 -wi-ao   2.00g
  7. LogVol02 vg_rhelv6 -wi-ao   1.00g
  8. LogVol03 vg_rhelv6 -wi-ao 480.00m
  9. s1       vg_rhelv6 swi-a-  40.00m test     1.54
  10. test     vg_rhelv6 owi-a- 500.00m
  11. [root@rhelv6 ~]# lvs
  12. LV       VG        Attr   LSize   Origin Snap%  Move Log Copy%  Convert
  13. LogVol00 vg_rhelv6 -wi-ao   5.06g
  14. LogVol01 vg_rhelv6 -wi-ao   2.00g
  15. LogVol02 vg_rhelv6 -wi-ao   1.00g
  16. LogVol03 vg_rhelv6 -wi-ao 480.00m
  17. s1       vg_rhelv6 swi-a-  40.00m test     1.54
  18. test     vg_rhelv6 owi-a- 500.00m
复制代码

确保s1和 test没有open,并且是active的。


  1. [root@rhelv6 ~]# lvconvert --merge vg_rhelv6/s1
  2. Can't merge over open origin volume
  3. Can't merge when snapshot is open
  4. Merging of snapshot s1 will start next activation.

  5. [root@rhelv6 ~]# lvs
  6. LV       VG        Attr   LSize   Origin Snap%  Move Log Copy%  Convert
  7. LogVol00 vg_rhelv6 -wi-ao   5.06g
  8. LogVol01 vg_rhelv6 -wi-ao   2.00g
  9. LogVol02 vg_rhelv6 -wi-ao   1.00g
  10. LogVol03 vg_rhelv6 -wi-ao 480.00m
  11. test     vg_rhelv6 Owi-a- 500.00m
复制代码


到这里就出错了,snapshot明明没有open !按RedHat的文档,这里应该是开始merge,然后删除snapshot. 但目前test显示在merge,但s1去哪里了呢? s1目前的状态应该是Swi-a-的呀!


  1. [root@rhelv6 ~]# lvconvert --merge vg_rhelv6/s1
  2. Snapshot s1 is already merging
复制代码

再次尝试不果!

目前尝试的解决方法如下:

需要重启才能排除

  1. [root@rhelv6 ~]# reboot

  2. Broadcast message from root@rhelv6
  3.        (/dev/pts/0) at 6:13 ...
复制代码

哦,6点了!天快亮了!

重启后

  1. [root@rhelv6 ~]# lvs
  2. /dev/mapper/vg_rhelv6-s1: read failed after 0 of 4096 at 524222464: 输入/输出错误
  3. /dev/mapper/vg_rhelv6-s1: read failed after 0 of 4096 at 524279808: 输入/输出错误
  4. /dev/mapper/vg_rhelv6-s1: read failed after 0 of 4096 at 0: 输入/输出错误
  5. /dev/mapper/vg_rhelv6-s1: read failed after 0 of 4096 at 4096: 输入/输出错误
  6. LV       VG        Attr   LSize   Origin Snap%  Move Log Copy%  Convert
  7. LogVol00 vg_rhelv6 -wi-ao   5.06g
  8. LogVol01 vg_rhelv6 -wi-ao   2.00g
  9. LogVol02 vg_rhelv6 -wi-ao   1.00g
  10. LogVol03 vg_rhelv6 -wi-ao 480.00m
  11. test     vg_rhelv6 Owi-a- 500.00m          0.02
复制代码

这里会报错!状态还重启前一样!


  1. [root@rhelv6 ~]# vgchange -ay
  2. /dev/mapper/vg_rhelv6-s1: read failed after 0 of 4096 at 524222464: 输入/输出错误
  3. /dev/mapper/vg_rhelv6-s1: read failed after 0 of 4096 at 524279808: 输入/输出错误
  4. /dev/mapper/vg_rhelv6-s1: read failed after 0 of 4096 at 0: 输入/输出错误
  5. /dev/mapper/vg_rhelv6-s1: read failed after 0 of 4096 at 4096: 输入/输出错误
  6. 5 logical volume(s) in volume group "vg_rhelv6" now active
  7. [root@rhelv6 ~]# lvs
  8. LV       VG        Attr   LSize   Origin Snap%  Move Log Copy%  Convert
  9. LogVol00 vg_rhelv6 -wi-ao   5.06g
  10. LogVol01 vg_rhelv6 -wi-ao   2.00g
  11. LogVol02 vg_rhelv6 -wi-ao   1.00g
  12. LogVol03 vg_rhelv6 -wi-ao 480.00m
  13. test     vg_rhelv6 -wi-a- 500.00m
  14. [root@rhelv6 ~]#

复制代码


vgchange -ay后就正常了!同时merge也完成!具体验证merge成功的步骤,就略过了,有兴趣的可以自己试试,挂起test lv 看看写入之前s1 lv snapshot中的文件是否merge到test lv中就可以了!
 楼主| 发表于 2010-11-30 17:03:21 | 显示全部楼层
今天抽时间看了merge实现的RedHat代码,终于搞懂了,TMD RedHat那个不完成的文档真的很害人!

具体步骤如下:

  1. [root@rhelv6 ~]# pvs
  2. PV         VG        Fmt  Attr PSize  PFree   
  3. /dev/sda2  vg_rhelv6 lvm2 a-   10.00g 1004.00m
  4. /dev/sda3  vg_rhelv6 lvm2 a-    9.80g    9.80g
  5. [root@rhelv6 ~]# vgs
  6. VG        #PV #LV #SN Attr   VSize  VFree
  7. vg_rhelv6   2   5   0 wz--n- 19.80g 10.78g
  8. [root@rhelv6 ~]# lvs
  9. LV       VG        Attr   LSize   Origin Snap%  Move Log Copy%  Convert
  10. LogVol00 vg_rhelv6 -wi-ao   5.06g                                      
  11. LogVol01 vg_rhelv6 -wi-ao   2.00g                                      
  12. LogVol02 vg_rhelv6 -wi-ao   1.00g                                      
  13. LogVol03 vg_rhelv6 -wi-ao 480.00m                                      
  14. test     vg_rhelv6 -wi-ao 500.00m                                      
  15. [root@rhelv6 ~]# mount
  16. /dev/mapper/vg_rhelv6-LogVol01 on / type ext4 (rw)
  17. proc on /proc type proc (rw)
  18. sysfs on /sys type sysfs (rw)
  19. devpts on /dev/pts type devpts (rw,gid=5,mode=620)
  20. tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
  21. /dev/sda1 on /boot type ext4 (rw)
  22. /dev/mapper/vg_rhelv6-LogVol03 on /home type ext4 (rw)
  23. /dev/mapper/vg_rhelv6-LogVol00 on /usr type ext4 (rw)
  24. none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
  25. sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
  26. /dev/sr0 on /media/RHEL_6.0 i386 Disc 1 type iso9660 (ro,nosuid,nodev,uhelper=udisks,uid=500,gid=500,iocharset=utf8,mode=0400,dmode=0500)
  27. /dev/mapper/vg_rhelv6-test on /opt/real type ext4 (rw)
复制代码

以上是原始状态,测试的LV是/dev/mapper/vg_rhelv6-test(/dev/vg_rhelv6/test),挂接在/opt/real目录上


  1. [root@rhelv6 ~]# cd /opt/real
  2. [root@rhelv6 real]# cp /etc/hosts .
  3. [root@rhelv6 real]# cat /etc/hosts
  4. 172.16.69.129        rhelv6        # Added by NetworkManager
  5. 127.0.0.1        localhost.localdomain        localhost
  6. ::1        rhelv6        localhost6.localdomain6        localhost6
复制代码

做个测试文件,用以比较



  1. [root@rhelv6 real]# cd
  2. [root@rhelv6 ~]# lvcreate -L 50M -s /dev/vg_rhelv6/test -n snap1
  3. Rounding up size to full physical extent 52.00 MiB
  4. Logical volume "snap1" created
复制代码

创建/dev/vg_rhelv6/test的snapshot为/dev/vg_rhelv6/snap1



  1. [root@rhelv6 ~]# mount /dev/vg_rhelv6/snap1 /opt/snap/
  2. [root@rhelv6 ~]# cd /opt/snap/
  3. [root@rhelv6 snap]# cat hosts
  4. 172.16.69.129        rhelv6        # Added by NetworkManager
  5. 127.0.0.1        localhost.localdomain        localhost
  6. ::1        rhelv6        localhost6.localdomain6        localhost6
  7. [root@rhelv6 snap]# sed -i '1d' hosts
  8. [root@rhelv6 snap]# cat hosts
  9. 127.0.0.1        localhost.localdomain        localhost
  10. ::1        rhelv6        localhost6.localdomain6        localhost6
复制代码

将/dev/vg_rhelv6/snap1挂接在/opt/snap上,然后删除测试文件hosts的第一行。



  1. [root@rhelv6 snap]# cd
  2. [root@rhelv6 ~]# lvs
  3. LV       VG        Attr   LSize   Origin Snap%  Move Log Copy%  Convert
  4. LogVol00 vg_rhelv6 -wi-ao   5.06g                                      
  5. LogVol01 vg_rhelv6 -wi-ao   2.00g                                      
  6. LogVol02 vg_rhelv6 -wi-ao   1.00g                                      
  7. LogVol03 vg_rhelv6 -wi-ao 480.00m                                      
  8. snap1    vg_rhelv6 swi-ao  52.00m test     0.05                        
  9. test     vg_rhelv6 owi-ao 500.00m                                      
  10. [root@rhelv6 ~]# df
  11. Filesystem           1K-blocks      Used Available Use% Mounted on
  12. /dev/mapper/vg_rhelv6-LogVol01
  13.                       2064208    375604   1583748  20% /
  14. tmpfs                   255784       420    255364   1% /dev/shm
  15. /dev/sda1               198337     24176    163921  13% /boot
  16. /dev/mapper/vg_rhelv6-LogVol03
  17.                        476012     16332    435104   4% /home
  18. /dev/mapper/vg_rhelv6-LogVol00
  19.                       5220944   2495540   2460188  51% /usr
  20. /dev/sr0               2862360   2862360         0 100% /media/RHEL_6.0 i386 Disc 1
  21. /dev/mapper/vg_rhelv6-test
  22.                        495844     10500    459744   3% /opt/real
  23. /dev/mapper/vg_rhelv6-snap1
  24.                        495844     10500    459744   3% /opt/snap
  25. [root@rhelv6 ~]# umount /opt/real
  26. [root@rhelv6 ~]# umount /opt/snap
  27. [root@rhelv6 ~]# lvs
  28. LV       VG        Attr   LSize   Origin Snap%  Move Log Copy%  Convert
  29. LogVol00 vg_rhelv6 -wi-ao   5.06g                                      
  30. LogVol01 vg_rhelv6 -wi-ao   2.00g                                      
  31. LogVol02 vg_rhelv6 -wi-ao   1.00g                                      
  32. LogVol03 vg_rhelv6 -wi-ao 480.00m                                      
  33. snap1    vg_rhelv6 swi-a-  52.00m test     0.09                        
  34. test     vg_rhelv6 owi-a- 500.00m   
复制代码

查看其状态,并且umount LV及LV-snapshot
            


  1.                        
  2. [root@rhelv6 ~]# lvchange -an /dev/vg_rhelv6/test
复制代码

将LV设为disactive状态,这步很重要,但RedHat文档中没有提及!




  1. [root@rhelv6 ~]# lvs
  2. LV       VG        Attr   LSize   Origin Snap%  Move Log Copy%  Convert
  3. LogVol00 vg_rhelv6 -wi-ao   5.06g                                      
  4. LogVol01 vg_rhelv6 -wi-ao   2.00g                                      
  5. LogVol02 vg_rhelv6 -wi-ao   1.00g                                      
  6. LogVol03 vg_rhelv6 -wi-ao 480.00m                                      
  7. snap1    vg_rhelv6 swi---  52.00m test                                 
  8. test     vg_rhelv6 owi--- 500.00m  
复制代码

确认LV及LV-snapshot没有open并设为disactive状态



  1.                                    
  2. [root@rhelv6 ~]# lvconvert --merge /dev/vg_rhelv6/snap1
  3. Merging of volume snap1 started.
  4. Conversion starts after activation.
复制代码

可以merge了!




  1. [root@rhelv6 ~]# lvs
  2. LV       VG        Attr   LSize   Origin Snap%  Move Log Copy%  Convert
  3. LogVol00 vg_rhelv6 -wi-ao   5.06g                                      
  4. LogVol01 vg_rhelv6 -wi-ao   2.00g                                      
  5. LogVol02 vg_rhelv6 -wi-ao   1.00g                                      
  6. LogVol03 vg_rhelv6 -wi-ao 480.00m                                      
  7. test     vg_rhelv6 Owi--- 500.00m     
复制代码

查看状态LV正在merge !



  1.                               
  2. [root@rhelv6 ~]# lvchange -ay /dev/vg_rhelv6/test
复制代码

将LV设回active状态,如果正常命令无返回,如果还没有merge完毕,你可能会看到错误提示!




  1. [root@rhelv6 ~]# lvs
  2. LV       VG        Attr   LSize   Origin Snap%  Move Log Copy%  Convert
  3. LogVol00 vg_rhelv6 -wi-ao   5.06g                                      
  4. LogVol01 vg_rhelv6 -wi-ao   2.00g                                      
  5. LogVol02 vg_rhelv6 -wi-ao   1.00g                                      
  6. LogVol03 vg_rhelv6 -wi-ao 480.00m                                      
  7. test     vg_rhelv6 -wi-a- 500.00m  
复制代码

正确执行完merge操作后,LV-snapshot设备会被自动删除。



  1.                                     
  2. [root@rhelv6 ~]# mount /dev/vg_rhelv6/test /opt/real/
  3. [root@rhelv6 ~]# cd /opt/real/
  4. [root@rhelv6 real]# cat hosts
  5. 127.0.0.1        localhost.localdomain        localhost
  6. ::1        rhelv6        localhost6.localdomain6        localhost6
  7. [root@rhelv6 real]#
复制代码

验证正确后,收工!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表