code: def _find_loopback(self, use_loopback=True, var_name='loopback'):
          
  
          # noinspection PyBroadException
          try:
              loopback = _util.check_output_(['losetup', '-f']).strip()
              setattr(self, var_name, loopback)
          except Exception:
              logger.warning("No free loopback device found.", exc_info=True)
              raise NoLoopbackAvailableError()
  
          # noinspection PyBroadException
          if use_loopback:
              try:
                  cmd = ['losetup', '-o', str(self.offset), '--sizelimit', str(self.size),
                         loopback, self.get_raw_path()]
                  if not self.disk.read_write:
                      cmd.insert(1, '-r')
                  _util.check_call_(cmd, stdout=subprocess.PIPE)
              except Exception:
                  logger.exception("Loopback device could not be mounted.")
                  raise NoLoopbackAvailableError()
          return loopback
docs: Finds a free loopback device that can be used. The loopback is stored in :attr:`loopback`. If *use_loopback*
          is True, the loopback will also be used directly.
  
          :returns: the loopback address
          :raises NoLoopbackAvailableError: if no loopback could be found