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_使用。所以这个问题与你自己的出口没有任何关系,对吧?其他一些进程一起使用磁盘。 –