You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将GCE虚拟机上R Studio-server的文件保存至Cloud Bucket?

问题描述
  • 在GCE虚拟机上部署了R Studio-server,已挂载Google Cloud Bucket,R中可正常读取Bucket内的数据,但执行saveRDS()函数保存输出时遭遇权限拒绝错误:
Error in gzfile(file, mode) : cannot open the connection
In addition: Warning message:
In gzfile(file, mode) :
cannot open compressed file 'remote/processed_input_reproduction/file.rds', probable reason 'Permission denied'
  • 尝试将GCE实例的存储权限范围改为「Full」后,VM无法完成启动流程,无法通过SSH连接;改回默认的只读权限范围后,VM恢复正常连接,ssh诊断显示VM进入紧急启动模式。
解决方案

方案1:用服务账号实现写入权限(推荐)

不用修改实例的权限范围(保持默认只读),通过单独的服务账号获取Bucket写入权限:

  1. 在GCP控制台创建一个服务账号,给它分配「Storage Object Creator」或「Storage Admin」权限(按需选择最小权限)
  2. 下载该服务账号的JSON密钥文件,上传到GCE虚拟机的指定路径(比如~/gcs-service-key.json)
  3. 在R Studio中设置环境变量指向密钥文件:
Sys.setenv("GOOGLE_APPLICATION_CREDENTIALS" = "~/gcs-service-key.json")
  1. 如果是用gcsfuse挂载的Bucket,重新挂载时指定服务账号密钥:
gcsfuse --key-file=~/gcs-service-key.json your-bucket-name /path/to/mount/point

之后就能正常通过挂载路径写入Bucket了。

方案2:修复权限范围修改后的VM启动问题

如果一定要把实例权限范围改成「storage-full」,先解决启动失败的问题:

  1. 在GCP控制台查看VM的串行控制台日志,确认进入紧急模式的具体原因(大概率是Bucket挂载配置导致系统启动依赖失败)
  2. 登录VM(先改回只读权限范围),编辑/etc/fstab中的Bucket挂载配置,添加nofail选项,这样即使挂载失败,系统也能正常启动:
your-bucket-name /path/to/mount/point gcsfuse rw,user,noauto,nofail
  1. 重新设置实例权限范围为「storage-full」,重启VM,待启动完成后重新挂载Bucket即可。

方案3:绕过挂载,直接用API写入Bucket

在R中不依赖挂载的文件系统,通过Cloud Storage API直接上传文件:

  1. 安装并加载googleCloudStorageR包:
install.packages("googleCloudStorageR")
library(googleCloudStorageR)
  1. 配置服务账号密钥(同方案1),然后按以下步骤操作:
# 先把对象保存到本地临时文件
temp_file <- tempfile(fileext = ".rds")
saveRDS(your_data_object, temp_file)
# 上传到目标Bucket的指定路径
gcs_upload(temp_file, bucket = "your-bucket-name", name = "processed_input_reproduction/file.rds")
# 删除本地临时文件
file.remove(temp_file)

内容的提问来源于stack exchange,提问作者RobertoAS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 02:06:05