加快Cinder中Volume的刪除速度

問題

以前一篇博文OpenStack中刪除Volume緩慢的問題 提到採用LVM作爲後端存儲時在刪除Volume的時候爲了安全有一個將整個Volume的數據清除的dd操作,如果Volume容量較大的話這個操作非常耗時, 並且如果同時刪除一個存儲服務器上的多個Volume的話會使服務器負載非常重,因此有必要來修改這個dd操作來加快Volume的刪除。

解決方法

解決方法就是如前篇文章據說的只dd Volume頭部的100M左右的數據,如下所示:

[ugyn@ugyn-fedora cinder]$ git diff
diff --git a/cinder/volume/driver.py b/cinder/volume/driver.py
index 2091848..33ef10b 100644
--- a/cinder/volume/driver.py
+++ b/cinder/volume/driver.py
@@ -200,7 +200,7 @@ class VolumeDriver(object):
             if (out[0] == 'o') or (out[0] == 'O'):
                 raise exception.VolumeIsBusy(volume_name=volume['name'])

-        self._delete_volume(volume, volume['size'])
+        self._delete_volume(volume, 0.125)

     def create_snapshot(self, snapshot):
         """Creates a snapshot."""
@@ -218,7 +218,7 @@ class VolumeDriver(object):

         # TODO(yamahata): zeroing out the whole snapshot triggers COW.
         # it's quite slow.
-        self._delete_volume(snapshot, snapshot['volume_size'])
+        self._delete_volume(snapshot, 0.125)

     def local_path(self, volume):
         # NOTE(vish): stops deprecation warning

這裏修改爲0.125的原因是最終該參數乘1024後作爲dd 的count參數,而count參數要求爲整數,所以我這裏用了0.125也就是隻dd開頭的128M數據。這裏刪除Volume或Snapshot 的操作比較簡單,只涉及四個函數,具體可以看下源代碼。修改完後重啓cinder-volume即可,注意我這裏修改的是F版。

北方工業大學 | 雲計算研究中心 | 姜永

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章