解决由于文件系统错误导致 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"。 (如果串行控制台未启用或未成功连接,你将看不到按钮。)
将 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)。
检查该问题是否得到解决。
后续步骤