django app 多个硬盘 [Errno 18] 跨设备无效 link

django app multiple hard drives [Errno 18] Invalid cross-device link

我在 Debian 服务器上有一个 Django 应用程序,我当前磁盘上的当前 site_media 目录已满。所以我想在第二个磁盘上上传文件。服务器上的路径是 /disk :

        obj = form.save(commit=False)
        obj.user_id = self.request.user.pk
        obj.save()
        initial_path = obj.file.path
        print(initial_path)
        new = settings.MEDIA_ROOT_NEW + obj.file.name
        print(new)
        os.rename(initial_path,new)
        shutil.move(initial_path, new)

在我的 settings.py 中我有:

        MEDIA_ROOT = os.path.join(PROJECT_PATH, 'site_media/')
        MEDIA_ROOT_NEW = '/disk/site_media/'

仍然出现错误: django [Errno 18] 跨设备无效 link

有什么想法吗?

os.rename() 可能会失败 across 不同的文件系统。

The operation may fail on some Unix flavors if src and dst are on different filesystems.

shutil.move()should工作

If the destination is on the current filesystem, then os.rename() is used. Otherwise, src is copied (using shutil.copy2()) to dst and then removed.

但是您在 shutil.move(initial_path, new) 之前有一个 os.rename(initial_path,new)。删除第一个 os.rename(),它应该可以工作。