What does the “EXDEV: cross-device link not permitted” error mean?

蓝咒 提交于 2019-11-27 17:32:15

问题


What does this error actually mean? What is a "cross-device link"?

It is mentioned on this libuv page but it doesn't give any details beyond "cross-device link not permitted".


回答1:


It is used for EXDEV on Linux:

See man rename manpage:

  • http://man7.org/linux/man-pages/man2/rename.2.html

EXDEV oldpath and newpath are not on the same mounted filesystem. (Linux permits a filesystem to be mounted at multiple points, but rename() does not work across different mount points, even if the same filesystem is mounted on both.)

This error is also used when there is ERROR_NOT_SAME_DEVICE on Windows, see:

  • https://github.com/libuv/libuv/blob/v1.x/src/win/error.c#L166

For more info see:

  • http://errorco.de/win32/winerror-h/error_not_same_device/0x80070011/

winerror.h 0x80070011 #define ERROR_NOT_SAME_DEVICE The system cannot move the file to a different disk drive.




回答2:


It sounds like you're trying to rename a file across "device" (partition) boundaries.

Say that /tmp is a different partition than /. That means that you're not allowed to do this:

fs.rename('/tmp/myfile.txt', '/myfile.txt', ...)

(the same applies to fs.renameSync() as well, obviously)

If you want to do that, you need to first copy the file to its new location, and subsequently remove the old file. There are modules, like mv, that can help you with that.




回答3:


Just for they guys who are using Linux this happens when your old path i.e. /tmp and new path are on different partitions or disks.



来源:https://stackoverflow.com/questions/43206198/what-does-the-exdev-cross-device-link-not-permitted-error-mean

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!