Fstab(文件系统表)是一个配置文件,用于定义 Linux 虚拟机中的磁盘分区、文件系统和文件共享装载在系统重新启动后的保留方式。
本文档概述了 fstab 配置不正确可能导致启动问题的多个条件,并提供了解决问题的问题排查建议。
下面列出了 fstab 配置错误的一些常见问题:
准备工作
- 如果您要在 Cloud Logging 中记录串行端口输出,请先了解 Cloud Logging。
-
如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以选择以下任一选项向 Compute Engine 进行身份验证:
Select the tab for how you plan to use the samples on this page:
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。
-
识别 fstab 问题
对于启动问题,Google 强烈建议您在 Linux 虚拟机的串行控制台中检查启动日志。虚拟机会进入紧急模式,并显示一条错误消息,提示该问题与 fstab 有关。
[K[[1;31m TIME [0m] Timed out waiting for device dev-incorrect.device. [[1;33mDEPEND[0m] Dependency failed for /distribution. [[1;33mDEPEND[0m] Dependency failed for Local File Systems. ... Welcome to emergency mode! After logging in, type "journalctl -xb" to viewsystem logs, "systemctl reboot" to reboot, "systemctl default" to try again to boot into default mode. Give root password for maintenance (or type Control-D to continue)
根据错误消息,/distribution
文件系统存在依赖项故障。文件系统装载点的依赖项故障会因所使用的文件系统名称而异。
解决方法
使用以下方法来解决 Google Cloud中托管的 Linux 虚拟机中的 fstab
错误。与使用手动方法相比,使用串行控制台可以更快地解决问题。
如需使用以下方法解决 fstab 问题,您必须为虚拟机启用串行端口访问权限。
方法 1:使用串行控制台在紧急模式下登录虚拟机
从 Google Cloud 控制台登录虚拟机的串行控制台。
在当前紧急模式下,输入根密码以访问您的虚拟机。
使用您偏好的文本编辑器打开
fstab
文件。进行必要的更改,并将更改保存到fstab
文件中。以下示例使用vi
编辑器。vi /etc/fstab
在上面的示例中,
/distribution
的设备与虚拟机分离。注释引用文件系统的行,或移除/distribution
装载点的 fstab 条目。如需详细了解 fstab 配置和语法,请使用
man fstab
。保存文件并退出编辑器。 如果您使用的是
vi
编辑器,请使用ESC
+:wq!
保存并退出编辑器。在提示符处输入 reboot 来恢复启动过程。
成功解决问题后,虚拟机启动过程应该会完成,并且串行控制台中会显示登录提示。
验证您是否可以使用 SSH 再次登录虚拟机。
方法 2 - 在串行控制台中使用单用户模式
如果未设置 root 密码,则可以使用此方法。
前提条件:grub 配置文件中的 GRUB_TIMEOUT
参数设置为非零值。此文件通常位于 /etc/default/grub
,但在一些早期发行版中,它可能位于某个非标准目录中。
前往 Google Cloud 控制台中的“虚拟机实例”页面。 前往“虚拟机实例”页面
从Google Cloud 控制台登录虚拟机的串行控制台。
在 Google Cloud 控制台中针对虚拟机点击重置。
在串行控制台窗口中,点击 grub 屏幕或菜单中用于暂停的箭头键来中断启动过程。
在 grub 引导加载程序屏幕的内核列表中,选择内核,然后按键盘上的
e
。在内核代码行的末尾添加
rd.break
参数,然后按ctrl
+x
。这有助于启动虚拟机进入单用户模式。以读写模式挂载根文件系统。
分析、进行必要的更改并保存
fstab
文件。如需详细了解配置和语法,请使用man fstab
。使用您偏好的文本编辑器打开fstab
文件。以下示例使用 vi 编辑器。vi /etc/fstab
在此示例中,
/distribution
的设备与虚拟机分离,因此注释掉该行或移除/distribution
装载点的 fstab 条目。保存文件并退出编辑器。如果您使用的是 vi 编辑器,请使用
ESC
+:wq!
保存并退出 fstab。在提示符处输入
reboot
来恢复启动过程。成功解决问题后,虚拟机启动过程应该会完成,并且您应该会在串行控制台中看到登录提示。
验证您是否可以使用 SSH 登录虚拟机。
方法 3 - 救援虚拟机
如果未设置 root 密码或者您无法使用单用户模式,则可以使用此方法。
如需了解详情,请参阅救援无法访问的虚拟机。