Guest User

Untitled

a guest
Apr 24th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.35 KB | None | 0 0
  1. #!/usr/bin/env python
  2. import os
  3. import glob
  4. import errno
  5. import stat
  6. import sys
  7. import subprocess
  8.  
  9.  
  10. def main(argv):
  11. if len(argv) > 0:
  12. nvme_devices = argv
  13. else:
  14. nvme_devices = glob.glob('/dev/nvme*n1')
  15.  
  16. for nvme_device in nvme_devices:
  17. device_name = get_device_name(nvme_device)
  18.  
  19. if device_name is not None:
  20. print('Symlink {} -> {}'.format(device_name, nvme_device))
  21. force_symlink(nvme_device, device_name)
  22.  
  23.  
  24. def get_device_name(nvme_device):
  25. if not os.path.exists(nvme_device):
  26. print("Device {} doesn't exist".format(nvme_device))
  27. return None
  28.  
  29. mode = os.stat(nvme_device).st_mode
  30. if not stat.S_ISBLK(mode):
  31. print('Device {} is not a block device'.format(nvme_device))
  32. return None
  33.  
  34. vendor_data = subprocess.check_output(['nvme', 'id-ctrl', '-b', nvme_device])
  35. device_offset = vendor_data.find(b'\x2f\x64\x65\x76\x2f')
  36. end = vendor_data[device_offset:].find(b'\x00')
  37. device_name = vendor_data[device_offset:][:end].rstrip()
  38.  
  39. if len(device_name) > 0:
  40. return device_name
  41.  
  42.  
  43. def force_symlink(src, dst):
  44. try:
  45. os.symlink(src, dst)
  46. except OSError, e:
  47. if e.errno == errno.EEXIST:
  48. os.remove(dst)
  49. os.symlink(src, dst)
  50. else:
  51. raise e
  52.  
  53.  
  54. if __name__ == '__main__':
  55. main(sys.argv[1:])
Add Comment
Please, Sign In to add comment