如何使用 FSCK 检查和修复 ACFS
之路 on it Road.com

解决方案

我们应该使用 FSCK 进行以下检查并尝试修复 ACFS。

FSCK 完成的时间取决于文件系统和要检查的文件数量。
使用详细选项,fsck 必须为所有目录和文件生成此信息。
这会显着影响性能,尤其是对于包含大量文件的文件系统。

fsck处理:

Fsck 尝试验证文件系统的所有元数据。
此过程的一部分包括验证元数据块空闲列表。
必须检查空闲块本身以确保它是正确类型的元数据块,并且必须检查空闲列表以确保没有丢失条目并且列表中没有循环。
由于文件可以按任何顺序删除,因此这些空闲块可以位于卷上的任何位置。
由于文件删除的随机性,处理和验证这些列表会产生大量随机 I/O。
如果 fsck 花费太长时间,可以中断它,因为它正在检查模式下运行。

fsck 检查并修复现有的 Oracle ACFS。
此命令只能在卸载的文件系统上运行。
运行 fsck 需要 root 权限。
必须加载 Oracle ACFS 驱动程序才能使 fsck 工作。
要确认或者放弃受影响的 ACFS 文件系统上的任何一致性问题,请按如下方式运行 FSCK:

  1. 如下卸载每个节点上的 ACFS 文件系统(作为 root 用户)并保持卸载以避免损坏。
    否则会得到警告:
fsck.acfs: ACFS-00511: /dev/asm/<VOLUME_NAME> is mounted on at least one node of the cluster.
#  /usr/sbin/umountall -F acfs

或者

# /usr/sbin/umount [MOUNT_POINT]

其中:MOUNT_POINT 是 ACFS 文件系统。

  1. 然后,按如下方式在关联的 ADVM 卷上执行 FSCK(如果是 RAC,则从每个节点执行):

在 Linux 上

# script /tmp/fsck_[node name].txt
# /sbin/fsck -a -y -t acfs /dev/asm/[VOLUME_NAME]
# exit

在 Solaris 上

# script /tmp/fsck_[node name].txt
# /usr/sbin/fsck -F acfs -y -o a,v /dev/asm/[VOLUME_NAME]
# exit

在 IBM-AIX 上

# /usr/sbin/fsck -V acfs -y -o a,v /dev/asm/[VOLUME_NAME]

其中:
/dev/asm/[VOLUME_NAME 是 ADVM 卷。

重要提示:默认情况下,fsck 仅检查并报告任何错误。
在检查模式下,如果需要很长时间,可以取消 fsck。
必须指定 -a 标志以指示 fsck 修复文件系统中的错误。
如果检查模式在合理的时间内完成,并且报告了问题,请在修复模式下运行 fsck。
在修复模式下,fsck 不能被中断,否则会导致文件系统处于更糟糕的状态(数据丢失取决于损坏的性质)。

# /sbin/fsck -a -y -t acfs /dev/asm/[VOLUME_NAME]
  1. 如果是RAC,则在每个节点上挂载ACFS文件系统。
    在 fsck 修复后手动挂载总是更好。
# /usr/sbin/mount -v acfs /dev/asm/[VOLUME_NAME] [MOUNT_POINT]

其中:
/dev/asm/[VOLUME_NAME] 是 ADVM 卷。

MOUNT_POINT 是 ACFS 文件系统。

或者

# /usr/sbin/mount -v acfs -o all none none

例子:

使用“/sbin/acfsutil info fs”找到正确的卷并执行 fsck。

[HOSTNAME]:(+ASM2)/opt/oracle > /sbin/acfsutil info fs
/acfs1
  ACFS Version: 11.2.0.4.0
  flags:        MountPoint,Available,Corrupt
  mount time:   Fri Jun 10 17:29:14 2016
  volumes:      1
  total size:   xxxxxxxxxxxx
  total free:   xxxxxxxxxxxx
  primary volume: /dev/asm/[VOLUME_NAME2]

默认情况下,fsck 只检查和报告任何错误。
必须指定 -o a 选项以指示 fsck 修复文件系统中的错误。
在少数情况下,fsck 在继续检查文件系统之前会提示问题。
这些案例包括:

  • 如果 fsck 检测到文件系统上正在进行另一个 fsck。
  • 如果 fsck 检测到未加载 Oracle ACFS 驱动程序。
  • 如果文件系统看起来不是 Oracle ACFS。

在检查模式下,fsck 也会提示是否有由于关闭不完全而没有完全处理的事务日志。
要在非交互模式下运行,请包含 -y 或者 -n 选项以对任何问题回答是或者否。

问题

我们注意到与 ACFS 文件系统关联的不同 asm 元数据视图、asmcmd 和 os 输出中存在许多不一致之处。
数据库显示 RMAN 或者 dbverify 损坏。
数据库使用 ACFS。
ALTER DISKGROUP CHECK REPAIR 恢复干净,但我们仍然看到错误或者检查损坏返回正面,例如:

$ /sbin/acfsutil info fs -o iscorrupt [MOUNT_POINT]
acfsutil info fs: ACFS-03037: not an ACFS file system
$ /sbin/acfsutil info fs -o iscorrupt [MOUNT_POINT]
1

“/sbin/acfsutil info fs”的输出也在标志下显示损坏。
例如:

$ /sbin/acfsutil info fs
[MOUNT_POINT]
   ACFS Version: 18.3.0.0.0
   on-disk version: 47.0
   compatible.advm: 18.3.0.0.0
   ACFS compatibility: 18.3.0.0.0
   flags: MountPoint,Available,Corrupt,AutoResizeEnabled
日期:2020-09-17 00:11:38 来源:oir作者:oir