問題解決:kolla 環(huán)境切端,cinder-backup備份還原出空卷

找到volume的掛載位置

1、 查看虛機的host和instance_id:

[root@node1 kolla]# nova show 875176b8-5c30-4114-b1f7-33a457c2c933
圖片.png

2、在node1蜻牢,用virsh工具查看磁盤掛載位置:

(nova-compute)[root@node1 /]# virsh dumpxml instance-00000012 
圖片.png

得到掛載位置:
/dev/disk/by-path/ip-172.24.3.180:3260-iscsi-iqn.1992-08.com.netapp:sn.2d72abb030d511e7875800a098ac0ce9:vs.24-lun-1

寫磁盤

1煮嫌、 用xxd工具(安裝vim即可使用)檢查磁盤內(nèi)容,二進制轉(zhuǎn)十六進制:

[root@localhost ]# xxd --help
Usage:
xxd [options] [infile [outfile]]
or
xxd -r [-s [-]offset] [-c cols] [-ps] [infile [outfile]]
Options:
-a toggle autoskip: A single '*' replaces nul-lines. Default off.
-b binary digit dump (incompatible with -p,-i,-r). Default hex.
-c cols format <cols> octets per line. Default 16 (-i: 12, -ps: 30).
-E show characters in EBCDIC. Default ASCII.
-g number of octets per group in normal output. Default 2. 每個goup的字節(jié)數(shù),默認為2刷钢,可設(shè)置伴澄。
-h print this summary.
-i output in C include file style. :輸出為c包含文件的風(fēng)格荆针,數(shù)組方式存在祭犯。
-l len stop after <len> octets. :轉(zhuǎn)換到len個字節(jié)后停止轉(zhuǎn)換沃粗。
-ps output in postscript plain hexdump style.
-r reverse operation: convert (or patch) hexdump into binary.
-r -s off revert with <off> added to file positions found in hexdump.
-s [+][-]seek start at <seek> bytes abs. (or +: rel.) infile offset.
-u use upper case hex letters. : 字節(jié)大寫方式
-v show version: "xxd V1.10 27oct98 by Juergen Weigert".

2、 用dd指令把2M的塊寫滿:

[ubuntu@localhost by-path]$ sudo dd if=/dev/urandom of=../../sde bs=1024 count=2
2+0 records in
2+0 records out
2048 bytes (2.0 kB) copied, 0.00195619 s, 1.0 MB/s

檢查:

(cinder-backup)[root@node1 by-path]#  xxd -g 1 -i -u -l 100 ../../sde 
unsigned char ______sdcn[] = {
  0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,
  0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,
  0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,
  0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,
  0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,
  0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,
  0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,
  0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,
  0X00, 0X00, 0X00, 0X00
};

已經(jīng)寫入數(shù)據(jù):

[ubuntu@localhost by-path]$ sudo xxd -g 1 -i -u -l 100 ../../sde   
unsigned char ______sde[] = {
  0XE5, 0XB2, 0X21, 0X81, 0XD0, 0X55, 0X22, 0XBA, 0X36, 0X2A, 0XA5, 0XF1,
  0X12, 0X00, 0XB1, 0X81, 0X62, 0X60, 0X94, 0XE6, 0X05, 0XAC, 0X28, 0XF9,
  0XC4, 0X1B, 0XB7, 0X6F, 0X6E, 0X1D, 0XF7, 0XA8, 0XE3, 0X5B, 0X0C, 0XD2,
  0X6B, 0X50, 0X47, 0X60, 0XC8, 0X35, 0X37, 0X9A, 0X52, 0XC9, 0X4C, 0XE4,
  0X46, 0X9B, 0X72, 0X51, 0XC1, 0XE7, 0X03, 0XED, 0X5C, 0XA7, 0X4D, 0X49,
  0X90, 0XAC, 0X3D, 0X8E, 0XE9, 0X9E, 0XCD, 0X0A, 0X63, 0X77, 0X39, 0X52,
  0X11, 0XBD, 0XE9, 0XC7, 0XC3, 0X74, 0X04, 0X37, 0X27, 0X8B, 0X85, 0XD8,
  0X77, 0X6B, 0X6F, 0XE1, 0X96, 0XBC, 0X2D, 0XD6, 0XC2, 0X19, 0XFB, 0XC9,
  0XDA, 0X55, 0X0E, 0XF3
};
unsigned int ______sde_len = 100;

截取程序里讀取磁盤的內(nèi)容

cinder\backup\chunkeddriver.py
增加方法:

    def wangyue_write_file(self, usage, content, backup_id):
        base_path = '/var/lib/cinder/wangyue/'
        if not os.path.exists(base_path):
            os.mkdir(base_path)
        file_name = base_path + usage + backup_id + '.txt'
        with open(file_name, 'a') as f:
            f.write(content)
            f.write('\n')

修改方法cinder.backup.chunkeddriver.ChunkedBackupDriver#backup:

        <!--省略-->
        wangyue_time = 1
        while True:
            backup = objects.Backup.get_by_id(self.context, backup.id)
            if backup.status in (fields.BackupStatus.DELETING,
                                 fields.BackupStatus.DELETED):
                is_backup_canceled = True
                # To avoid the chunk left when deletion complete, need to
                # clean up the object of chunk again.
                self.delete(backup)
                LOG.debug('Cancel the backup process of %s.', backup.id)
                break
            data_offset = volume_file.tell()
            data = volume_file.read(self.chunk_size_bytes)

            if wangyue_time == 1:
                self.wangyue_write_file('backup_', data[0:10000], backup.id)
                wangyue_time = 0

截取磁盤的前10000字節(jié)存在文件backup_${backup_id} 文件:

圖片.png

可以看到都是0x00激挪,磁盤是空的宛篇!
需要驗證下是不是Iscsi掛載有問題

讓程序延遲斷開Iscsi連接

從代碼 cinder\backup\manager.py#_run_backup 知道偷卧,創(chuàng)建備份的過程是:

  1. 對源卷volume創(chuàng)建Iscsi連接
  2. 對卷備份
  3. 關(guān)閉連接

我們在備份之后,加個延時斷連:

    def _run_backup(self, context, backup, volume):
        backup_service = self.service.get_backup_driver(context)

        properties = utils.brick_get_connector_properties()
        try:
            backup_device = self.volume_rpcapi.get_backup_device(context,
                                                                 backup,
                                                                 volume)
            attach_info = self._attach_device(context,
                                              backup_device.device_obj,
                                              properties,
                                              backup_device.is_snapshot)
            try:
                device_path = attach_info['device']['path']
                if isinstance(device_path, six.string_types):
                    if backup_device.secure_enabled:
                        with open(device_path) as device_file:
                            backup_service.backup(backup, device_file)
                    else:
                        with utils.temporary_chown(device_path):
                            with open(device_path) as device_file:
                                backup_service.backup(backup, device_file)
                # device_path is already file-like so no need to open it
                else:
                    backup_service.backup(backup, device_path)

                LOG.debug('==========waite 6 mins, begin===========')
                import time
                time.sleep(360)
                LOG.debug('==========waite 6 mins, end===========')

這樣,在中斷的時間內(nèi),我們可以驗證下Iscsi是否掛載成功:

1掌逛、netapp 管理平臺檢查lun是否已經(jīng)連接上

圖片.png

2动知、根據(jù)cinder-backup.log盒粮,知道原卷臨時掛載在/dev/disk/by-path/ip-172.24.3.180:3260-iscsi-iqn.1992-08.com.netapp:sn.2d72abb030d511e7875800a098ac0ce9:vs.24-lun-0目錄妒穴, xxd檢查發(fā)現(xiàn)內(nèi)容都是X00, 0X00, 0X00, 0X00,說明是個空卷,不是原卷真正的內(nèi)容。

node1 2017-07-13 16:16:05.050 6 DEBUG os_brick.initiator.connectors.iscsi [req-54e3c2dd-46f6-4e3d-894f-211af2fde587 1a236a63e6864cf5a5b26d4b816f719b 406cd353135e44f0ade98f53d92d5d8b - default default] Found iSCSI node [u'/dev/disk/by-path/ip-172.24.3.180:3260-iscsi-iqn.1992-08.com.netapp:sn.2d72abb030d511e7875800a098ac0ce9:vs.24-lun-0'] (after 1 rescans) connect_volume /var/lib/kolla/venv/lib/python2.7/site-packages/os_brick/initiator/connectors/iscsi.py:452

3啸箫、那我們試著在隨便某臺主機手動掛載卷(root權(quán)限):

(1) 發(fā)現(xiàn)目標

[root@node1 ~]# iscsiadm -m discovery -t st -p 172.24.3.180
172.24.3.180:3260,1057 iqn.1992-08.com.netapp:sn.2d72abb030d511e7875800a098ac0ce9:vs.24
172.24.3.181:3260,1058 iqn.1992-08.com.netapp:sn.2d72abb030d511e7875800a098ac0ce9:vs.24

(2) 獲得本機iqn

[root@node1 ~]# cat /etc/iscsi/initiatorname.iscsi 
InitiatorName=iqn.1994-05.com.redhat:cad0246c576

(3) netapp管理界面,把iqn添加到lun啟動程序里召川,下拉框內(nèi)選擇,然后點擊“添加啟動程序”逗威,保存退出


圖片.png

(4) login Iscsi

[root@node1 ~]# iscsiadm -m node -p 172.24.3.180 -l
Logging in to [iface: default, target: iqn.1992-08.com.netapp:sn.2d72abb030d511e7875800a098ac0ce9:vs.24, portal: 172.24.3.180,3260] (multiple)
Login to [iface: default, target: iqn.1992-08.com.netapp:sn.2d72abb030d511e7875800a098ac0ce9:vs.24, portal: 172.24.3.180,3260] successful.

(5) 檢查內(nèi)容不是空


圖片.png

那就奇怪了,怎么程序掛載的卷和我們手動掛載的卷,內(nèi)容不一樣呢?期奔?

用inspect指令檢查容器配置

docker inspect cinder_volume
docker inspect cinder_backup

做對比

圖片.png

發(fā)現(xiàn)cinder_backup少了Iscsi_info谊娇,是不是缺少這個就無法正常使用Iscsi赠堵,導(dǎo)致Iscsi卷掛載讀取內(nèi)容為空?

檢查kolla-ansible的配置文件 /usr/share/kolla-ansible/ansible/roles/cinder/defaults/main.yml

圖片.png

改成:

圖片.png

重新部署 kolla-ansible reconfigure -i ~/multinode -t cinder

再測試備份還原就正常了D湃!!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子掠归,更是在濱河造成了極大的恐慌,老刑警劉巖厨相,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鸥鹉,死亡現(xiàn)場離奇詭異毁渗,居然都是意外死亡,警方通過查閱死者的電腦和手機灸异,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門肺樟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人么伯,你說我怎么就攤上這事±停” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長邻遏。 經(jīng)常有香客問我虐骑,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任室梅,我火速辦了婚禮,結(jié)果婚禮上浑厚,老公的妹妹穿的比我還像新娘炎滞。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布特纤。 她就那樣靜靜地躺著昔穴,像睡著了一般卿操。 火紅的嫁衣襯著肌膚如雪窥摄。 梳的紋絲不亂的頭發(fā)上币砂,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天波岛,我揣著相機與錄音,去河邊找鬼。 笑死叛薯,一個胖子當著我的面吹牛燎字,可吹牛的內(nèi)容都是我干的洒放。 我是一名探鬼主播他膳,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼缚甩!你這毒婦竟也來了郊丛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎此叠,沒想到半個月后茸歧,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鳖藕,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡伍茄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了端壳。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片照捡。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖叭披,靈堂內(nèi)的尸體忽然破棺而出熏纯,到底是詐尸還是另有隱情猴伶,我是刑警寧澤丙唧,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布侧甫,位于F島的核電站胸梆,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏晨继。R本人自食惡果不足惜搬俊,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望餐屎。 院中可真熱鬧玩祟,春花似錦、人聲如沸卵凑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至勒魔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間抚吠,已是汗流浹背弟胀。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工喊式, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留萧朝,地道東北人。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓献联,卻偏偏與公主長得像何址,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子运悲,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容