(注意:虽然我在这里问一个不同的问题,但这本质上是为了诊断我在这个问题在 StackOverflow 上)。
我有一个 Google Cloud Compute Engine 虚拟机。该映像使用 Google Container-Optimized OS(如果这妨碍了调试,我正在考虑切换到 Ubuntu)。我按照中的说明进行操作他们的文档格式化机器上新安装的卷。具体来说,我跑了:
sudo mkfs.ext4 -m 0 -F -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/[DEVICE_ID]
sudo mkdir -p /mnt/disks/[MNT_DIR]
sudo mount -o discard,defaults /dev/[DEVICE_ID] /mnt/disks/[MNT_DIR]
sudo chmod a+w /mnt/disks/[MNT_DIR]
MNT_DIR
我在设备上安装的目录在哪里,并且DEVICE_ID
是设备的名称sudo lsblk
(sdb
看起来是自动的,但这并不重要)。
快速ls -l /mnt/
显示音量似乎已正确安装,并且对该目录具有全局读写修改权限:
drwxrwxrwx 3 root root 4096 Mar 8 00:00 subway-explorer-datastore
好的,现在我想将一些数据传输到这台机器上。 GCE 包含一个google compute scp
命令(记录在这里),这看起来只是 UNIXscp
命令的一个薄包装。所以我可以用它来将一些数据从我的本地开发机器写入到这个云磁盘上,对吗?
所以我跑:
gcloud compute scp ~/Desktop/subway-explorer-api/logbooks.sqlite gke-webapp-default-pool-49338587-d78l:/mnt/subway-explorer-datastore --zone us-central1-a
我小心翼翼地蹲下。
scp: /mnt/subway-explorer-datastore: Read-only file system
ERROR: (gcloud.compute.scp) [/usr/bin/scp] exited with return code [1].
文件系统的其余部分都很好。例如,以下内容会成功:
gcloud compute scp ~/Desktop/subway-explorer-api/logbooks.sqlite gke-subway-explorer-default-pool-2bef4d1d-f7dn:/dev/null
scp
这是由 引发的错误,而不是由薄包装器引发的错误gcloud
。在我没有经验的人看来,根文件夹的权限似乎很好。那么scp
可能引发此错误的原因有哪些?我该如何调试它?
答案1
正如 @cas 在评论中猜测的那样,我将其写入一个不存在的文件夹。一旦我将路径更改为/mnt/subway-explorer-datastore
,它就可以正常工作。
回想一下错误信息:
scp: /mnt/subway-explorer-datastore: Read-only file system
这是误导!读完这个回复我假定(因为scp
无法创建文件夹)该文件夹存在,问题是我缺少正确的权限。
我想我自己会在一杯新鲜咖啡上发现这个错误。