google-cloud-platform - 调整启动磁盘 VM(Google Cloud)的大小后网站完全关闭
问题描述
我不得不将我的 Debian Linux VM 的启动磁盘从 10GB 调整到 30GB,因为它已满。在这样做并停止/启动我的实例之后,它变得无用了。我无法进入 SSH,也无法访问我的应用程序。从 1 个月前开始的最后一次备份,如果我不让这个工作,我们将失去很多工作。
我已经阅读了互联网上关于调整磁盘大小和重新分区表的几乎所有内容,但似乎没有任何效果。
运行时df -h
我看到:
Filesystem Size Used Avail Use% Mounted on
overlay 36G 30G 5.8G 84% /
tmpfs 64M 0 64M 0% /dev
tmpfs 848M 0 848M 0% /sys/fs/cgroup
/dev/sda1 36G 30G 5.8G 84% /root
/dev/sdb1 4.8G 11M 4.6G 1% /home
overlayfs 1.0M 128K 896K 13% /etc/ssh/keys
tmpfs 848M 744K 847M 1% /run/metrics
shm 64M 0 64M 0% /dev/shm
overlayfs 1.0M 128K 896K 13% /etc/ssh/ssh_host_dsa_key
tmpfs 848M 0 848M 0% /run/google/devshell
运行时sudo lsblk
我看到:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40G 0 disk
├─sda1 8:1 35.9G 0 part /var/lib/docker
├─sda2 8:2 0 16M 1 part
├─sda3 8:3 0 2G 1 part
├─sda4 8:4 0 16M 0 part
├─sda5 8:5 0 2G 0 part
├─sda6 8:6 512B 0 part
├─sda7 8:7 0 512B 0 part
├─sda8 8:8 16M 0 part
├─sda9 8:9 0 512B 0 part
├─sda10 8:10 0 512B 0 part
├─sda11 8:11 8M 0 part
└─sda12 8:12 0 32M 0 part
sdb 8:16 0 5G 0 disk
└─sdb1 8:17 0 5G 0 part /home
zram0 253:0 0 768M 0 disk [SWAP]
在增加磁盘大小之前,我确实尝试添加第二个磁盘,我什至按照谷歌云文档格式化并安装它,然后再次卸载它。(所以我编辑了 fstab 和 fstab.backup 等。)
谷歌云文档上的调整磁盘大小/重新分区表对我没有任何作用。. growpart
,fdisk
和resize2fs
许多其他 StackOverflow 帖子都没有。
尝试通过 SSH 访问时,我收到“无法在端口 22 上连接”错误,如google cloud docs中所述
使用新磁盘创建新的 Debian Linux 实例时,它可以正常工作。
任何可以在不丢失任何数据的情况下为我启动并运行它的人都会获得 100+ 和很多爱......
解决方案
我试图复制案例场景,但它没有给我带来任何 VM 实例问题。
我创建了一个包含 10 GB 数据的 VM 实例,然后将其停止,将磁盘大小增加到 30 GB 并再次启动该实例。您提到您无法通过 ssh 访问实例或访问您的应用程序。在我的测试之后,我可以通过 ssh 进入实例。因此,您所遵循的过程肯定存在损坏 VM 实例或引导磁盘的问题。
但是,有一种解决方法可以从您无法通过 SSH 访问的实例中恢复文件。我已经对其进行了测试,并且对我有用:
- 转到 Compute Engine 页面,然后转到
Images
- 点击“[+] 创建图像”
- 为该图像命名并在
Source
选择下Disk
- 在
Source disk
选择您已调整大小的 VM 实例的磁盘下。 - 点击
Save
,如果磁盘的虚拟机正在运行,会报错。要么先停止 VM 实例,然后再次执行相同的步骤,要么只选中该框Keep instance running (not recommended)
。(我建议先停止它,正如错误所暗示的那样)。 - 保存新创建的图像后。选择它并单击
+ CREATE INSTANCE
- 为该实例命名并保留所有设置。
- 在引导磁盘下,您确保看到您之前在增加磁盘大小时设置的 30 GB 大小,并且名称应该是您创建的映像的名称。
- 单击创建并尝试通过 SSH 连接到新创建的实例。
- 如果在调整磁盘大小时保留了所有文件,则应该能够访问在 VM 损坏之前拥有的最新文件。
更新第二个解决方法 - 将引导磁盘作为辅助磁盘附加到另一个 VM 实例
为了将磁盘从损坏的 VM 实例附加到新的 GCE 实例,您需要执行以下步骤:
- 转到
Compute Engine > Snapshots
并单击+ CREATE SNAPSHOT
。 - 在 下
Source disk
,选择损坏的 VM 的磁盘。创建快照。 - 转到
Compute Engine > Disks
并单击+ CREATE DISK
。 - 在
Source type
转到Snapshot
和下Source snapshot
选择您从步骤 2 中创建的新快照。创建磁盘。 - 转到
Compute Engine > VM instances
并单击+ CREATE INSTANCE
。 - 将所有设置保留为默认设置。在
Firewall
启用Allo HTTP traffic
和Allow HTTPS traffic
。 - 点击
Management, security, disks, networking, sole tenancy
- 单击
Disks
选项卡。 - 单击
+ Attach existing disk
并Disk
选择新创建的磁盘。创建新的 VM 实例。 - SSH 进入虚拟机并运行
$ sudo lsblk
- 检查新附加磁盘的设备名称及其主分区(可能是 /dev/sdb1)
- 创建一个目录以将磁盘挂载到:
$ sudo mkdir -p /mnt/disks/mount
- 将磁盘挂载到新创建的目录
$ sudo mount -o discard,defaults /dev/sdb1 /mnt/disks/mount
- 然后您应该能够从磁盘加载所有文件。我自己测试过,我可以用这种方法从旧磁盘中再次恢复文件。
推荐阅读
- docusignapi - 尽管有多个 CompositeTemplate 对象,但所有模板都应用于第一个文档
- javascript - 在我的 Django 网站中集成支付网关时遇到问题
- python - 使用 tf.compat.v1.variable_scope 会产生错误 - Tensorflow 没有属性 variable_scope
- moleculer - 如何将分子网关与 express-nodejs 应用程序连接?
- ruby-on-rails - 将列类型从文本更改为字符串数组 (PG::DatatypeMismatch: ERROR: column)
- openedge - 将对象保存到数据库中
- typescript - 如何在对象文字中专门化泛型类型?
- mongodb - MongoDB 创建空结果对象
- html - 为我的主容器分配 100vh 的高度,以便页面上的所有内容无需滚动
- python - 使用托管扩展策略的 AWS EMR 上的验证错误