Add error return to cleanup, use os.OpenFile instead of syscall.Open, Make sure the pools are removed after all other devices