linux启动时有文件错误,解决由于文件系统错误而出现 Linux VM 启动 - Virtual Machines | Microsoft Docs...

解决由于文件系统错误导致 Linux VM 启动问题

10/09/2019

本文内容

无法使用安全命令行管理程序 (SSH) Azure Linux 虚拟机 (VM) 。 当你在 Azure门户上运行启动诊断功能时,你将看到类似于以下示例的日志条目。

示例

以下是可能错误的示例。

示例 1

Checking all file systems.

[/sbin/fsck.ext4 (1) — /] fsck.ext4 -a /dev/sda1

/dev/sda1 contains a file system with errors, check forced.

/dev/sda1: Inodes that were part of a corrupted orphan linked list found.

/dev/sda1: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY

示例 2

EXT4-fs (sda1): INFO: recovery required on readonly filesystem

EXT4-fs (sda1): write access will be enabled during recovery

EXT4-fs warning (device sda1): ext4_clear_journal_err:4531: Filesystem error recorded from previous mount: IO failure

EXT4-fs warning (device sda1): ext4_clear_journal_err:4532: Making fs in need of filesystem check.

示例 3

[ 14.252404] EXT4-fs (sda1): Couldn’t remount RDWR because of unprocessed orphan inode list. Please unmount/remount instead

An error occurred while mounting /.

示例 4

此示例由干净 fsck 导致。 在这种情况下,还有附加数据磁盘附加到 VM (/dev/sdc1 和 /dev/sde1) 。

Checking all file systems.

[/sbin/fsck.ext4 (1) — /] fsck.ext4 -a /dev/sda1

/dev/sda1: clean, 65405/1905008 files, 732749/7608064 blocks

[/sbin/fsck.ext4 (1) — /tmp] fsck.ext4 -a /dev/sdc1

[/sbin/fsck.ext4 (2) — /backup] fsck.ext4 -a /dev/sde1

/dev/sdc1: clean, 12/1048576 files, 109842/4192957 blocks

/dev/sde1 : clean, 51/67043328 files, 4259482/268173037 blocks

如果文件系统未完全关闭或存储相关问题,则可能会出现此问题。 这些问题包括硬件或软件错误、驱动程序或程序问题、写入错误等。对关键数据进行备份始终非常重要。 本文中介绍的工具可帮助恢复文件系统,但仍可能发生数据丢失。

Linux 具有多个可用的文件系统检查器。 Azure 中最常见的分发包括:FSCK、E2FSCK和 Xfs_repair。

分辨率

若要解决此问题,请使用串行控制台将 VM 启动到紧急模式,并使用该工具修复文件系统。 如果在 VM 上未启用串行控制台或无法工作,请参阅本文的脱机修复 VM 部分。

使用串行控制台

选择"电源图标"按钮,然后选择"重新启动 VM"。 (如果串行控制台未启用或未成功连接,你将看不到按钮。)

b7e07ad9a32d6bb7eef99670c3d4e2f6.png

将 VM 启动到紧急模式。

输入根帐户的密码以登录到紧急模式。

使用xfs_repair -n 选项检测文件系统中的错误。 在下面的示例中,我们假定系统分区是 /dev/sda1。 将其替换为 VM 的适当值:

xfs_repair -n /dev/sda1

运行以下命令修复文件系统:

xfs_repair /dev/sda1

如果您收到错误消息"ERROR: the filesystem has valuable metadata changes in a log which needs to replayed",请创建一个临时目录并装载文件系统:

mkdir /temp

mount /dev/sda1 /temp

如果磁盘无法装入,请xfs_repair -L 选项运行 (日志清零) :

xfs_repair /dev/sda1 -L

接下来,尝试装载文件系统。 如果磁盘成功装入,您将收到以下输出:

XFS (sda1): Mounting V1 Filesystem

XFS (sda1): Ending clean mount

重新启动 VM,然后检查该问题是否得到解决。

Reboot -f

脱机修复 VM

将 VM 的系统磁盘作为数据磁盘附加到任何运行中的 Linux VM (恢复 VM) 。 为此,可以使用CLI命令,或者可以使用 VM 修复命令自动设置恢复 VM。

找到所附加的系统磁盘的驱动器标签。 在这种情况下,我们假定您附加的系统磁盘的标签为 /dev/sdc1。 将其替换为 VM 的适当值。

使用xfs_repair -n 选项检测文件系统中的错误。

xfs_repair -n /dev/sdc1

运行以下命令修复文件系统:

xfs_repair /dev/sdc1

如果您收到错误消息"ERROR: the filesystem has valuable metadata changes in a log which needs to replayed",请创建一个临时目录并装载文件系统:

mkdir /temp

mount /dev/sdc1 /temp

如果磁盘无法装入,请xfs_repair -L 选项运行 (日志清零) :

xfs_repair /dev/sdc1 -L

接下来,尝试装载文件系统。 如果磁盘成功装入,您将收到以下输出:

XFS (sdc1): Mounting V1 Filesystem

XFS (sdc1): Ending clean mount

卸载并分离原始虚拟硬盘,然后从原始系统磁盘创建 VM。 为此,可以使用 CLI 命令或 VM 修复命令(如果使用它们来创建恢复 VM)。

检查该问题是否得到解决。

后续步骤