3.8. 配置错误行为
当 I/O 操作过程中发生错误时,XFS 驱动程序以以下两种方式之一响应:
- 继续重试,直到出现以下任一操作:
- I/O 操作成功,或者
- 超过 I/O 操作重试计数或时间限制。
- 考虑永久错误并停止系统。
XFS 目前可识别您可以配置所需行为的以下错误条件:
EIO
: 在尝试写入设备时出现错误ENOSPC
: 该设备中没有剩余空间ENODEV
: Device cannot found
所有其他可能的错误条件(没有定义特定的处理程序)共享一个全局配置。
您可以设置 XFS 在最大重试次数和最长时间(以秒为单位)中导致错误持久性的条件。当满足任何一个条件时,XFS 会停止重试。
在卸载文件系统时,还有一个选项可立即取消重试,而不考虑任何其他配置。这允许卸载操作在出现持久错误时也可以成功。
3.8.1. 特定和未定义的条件的配置文件
控制错误行为的配置文件位于
/sys/fs/xfs/device/error/
目录中。
/sys/fs/xfs/设备/error/metadata/
目录包含每个特定错误条件的子目录:
- 用于
EIO 错误条件的 /sys/fs/xfs/device/error/metadata
/EIO
/ /sys/fs/xfs/device/error/metadata/ENODEV/
用于ENODEV
错误条件/sys/fs/xfs/device/error/metadata/ENOSPC/
用于ENOSPC
错误条件
然后,每个配置文件包含以下配置文件:
/sys/fs/xfs/device/error/metadata/condition/max_retries
: 控制 XFS 重新尝试操作的最大次数。/sys/fs/xfs/device/error/metadata/condition/retry_timeout_seconds
: XFS 将停止重试操作的时间限制(以秒为单位)
除了上一节中描述的其它错误条件外,所有其他可能的错误条件在这些文件中共享一个通用配置:
/sys/fs/xfs/device/error/metadata/default/max_retries
: 控制重试的最大次数/sys/fs/xfs/device/error/metadata/default/retry_timeout_seconds
: 控制重试的时间限制
3.8.2. 为特定和未定义条件设置文件系统行为
要设置重试的最大数量,请将所需的数量写入
max_retries
文件。
- 对于特定条件:
#
echo value > /sys/fs/xfs/device/error/metadata/condition/max_retries - 对于未定义的条件:
#
echo value > /sys/fs/xfs/device/error/metadata/default/max_retries
value 是
-1
和最大可能值为 int
的值(C 签名的整数类型)之间的数字。64 位 Linux 中是 2147483647
。
要设置时间限制,请将所需的秒数写入
retry_timeout_seconds
文件。
- 对于特定条件:
#
echo value > /sys/fs/xfs/device/error/metadata/condition/retry_timeout_seconds - 对于未定义的条件:
#
echo value > /sys/fs/xfs/device/error/metadata/default/retry_timeout_seconds
value 是
-1
和 86400
之间的数字,这是一天的秒数。
在
max_retries
和 retry_timeout_seconds
选项中,-1
表示重试 forever 和 0
以立即停止。
device 是设备的名称,如
/dev/
目录中找到,例如: sda
。
注意
每个错误条件的默认行为取决于错误上下文。一些错误(如
ENODEV
)被视为致命且不可恢复的,无论重试计数如何,其默认值为 0。
3.8.3. 设置卸载行为
如果设置了
fail_at_unmount
选项,文件系统会在卸载过程中覆盖所有其他错误配置,并在不重试 I/O 操作的情况下立即修改文件系统。这允许卸载操作在出现持久错误时也可以成功。
设置卸载行为:
#
echo value > /sys/fs/xfs/device/error/fail_at_unmount
值可以是
1
或 0
:
1
表示如果找到错误,则立即取消重试。0
表示遵守max_retries
和retry_timeout_seconds
选项。
device 是设备的名称,如
/dev/
目录中找到,例如: sda
。
重要
在尝试卸载文件系统前,需要根据需要设置
fail_at_unmount
选项。启动卸载操作后,配置文件和目录可能无法使用。