0
後我有一瓶「服務器」服務我。RAW格式塊設備的圖像。不幸的是,下載完成後(成功與否,無關緊要)我必須運行另一種方法來卸載導出的塊設備。瓶運行的命令文件下載
下面我提供用於導出圖像的代碼,但只爲我提供了錯誤的(不能去映射器,因爲它是使用不同的工藝),並如預期未導出圖像:
class ExportResponse(HTTPResponse):
def __init__(self, devpath, volume_name):
self.devpath = devpath
self.volume_name = volume_name
output_filename = "%s.raw" % (volume_name)
fp = open(devpath)
content_length = os.lseek(fp.fileno(), 0, os.SEEK_END)
os.lseek(fp.fileno(), 0, os.SEEK_SET)
headers = {
'Content-Length': str(content_length),
'Content-Type': "application/octet-stream",
'Content-Disposition': 'attachment; filename="%s"' % output_filename
}
log.info("%s, %s" % (os.SEEK_CUR, content_length))
super(ExportResponse, self).__init__(fp, **headers)
@get('/retrieve/<volume_name>/')
def export_volume(volume_name):
fmt = request.query['format']
dev = find_mapping(volume_name)
if dev:
log.debug("export, name=%s, already mapped dev=%s" % (repr(volume_name), str(dev)))
dev_owner = dev is None
try:
if not dev:
map_volume(volume_name)
dev = find_mapping(volume_name)
log.debug("export, name=%s, mapped to dev=%s" % (repr(volume_name), str(dev)))
return(ExportResponse(dev, volume_name))
except:
log.exception("export, name=%s" % repr(volume_name))
if dev and dev_owner:
unmap_volume(volume_name)
raise
finally:
unmap_volume(volume_name)
是有沒有這樣做的好方法?
'不能取消映射設備,因爲它被不同的進程使用 - 爲什麼你希望'unmap'在其他進程正在使用時工作它? –
這就是爲什麼我要求幫助,因爲我不知道如何完成導出,然後取消映射設備。 –
但你說它正在被一個不同的process_使用。所以這個問題與你自己的出口沒有任何關係,對吧?其他一些進程一起使用磁盤。 –