問題
以前一篇博文OpenStack中删除Volume緩慢的問題 提到采用LVM作為後端存儲時在删除Volume的時候為了安全有一個将整個Volume的資料清除的dd操作,如果Volume容量較大的話這個操作非常耗時, 并且如果同時删除一個存儲伺服器上的多個Volume的話會使伺服器負載非常重,是以有必要來修改這個dd操作來加快Volume的删除。
解決方法
解決方法就是如前篇文章據說的隻dd Volume頭部的100M左右的資料,如下所示:
[[email protected] 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版。
北方工業大學 | 雲計算研究中心 | 姜永