如何在Google Cloud Shell启动时自动挂载GCS存储桶以扩展存储?
Google Cloud Shell 扩展持久化存储方案(自动挂载GCS/NFS)
一、使用GCS挂载扩展存储(推荐,无额外实例费用)
1. 准备GCS存储桶
- 在当前账号下创建一个GCS存储桶(命名需为小写字母、数字及连字符,如
cloud-shell-extended-storage),创建者默认拥有读写权限,无需额外配置。
2. 配置启动自动挂载脚本
Cloud Shell启动时会执行~/.bashrc,我们可以添加挂载逻辑避免重复挂载:
- 编辑
~/.bashrc:nano ~/.bashrc - 在文件末尾追加以下代码(替换
你的存储桶名称为实际桶名):# 自动挂载GCS存储桶到本地目录 MOUNT_POINT="$HOME/gcs-mount" BUCKET_NAME="你的存储桶名称" # 创建挂载点(若不存在) [ ! -d "$MOUNT_POINT" ] && mkdir -p "$MOUNT_POINT" # 检查是否已挂载,未挂载则执行挂载 mount | grep -q "$MOUNT_POINT" || gcsfuse --implicit-dirs "$BUCKET_NAME" "$MOUNT_POINT" - 保存退出后,执行
source ~/.bashrc立即生效,或重启Cloud Shell验证自动挂载效果。
注意事项
--implicit-dirs参数用于识别GCS的虚拟目录,若省略则只能看到直接上传的文件;- GCS挂载适合存储低频读写的大文件、备份数据,高频读写场景建议选用NFS方案。
二、使用GCE NFS服务器挂载扩展存储(高性能场景)
1. 创建并配置NFS服务器
- 在当前账号下创建一台GCE实例(建议与Cloud Shell同区域,如
us-central1),磁盘大小按需设置; - 登录实例安装NFS服务:
sudo apt update && sudo apt install -y nfs-kernel-server - 创建共享目录并设置权限:
sudo mkdir -p /mnt/nfs-share sudo chown nobody:nogroup /mnt/nfs-share sudo chmod 777 /mnt/nfs-share - 配置NFS共享规则,编辑
/etc/exports:
添加以下内容(允许Cloud Shell所在IP段访问):sudo nano /etc/exports/mnt/nfs-share 10.0.0.0/8(rw,sync,no_subtree_check,no_root_squash) - 重启NFS服务:
sudo systemctl restart nfs-kernel-server - 配置防火墙规则,允许端口2049(NFS)的入站流量,来源设为
10.0.0.0/8。
2. Cloud Shell配置自动挂载NFS
- 编辑
~/.bashrc,追加以下代码(替换你的NFS实例内部IP为实际IP):# 自动挂载NFS共享到本地目录 MOUNT_POINT="$HOME/nfs-mount" NFS_SERVER_IP="你的NFS实例内部IP" [ ! -d "$MOUNT_POINT" ] && mkdir -p "$MOUNT_POINT" mount | grep -q "$MOUNT_POINT" || sudo mount -t nfs "$NFS_SERVER_IP:/mnt/nfs-share" "$MOUNT_POINT" - 保存后重启Cloud Shell验证自动挂载。
注意事项
- NFS性能优于GCS,适合频繁读写场景,但需维护GCE实例,产生相应费用;
- 确保NFS实例与Cloud Shell在同一VPC下,否则需配置VPC对等连接。
通用技巧
- 可将挂载逻辑封装为独立脚本(如
~/mount-storage.sh),再在.bashrc中调用,便于后续修改维护; - 挂载失败时,GCS可查看
/var/log/gcsfuse.log排查,NFS可通过dmesg查看错误日志; - 所有操作均基于当前Google账号完成,无需额外账号。
内容的提问来源于stack exchange,提问作者Roy
相关产品推荐
相关产品推荐

