예제 #1
0
파일: lvm.py 프로젝트: openSUSE/vdsm
def _initpv(device, metadataSize=0):
    if metadataSize > 0:
        # Size for pvcreate should be with units k|m|g
        metadatasize = str(metadataSize) + 'm'
        cmd = ["pvcreate", "--metadatasize", metadatasize, device]
    else:
        cmd = ["pvcreate", "--pvmetadatacopies", "0", device]

    #pvcreate on a dev that is already a PV but not in a VG returns rc = 0.
    #The device is created with the new parameters.
    rc, out, err = _lvminfo.cmd(cmd)
    if rc != 0:
        # This could have failed because a VG
        # was removed on another host. Let us
        # check with lvm
        if isPvPartOfVg(device):
            raise se.PhysDevInitializationError(device)

        try:
            devicemapper.removeMappingsHoldingDevice(os.path.basename(device))
        except OSError, e:
            if e.errno == errno.ENODEV:
                raise se.PhysDevInitializationError("%s: %s" % (device, str(e)))
            else:
                raise
        rc, out, err = _lvminfo.cmd(cmd)
        if rc != 0:
            raise se.PhysDevInitializationError(device)
예제 #2
0
파일: lvm.py 프로젝트: ekohl/vdsm
def _initpvs(devices, metadataSize):
    devices = _normalizeargs(devices)
    # Size for pvcreate should be with units k|m|g
    metadatasize = str(metadataSize) + 'm'
    cmd = ["pvcreate", "--metadatasize", metadatasize, "--metadatacopies", "2",
           "--metadataignore", "y"]
    cmd.extend(devices)

    #pvcreate on a dev that is already a PV but not in a VG returns rc = 0.
    #The device is created with the new parameters.
    rc, out, err = _lvminfo.cmd(cmd)
    if rc != 0:
        # This could have failed because a VG was removed on another host.
        #Let us check with lvm
        found, notFound = getVGsOfReachablePVs(devices)
        #If returned not found devices or any device is in a VG
        if notFound or any(found.itervalues()):
            raise se.PhysDevInitializationError("found: %s notFound: %s" %
                                                (found, notFound))
        #All devices are free and reachable, calling the ghostbusters!
        for device in devices:
            try:
                devicemapper.removeMappingsHoldingDevice(os.path.basename(device))
            except OSError, e:
                if e.errno == errno.ENODEV:
                    raise se.PhysDevInitializationError("%s: %s" % (device, str(e)))
                else:
                    raise
        #Retry pvcreate
        rc, out, err = _lvminfo.cmd(cmd)
        if rc != 0:
            raise se.PhysDevInitializationError(device)
예제 #3
0
def _initpv(device, metadataSize=0):
    if metadataSize > 0:
        # Size for pvcreate should be with units k|m|g
        metadatasize = str(metadataSize) + 'm'
        cmd = ["pvcreate", "--metadatasize", metadatasize, device]
    else:
        cmd = ["pvcreate", "--pvmetadatacopies", "0", device]

    #pvcreate on a dev that is already a PV but not in a VG returns rc = 0.
    #The device is created with the new parameters.
    rc, out, err = _lvminfo.cmd(cmd)
    if rc != 0:
        # This could have failed because a VG
        # was removed on another host. Let us
        # check with lvm
        if isPvPartOfVg(device):
            raise se.PhysDevInitializationError(device)

        try:
            devicemapper.removeMappingsHoldingDevice(os.path.basename(device))
        except OSError, e:
            if e.errno == errno.ENODEV:
                raise se.PhysDevInitializationError("%s: %s" %
                                                    (device, str(e)))
            else:
                raise
        rc, out, err = _lvminfo.cmd(cmd)
        if rc != 0:
            raise se.PhysDevInitializationError(device)
예제 #4
0
파일: lvm.py 프로젝트: nickxiao/vdsm
 def _initpvs_removeHolders():
     """Remove holders for all devices."""
     for device in devices:
         try:
             devicemapper.removeMappingsHoldingDevice(
                 os.path.basename(device))
         except OSError as e:
             if e.errno == errno.ENODEV:
                 raise se.PhysDevInitializationError("%s: %s" %
                                                     (device, str(e)))
             else:
                 raise
예제 #5
0
파일: lvm.py 프로젝트: zofuthan/vdsm
 def _initpvs_removeHolders():
     """Remove holders for all devices."""
     for device in devices:
         try:
             devicemapper.removeMappingsHoldingDevice(
                 os.path.basename(device))
         except OSError as e:
             if e.errno == errno.ENODEV:
                 raise se.PhysDevInitializationError("%s: %s" %
                                                     (device, str(e)))
             else:
                 raise