DF-H

DF-H

我重启了 Google Cloud VM,现在无法通过 ssh 访问它。我从日志中收到以下消息 -

Sep 26 21:51:02  NetworkManager[1300]: <info>  [1569523862.8802] dhcp4 (eth0): canceled DHCP transaction
Sep 26 21:51:34  NetworkManager[1300]: <info>  [1569523894.8143] device (eth0): state change: ip-config -> failed (reason 'ip-config-unavailable', sys-iface-state: 'managed')
Sep 26 21:51:34  NetworkManager[1300]: <info>  [1569523894.8148] manager: NetworkManager state is now DISCONNECTED
Sep 26 21:51:34  NetworkManager[1300]: <warn>  [1569523894.8151] device (eth0): Activation: failed for connection 'System eth0'
Sep 26 21:51:34  NetworkManager[1300]: <info>  [1569523894.8153] device (eth0): state change: failed -> disconnected (reason 'none', sys-iface-state: 'managed')```

答案1

您的错误消息表明 dhclient 无法成功运行。您是否还在日志中看到类似以下内容dhcp4 (eth0): client pid XXXX exited with status 127?如果没有,是否还有其他与相关的日志条目dhcp4

假设您遇到错误exited with status 127,我将继续提出解决方案。(如果您遇到其他错误,请告诉我,我会编辑答案。)

由于您没有网络连接,您需要通过串行控制台登录到 VM,并使用密码对具有 root sudo 访问权限的用户帐户进行身份验证。

退出代码 127 表示程序无法运行。为什么?好吧,试试看:运行命令dhclient,看看会发生什么:

#> sudo dhclient --help
dhclient: error while loading shared libraries: libdns-export.so.1102: cannot open shared object file: No such file or directory

好的,在这种情况下,dhclient无法加载所需的库。如果你在 Google 上搜索,你可能会发现这个旧的 Redhat 错误这表明该问题已通过重新链接库来解决ldconfig

#> sudo /sbin/ldconfig

之后,dhclient运行成功:

#> sudo dhclient --help
Internet Systems Consortium DHCP Client 4.2.5
Copyright 2004-2013 Internet Systems Consortium.
[…]

然后重启NetworkManager就成功了:

#> sudo systemctl restart NetworkManager.service

网络已启动:

#> ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=52 time=1.98 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=52 time=0.258 ms

答案2

实例启动时网络堆栈失败的原因是您的虚拟机的启动磁盘已 100% 满。

解决方法是将磁盘大小调整得更大。

我写了这篇文章,详细介绍了所需的步骤:

调整根文件系统大小

答案3

下面暂时解决了我的问题;

(i)通过串行控制台登录到您的虚拟机。您可能需要单击返回按钮才能显示登录信息。

(ii)确认虚拟机内存和磁盘空间正常。您可以使用诸如 df -h 之类的工具来检查磁盘空间,如果不够,您可以按照約翰·漢利教程并增加它。当一切正常并且唯一的网络出现故障时,转到步骤 iii

(iii)在 centos 上禁用 NetworkManager 并手动配置网络,可以按如下方式完成:

systemctl stop NetworkManager
systemctl disable NetworkManager
ifconfig eth0 <internal_ip> netmask 255.255.255.0
route add default gw <your-cloud-gateway>

完成上述操作后,您将可以完全访问您的 Google VM,但是,您的 VM 对其他 VM 是不可见的,您必须使用下面的路由命令进行配置

route add <other-VM-internal-IP> netmask 0.0.0.0 gw <you-cloud-gateway>

您必须对希望虚拟服务器可见的每个虚拟机执行上述操作

此修复是暂时的,因为您可能会在重新启动时丢失设置,无论如何您都可以将这些命令放在 /etc/rc.local 中,以便在启动时执行它们

免责声明:我并不是很有经验,但以上是我修复一个关键服务器的方法,该服务器刚刚出现问题,需要我的客户快速恢复服务,因为我正在寻找一个永久的解决方案。

答案4

由于您的 NetworkManager 状态现在为 DISCONNECTED,因此连接到您的实例的唯一方法是与串行控制台交互

很有可能您没有提前为虚拟机实例上的用户分配本地密码,因此卡在这里,但不用担心!您也可以按照以下说明来解决此问题:

第一步,使用以下命令在 Cloud Shell 中创建启动脚本:

$ nano startup.sh 并将以下内容复制到其中。

#!/bin/bash echo "密码" | passwd --stdin 用户名

(其中 password 为所需密码,必须留引号。username 为所需用户名)按 ctrl+x,然后按 y,然后按 Enter 保存并退出

第二步,使用以下命令将启动脚本插入到您的实例中。

gcloud compute instance add-metadata example-instance
--metadata-from-file startup-script=path/to/file

(其中示例实例是您的实例名称,文件路径是启动脚本文件所在的位置,如果您在创建文件后没有更改目录,则路径为 ./startup.sh

第三步,返回控制台中的 vm 实例并重新启动实例。启动后,单击 [连接到串行控制台] 按钮。

启动过程完成后,您可以输入您的凭据。您可能需要按 Enter 键才能获得登录提示。

一旦登录,我们可以使用以下命令验证您的硬盘空间以确认日志条目:

DF-H

您还可以在脚本中使用以下命令删除临时文件以清理硬盘:

#!/bin/bash rm -rf /tmp/* rm -rf /var/tmp/* rm -rf /usr/tmp/* rm -rf /var/log/*

相关内容