系统管理指南:网络服务

NFS 版本 4 中的客户机恢复

NFS 版本 4 协议为有状态协议。如果客户机和服务器都保留有关以下内容的当前信息,协议即为有状态协议。

出现故障(如服务器崩溃)时,客户机和服务器会协同工作,以重新建立故障之前已存在的打开状态和锁定状态。

服务器崩溃并重新引导时,会丢失其状态。客户机检测到服务器已经重新引导后,将启动帮助服务器重建其状态的进程。此进程称为客户机恢复,因为它是由客户机引导执行的。

客户机发现服务器已经重新引导后,便会立即暂停其当前活动并启动客户机恢复进程。启动恢复进程时,系统错误日志 /var/adm/messages 中会显示如下消息。


NOTICE: Starting recovery server basil.example.company.com

在恢复进程中,客户机会向服务器发送有关客户机以前状态的信息。但是请注意,在此期间,客户机不会向服务器发送任何新请求。 任何打开文件或设置文件锁定的新请求都必须等到服务器完成其恢复期之后才能继续进行。

客户机恢复进程完成时,系统错误日志 /var/adm/messages 中会显示以下消息。


NOTICE: Recovery done for server basil.example.company.com

现在,客户机已经成功地将其状态信息发送给服务器。 不过,尽管此客户机已经完成了此进程,但是其他客户机可能尚未完成将其状态信息发送给服务器的进程。 因此,在一段时间内,服务器不会接受任何打开或锁定请求。指定这段时间(称为宽延期)旨在允许所有客户机完成其恢复。

在宽延期内,如果客户机尝试打开任何新文件或建立任何新锁定,服务器都会拒绝请求并显示 GRACE 错误代码。收到此错误后,客户机必须等到宽延期结束,然后才能向服务器重新发送请求。 在宽延期内,会显示以下消息。


NFS server recovering

请注意,在宽延期内,可以继续执行不打开文件或设置文件锁定的命令。 例如,命令 lscd 不会打开文件或设置文件锁定。因此,这些命令不会暂停执行。但是,cat 之类可打开文件的命令会暂停执行,直到宽延期结束为止。

宽延期结束后,会显示以下消息。


NFS server recovery ok.

现在,客户机即可向服务器发送新的打开和锁定请求。

客户机恢复会因为各种原因而失败。例如,如果服务器重新引导后存在网络分区,则客户机可能无法在宽延期结束之前在服务器上重新建立其状态。 宽延期结束后,服务器不允许客户机重新建立其状态,因为新的状态操作可能会产生冲突。例如,新的文件锁定可能会与客户机尝试恢复的旧的文件锁定发生冲突。发生这种情况时,服务器会将 NO_GRACE 错误代码返回到客户机。

如果恢复某个特定文件的打开操作失败,客户机会将此文件标记为不可用,并显示以下消息。


WARNING: The following NFS file could not be recovered and was marked dead 

(can't reopen:  NFS status 70):  file :  filename

请注意,数字 70 仅是一个示例。

如果在恢复过程中重新建立文件锁定失败,则会显示以下错误消息。


NOTICE: nfs4_send_siglost:  pid PROCESS-ID lost

lock on server SERVER-NAME

在这种情况下,会向进程发送 SIGLOST 信号。SIGLOST 信号的缺省操作是终止此进程。

要从此状态恢复,必须重新启动所有在失败时打开文件的应用程序。请注意,可能会出现以下情况。

因此,一些进程可以访问其他进程无法访问的特定文件。