Class BlockDev
source code
  
  
Block device abstract class.
  A block device can be in the following states:
  
    - 
      not existing on the system, and by `Create()` it goes into:
    
 
    - 
      existing but not setup/not active, and by `Assemble()` goes into:
    
 
    - 
      active read-write and by `Open()` it goes into
    
 
    - 
      online (=used, or ready for use)
    
 
  
  A device can also be online but read-only, however we are not using 
  the readonly state (LV has it, if needed in the future) and we are 
  usually looking at this like at a stack, so it's easier to conceptualise 
  the transition from not-existing to online and back like a linear 
  one.
  The many different states of the device are due to the fact that we 
  need to cover many device types:
  
    - 
      logical volumes are created, lvchange -a y $lv, and used
    
 
    - 
      drbd devices are attached to a local disk/remote peer and made 
      primary
    
 
  
  A block device is identified by three items:
  
    - 
      the /dev path of the device (dynamic)
    
 
    - 
      a unique ID of the device (static)
    
 
    - 
      it's major/minor pair (dynamic)
    
 
  
  Not all devices implement both the first two as distinct items. LVM 
  logical volumes have their unique ID (the pair volume group, logical 
  volume name) in a 1-to-1 relation to the dev path. For DRBD devices, the 
  /dev path is again dynamic and the unique id is the pair (host1, dev1), 
  (host2, dev2).
  You can get to a device in two ways:
  
    - 
      creating the (real) device, which returns you an attached instance 
      (lvcreate)
    
 
    - 
      attaching of a python instance to an existing (real) device
    
 
  
  The second point, the attachement to a device, is different depending 
  on whether the device is assembled or not. At init() time, we search for 
  a device with the same unique_id as us. If found, good. It also means 
  that the device is already assembled. If not, after assembly we'll have 
  our correct major/minor.
    | 
       
     | 
      
        
          __init__(self,
        unique_id,
        children,
        size) 
      x.__init__(...) initializes x; see x.__class__.__doc__ for signature | 
          
            source code
            
           | 
         
       
      
     | 
  
    | 
       
     | 
      
      
     | 
  
    | 
       
     | 
      
        
          Attach(self) 
      Find a device which matches our config and attach to it. | 
          
            source code
            
           | 
         
       
      
     | 
  
    | 
       
     | 
      
        
          Close(self) 
      Notifies that the device will no longer be used for I/O. | 
          
            source code
            
           | 
         
       
      
     | 
  
    | 
       
     | 
      
      
     | 
  
    | 
       
     | 
      
      
     | 
  
    | 
       
     | 
      
      
     | 
  
    | 
       
     | 
      
      
     | 
  
    | 
       
     | 
      
      
     | 
  
    | 
      objects.BlockDevStatus
     | 
      
      
     | 
  
    | 
      objects.BlockDevStatus
     | 
      
      
     | 
  
    | 
       
     | 
      
      
     | 
  
    | 
       
     | 
      
      
     | 
  
    | 
       
     | 
      
      
     | 
  
    | 
       
     | 
      
      
     | 
  
  
    | 
     Inherited from object:
      __delattr__,
      __format__,
      __getattribute__,
      __hash__,
      __new__,
      __reduce__,
      __reduce_ex__,
      __setattr__,
      __sizeof__,
      __str__,
      __subclasshook__
       
     | 
  
  
    | 
     Inherited from object:
      __class__
       
     | 
  
  
  
  __init__(self,
        unique_id,
        children,
        size)
     (Constructor)
  
   | source code 
     | 
    
  
  x.__init__(...) initializes x; see x.__class__.__doc__ for 
  signature 
  
    - Overrides:
        object.__init__
        
 - (inherited documentation)
 
    
   
 | 
 
| 
  
  
   Assemble the device from its components. 
  Implementations of this method by child classes must ensure that: 
  
    - 
      after the device has been assembled, it knows its major/minor 
      numbers; this allows other devices (usually parents) to probe 
      correctly for their children
    
 
    - 
      calling this method on an existing, in-use device is safe
    
 
    - 
      if the device is already configured (and in an OK state), this method
      is idempotent
    
 
   
  
   
 | 
 
  
  
  Create(cls,
        unique_id,
        children,
        size)
     Class Method
  
   | source code 
     | 
    
  
  Create the device. 
  If the device cannot be created, it will return None instead. Error 
  messages go to the logging system. 
  Note that for some devices, the unique_id is used, and for other, the 
  children. The idea is that these two, taken together, are enough for both
  creation and assembly (later). 
  
   
 | 
 
| 
  
  
   Remove this device. 
  This makes sense only for some of the device types: LV and file 
  storage. Also note that if the device can't attach, the removal can't be 
  completed. 
  
   
 | 
 
| 
  
  
   Rename this device. 
  This may or may not make sense for a given device type. 
  
   
 | 
 
| 
  
  
   Make the device ready for use. 
  This makes the device ready for I/O. For now, just the DRBD devices 
  need this. 
  The force parameter signifies that if the device has any kind of 
  --force thing, it should be used, we know what we are doing. 
  
   
 | 
 
| 
  
  
   Shut down the device, freeing its children. 
  This undoes the `Assemble()` work, except for the child assembling; as
  such, the children on the device are still assembled after this call. 
  
   
 | 
 
| 
  
  
   Adjust the sync speed of the mirror. 
  In case this is not a mirroring device, this is no-op. 
  
   
 | 
 
| 
  
  
   Returns the sync status of the device. 
  If this device is a mirroring device, this function returns the status
  of the mirror. 
  If sync_percent is None, it means the device is not syncing. 
  If estimated_time is None, it means we can't estimate the time needed,
  otherwise it's the time left in seconds. 
  If is_degraded is True, it means the device is missing redundancy. 
  This is usually a sign that something went wrong in the device setup, if 
  sync_percent is None. 
  The ldisk parameter represents the degradation of the local data. This
  is only valid for some devices, the rest will always return False (not 
  degraded). 
  
    - Returns: objects.BlockDevStatus
 
   
 | 
 
| 
  
  
   Calculate the mirror status recursively for our children. 
  The return value is the same as for `GetSyncStatus()` except the 
  minimum percent and maximum time are calculated across our children. 
  
    - Returns: objects.BlockDevStatus
 
   
 | 
 
| 
  
  
   Update metadata with info text. 
  Only supported for some device types. 
  
   
 | 
 
| 
  
  
   Grow the block device. 
  
    - Parameters:
 
    
        amount - the amount (in mebibytes) to grow with 
      
   
 | 
 
| 
  
  
   Return the actual disk size. 
  
   
      Note:
        the device needs to be active when this is called
       
  | 
 
| 
  
  
   repr(x) 
  
    - Overrides:
        object.__repr__
        
 - (inherited documentation)
 
    
   
 |