fs.copyFile fails if source is readonly and target is a CIFS volume
还没有人认领这个 Issue。
- 主要语言
- JavaScript
- 星标
- 122k
- 派生
- 37.4k
- 平均合并
- 4 天 3 小时
- 30 天内合并 PR
- 272
描述
Version
v22.21.1
Platform
Linux a7f6d3be6434 5.15.158-2-pve #1 SMP PVE 5.15.158-2 (2024-07-26T13:11Z) x86_64 Linux
Docker: Alpine release 3.22.2
Subsystem
fs
What steps will reproduce the bug?
Hi,
Copying sample.docx fails with EPERM because the source is read-only and the destination is a CIFS share.
Probably related to:
https://github.com/nodejs/node/issues/37284
https://github.com/libuv/libuv/issues/3117
https://github.com/nodejs/node/issues/44261
How often does it reproduce? Is there a required condition?
100% reproducible
What is the expected behavior? Why is that the expected behavior?
/mnt/smb is a CIFS-mounted volume.
sample.docx is a file with read-only permissions for the user running the below code.
Code
import {copyFile} from "fs/promises";
const src = "./sample.docx";
const dest = "/mnt/smb/sample.docx";
await copyFile(src, dest);
console.log("File copied successfully");
The fs.copyFile should be able to succeed in copying the file as long as the destination folder is writable.
What do you see instead?
Error
node:internal/modules/run_main:123
triggerUncaughtException(
^
[Error: EPERM: operation not permitted, copyfile './sample.docx' -> '/mnt/smb/sample.docx'] {
errno: -1,
code: 'EPERM',
syscall: 'copyfile',
path: './sample.docx',
dest: '/mnt/smb/sample.docx'
}
Additional information
Works with no error
cp ./sample.docx /mnt/smb/sample.docx
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
从 fs/promises 的 copyFile 入口开始,在 Linux 上使用只读源和可写的 CIFS 目标重现该失败。将 Node 的行为与 cp 进行比较,然后阅读链接的 Node.js 和 libuv issue。在给定权限下 copyFile 成功且不再出现报告的 EPERM 错误,即表示完成。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- javascript, linux, node.js
- 领域
- operating-systems
- Issue 类型
- 缺陷
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 活跃度
- 活跃
- 描述清晰度
- 基本清楚
- 新手友好度
- 52/100