1. 程式人生 > >問題:H版Cinder對接Ceph,把備份卷恢復到源卷報錯

問題:H版Cinder對接Ceph,把備份卷恢復到源卷報錯

一、問題現象

Cinder是H版程式碼,對接的儲存是Ceph。
使用cinder命令可以成功建立資料卷並備份資料卷。
但是,使用cinder backup-restore命令恢復備份卷時,如果指定了恢復到源卷,會導致源卷的狀態變為error_restoring:

# cinder backup-restore --volume-id <volume-id> <backup-id>

二、問題分析

在日誌/var/log/cinder/backup.log中,有如下報錯:
2014-06-26 15:53:26.456 28145 DEBUG cinder.backup.drivers.ceph [req-b873021e-b757-4d7d-be4c-235db3949930 admin 23770234f509405dbe5de13faf5bb976] dest volume is original volume - forcing full copy _diff_restore_allowed /usr/lib/python2.6/site-packages/cinder/backup/drivers/ceph.py:914
2014-06-26 15:53:26.643 28145 ERROR cinder.openstack.common.rpc.amqp [req-b873021e-b757-4d7d-be4c-235db3949930 admin 23770234f509405dbe5de13faf5bb976] Exception during message handling
2014-06-26 15:53:26.643 28145 TRACE cinder.openstack.common.rpc.amqp Traceback (most recent call last):
2014-06-26 15:53:26.643 28145 TRACE cinder.openstack.common.rpc.amqp   File "/usr/lib/python2.6/site-packages/cinder/openstack/common/rpc/amqp.py", line 441, in _process_data
2014-06-26 15:53:26.643 28145 TRACE cinder.openstack.common.rpc.amqp     **args)
2014-06-26 15:53:26.643 28145 TRACE cinder.openstack.common.rpc.amqp   File "/usr/lib/python2.6/site-packages/cinder/openstack/common/rpc/dispatcher.py", line 148, in dispatch
2014-06-26 15:53:26.643 28145 TRACE cinder.openstack.common.rpc.amqp     return getattr(proxyobj, method)(ctxt, **kwargs)
2014-06-26 15:53:26.643 28145 TRACE cinder.openstack.common.rpc.amqp   File "/usr/lib/python2.6/site-packages/cinder/utils.py", line 808, in wrapper
2014-06-26 15:53:26.643 28145 TRACE cinder.openstack.common.rpc.amqp     return func(self, *args, **kwargs)
2014-06-26 15:53:26.643 28145 TRACE cinder.openstack.common.rpc.amqp   File "/usr/lib/python2.6/site-packages/cinder/backup/manager.py", line 346, in restore_backup
2014-06-26 15:53:26.643 28145 TRACE cinder.openstack.common.rpc.amqp     {'status': 'available'})
2014-06-26 15:53:26.643 28145 TRACE cinder.openstack.common.rpc.amqp   File "/usr/lib64/python2.6/contextlib.py", line 23, in __exit__
2014-06-26 15:53:26.643 28145 TRACE cinder.openstack.common.rpc.amqp     self.gen.next()
2014-06-26 15:53:26.643 28145 TRACE cinder.openstack.common.rpc.amqp   File "/usr/lib/python2.6/site-packages/cinder/backup/manager.py", line 340, in restore_backup
2014-06-26 15:53:26.643 28145 TRACE cinder.openstack.common.rpc.amqp     backup_service)
2014-06-26 15:53:26.643 28145 TRACE cinder.openstack.common.rpc.amqp   File "/usr/lib/python2.6/site-packages/cinder/volume/drivers/rbd.py", line 800, in restore_backup
2014-06-26 15:53:26.643 28145 TRACE cinder.openstack.common.rpc.amqp     backup_service.restore(backup, volume['id'], rbd_fd)
2014-06-26 15:53:26.643 28145 TRACE cinder.openstack.common.rpc.amqp   File "/usr/lib/python2.6/site-packages/cinder/backup/drivers/ceph.py", line 986, in restore
2014-06-26 15:53:26.643 28145 TRACE cinder.openstack.common.rpc.amqp     self._restore_volume(backup, target_volume, volume_file)
2014-06-26 15:53:26.643 28145 TRACE cinder.openstack.common.rpc.amqp   File "/usr/lib/python2.6/site-packages/cinder/backup/drivers/ceph.py", line 976, in _restore_volume
2014-06-26 15:53:26.643 28145 TRACE cinder.openstack.common.rpc.amqp     volume_name, length, src_snap=restore_point)
2014-06-26 15:53:26.643 28145 TRACE cinder.openstack.common.rpc.amqp   File "/usr/lib/python2.6/site-packages/cinder/backup/drivers/ceph.py", line 775, in _full_restore
2014-06-26 15:53:26.643 28145 TRACE cinder.openstack.common.rpc.amqp     snapshot=src_snap, read_only=True)
2014-06-26 15:53:26.643 28145 TRACE cinder.openstack.common.rpc.amqp   File "/usr/lib/python2.6/site-packages/rbd.py", line 353, in __init__
2014-06-26 15:53:26.643 28145 TRACE cinder.openstack.common.rpc.amqp     raise make_ex(ret, 'error opening image %s at snapshot %s' % (name, snapshot))
2014-06-26 15:53:26.643 28145 TRACE cinder.openstack.common.rpc.amqp ImageNotFound: error opening image volume-1b04df30-2bdf-47d2-ad02-11ca22839790.backup.0b01d3ec-27d4-4d85-be51-197d4021b137 at snapshot None


根據上面的最後一行日誌,在cinder.backup.drivers.ceph:CephBackupDriver._full_restore中:
src_rbd = self.rbd.Image(client.ioctx, backup_name, snapshot=src_snap, read_only=True)
這行程式碼的snapshot=src_snap為None值,所以導致報錯。
往上回溯,snapshot=src_snap(即src_snap=restore_point)的值是在cinder.backup.drivers.ceph:CephBackupDriver._restore_volume中被賦值的:
diff_allowed, restore_point = self._diff_restore_allowed(base_name, backup, volume, volume_file, client)
我們進入到cinder.backup.drivers.ceph:CephBackupDriver._diff_restore_allowed中,看到這樣幾行程式碼:
        not_allowed = (False, None)


        # If the volume we are restoring to is the volume the backup was made
        # from, force a full restore since a diff will not work in this case.
        if volume['id'] == backup['volume_id']:
            LOG.debug(_("dest volume is original volume - forcing full copy"))
            return not_allowed


很明顯,參考註釋,這就是restore_point為什麼是None的原因。

三、解決辦法

據檢索,該問題和該連結中所描述的情況表現一致:
https://bugs.launchpad.net/cinder/+bug/1276977
該問題已經在Cinder的I版中修復了,修改程式碼如下:
https://git.openstack.org/cgit/openstack/cinder/commit/?id=4d1d9349fed815b37b0675d6f3936243a3909125

相關推薦

問題HCinder對接Ceph備份恢復

一、問題現象 Cinder是H版程式碼,對接的儲存是Ceph。 使用cinder命令可以成功建立資料卷並備份資料卷。 但是,使用cinder backup-restore命令恢復備份卷時,如果指定了恢復到源卷,會導致源卷的狀態變為error_restoring:# c

第五篇zTree節點的一些操作權當備份

專案場景:將zTree的一個節點挪到某個已知的根節點下,因為樹上的節點都是資料庫查詢出來的,所以不能直接用addNodes()這個方法(否則一重新整理又恢復原樣了),而是要把這個節點及其某些屬性資料儲存到資料庫中,進一步的需求是:如果層級很多,挪過去的時候,要連帶他的所有父節點,子孫節點一起挪過去,加上他們的

java異常練習題定義一個MulException類繼承Exception類要求兩數相乘等於100在主類中定義一個方法在方法中丟擲此異常在主方法觀察結果

題目描述: 定義一個MulException類繼承Exception類,要求兩數相乘等於100報錯,在主類中定義一個方法,在方法中丟擲此異常,在主方法觀察結果。  定義一個DivException類繼承RuntimeException類,要求兩數相除等於2報錯,在主類中定義

使用ltp編譯出來的cws_cmdlinecp到其他機器上執行/lib64/libc.so.6: version `GLIBC_2.14′ not found

這主要是由於編譯環境的glibc的版本高於執行時的glibc版本導致。 解決辦法:升級glibc 具體參考: http://qinghua.blog.51cto.com/202629/1706585 為防止連結失效,黏貼如下: 在系統CentOS release 6.4

ajax或者url訪問時帶了不標準字元後臺The valid characters are defined in RFC 7230 and RFC 3986

網上查了很多辦法都無效, 暫定解決辦法: 將整個url用encodeURI(url)進行編碼,再進行訪問即可 例如:         var url='/index/saveFileToClient?url='+str;         url = encodeURI

原!tomcat啟動超時(打印了幾行日誌後面沒了。也不處於啟動狀態直到超時)

str tro 啟動項 dao 配置 spa 配置文件 size 結果 項目框架:spring+struts2+mybatis 今天優化代碼,改了一堆mybatis dao和xml文件,啟動項目時,就出現如標題描述的狀況:打印了幾行日誌,後面就不打印了,也不報錯,處於啟動狀

解決mysql二進制日誌恢復數據@@GLOBAL.GTID_MODE = OFF.

實例 多個 ons bar $? on() false ria echo 解決mysql利用二進制日誌恢復數據報錯:ERROR 1781 (HY000) at line 16: @@SESSION.GTID_NEXT cannot be set to UUID:NUMBER

Restful風格PUT修改功能請求表單中存在文件-HTTP Status 405 - Request method 'POST' not supported

for 文件的 文件 roo spring commons 容量 put common 解決方案配置如下 <!-- 配置文件上傳解析器 --> <bean id="multipartResolver" class="org.spri

js 監測from表單中的input和select時時監測沒有輸入或選擇信息不允許提交數據

height ssss txt input OS 表達 tip eight html 1.html 代碼為 在input和select同級元素中添加 .error的標簽,用來存放報錯信息 <form action="" method="post" enctype="

在flask框架中對wtforms的SelectMultipleField的一個處理

pre inf req ESS multi bmi 其中 ews IT 先粘貼代碼: form.py文件: users = SelectMultipleField( label="請選擇用戶", validators=[ DataRequired(

mysql數據庫已啟動但是登錄數據庫

mysql數據庫已啟動但是登錄數據庫報mysql數據庫默認設置的是開機自啟動,重啟db01服務器後,想進入數據庫查看數據信息:但是無法進入數據庫,報錯如下:[root@db01 ~]# mysql -uroot -p Enter password: ERROR 2002 (HY000): Can't

解決mysql5.7 timestamp默認值0000-00-00 00:00:00

code pan ble auto session group_by post www. logs 解決:mysql5.7 timestamp默認值0000-00-00 00:00:00 報錯 學習了:https://www.cnblogs.com/cnhkzyy/p/91

ansible 的copy模塊向ubuntu復制時的解決。

roc cto connect nec col .com fff img copy模塊 copy至ubuntu時,出現這樣的問題 /etc/ansible/ansible.cfg[ssh_connection]scp_if_ssh = Trueansible 的copy模塊

Python 安裝gevent在導入gevent之後就

div eve ati 只需要 cat color ted gevent pan 錯誤信息如下 RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. E

maven工程依賴的jar包在本地倉庫有但是pom.xml文件卻找不到jar包

其中 -keep idt -i alt nexus handler reset and 問題描述: ? 第一時間查看本地倉庫,發現明明有卻還報錯 ? 解決方案: 查看錯誤依賴的_remote.repositories文件 ? 正常以來的的_remote.repositori

解決升級到Xcode10react native項目運行問題

failed 錯誤 lib blog ise ould path uil 執行 今天剛升級到Xcode10,就遇到兩個報錯問題 錯誤一:Xcode 10: Build input file double-conversion cannot be found error: B

maven專案Java Resources 上面有個紅叉但是程式碼裡面並沒有什麼

轉載自:https://www.cnblogs.com/achengmu/p/9106953.html   maven專案Java Resources 上面有個紅叉,但是程式碼裡面並沒有什麼報錯    解決辦法: 1.通過: windows

centos虛擬機器無法選擇無縫模式在安裝增強功能時出現This system is currently not set up to build kernel modules.

      在centos虛擬機器中,如果無法顯示無縫模式,介面看起來會非常奇怪。因此為了使用無縫模式,我們需要安裝centos的增強功能。 具體安裝步驟如下:     1.在cenos系統介面選擇【裝置】   &n

微服務---加入redis配置時候boot+cloud一跑起來就

專案依託redis部分的jar包只有這個部分,經過對jar的依賴,報錯資訊的提示,發現缺少了對應的spring-data-redis的jar包。 <dependency> <groupId>org.springframework.boot</groupI

1).定義一個MulException類繼承Exception類要求兩數相乘等於100在主類中定義一個方法在方法中丟擲此異常在主方法觀察結果。

1).定義一個MulException類繼承Exception類,要求兩數相乘等於100報錯,在主類中定義一個方法,在方法中丟擲此異常,在主方法觀察結果。 2).定義一個DivException類繼承RuntimeException類,要求兩數相除等於2報錯,在主類中定義一個方法,在方法中丟