diff --git a/src/SPC/store/FileSystem.php b/src/SPC/store/FileSystem.php index 86daefc43..3b88a2bce 100644 --- a/src/SPC/store/FileSystem.php +++ b/src/SPC/store/FileSystem.php @@ -660,11 +660,19 @@ private static function moveFileOrDir(string $source, string $dest): void $source = self::convertPath($source); $dest = self::convertPath($dest); - // Try rename first (fast, atomic) - if (@rename($source, $dest)) { - return; + // Check if source and dest are on the same device to avoid cross-device rename errors + $source_stat = @stat($source); + $dest_parent = dirname($dest); + $dest_stat = @stat($dest_parent); + + // Only use rename if on same device + if ($source_stat !== false && $dest_stat !== false && $source_stat['dev'] === $dest_stat['dev']) { + if (@rename($source, $dest)) { + return; + } } + // Fall back to copy + delete for cross-device moves or if rename failed if (is_dir($source)) { self::copyDir($source, $dest); self::removeDir($source);