<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://wiki.lustre.org/index.php?action=history&amp;feed=atom&amp;title=Lustre_Health_Checks</id>
	<title>Lustre Health Checks - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.lustre.org/index.php?action=history&amp;feed=atom&amp;title=Lustre_Health_Checks"/>
	<link rel="alternate" type="text/html" href="http://wiki.lustre.org/index.php?title=Lustre_Health_Checks&amp;action=history"/>
	<updated>2026-08-05T16:23:20Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>http://wiki.lustre.org/index.php?title=Lustre_Health_Checks&amp;diff=5466&amp;oldid=prev</id>
		<title>Elliswilson: Created page with &quot;--- Content (MediaWiki markup) ---  __TOC__  == Overview ==  This page provides a quick-reference guide for Lustre administrators to verify that a filesystem is healthy. The checks below cover node health, storage capacity, recovery state, client connectivity, and LNet status.  For detailed statistics and monitoring, see the Lustre Monitoring and Statistics Guide.  == Quick Health Check Summary ==  {| class=&quot;wikitable&quot; ! Check ! Command ! Healthy Output ! Unhealthy O...&quot;</title>
		<link rel="alternate" type="text/html" href="http://wiki.lustre.org/index.php?title=Lustre_Health_Checks&amp;diff=5466&amp;oldid=prev"/>
		<updated>2026-04-30T16:24:10Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;--- Content (MediaWiki markup) ---  __TOC__  == Overview ==  This page provides a quick-reference guide for Lustre administrators to verify that a filesystem is healthy. The checks below cover node health, storage capacity, recovery state, client connectivity, and LNet status.  For detailed statistics and monitoring, see the &lt;a href=&quot;/Lustre_Monitoring_and_Statistics_Guide&quot; title=&quot;Lustre Monitoring and Statistics Guide&quot;&gt;Lustre Monitoring and Statistics Guide&lt;/a&gt;.  == Quick Health Check Summary ==  {| class=&amp;quot;wikitable&amp;quot; ! Check ! Command ! Healthy Output ! Unhealthy O...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--- Content (MediaWiki markup) ---&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
This page provides a quick-reference guide for Lustre administrators to verify that a filesystem is healthy. The checks below cover node health, storage capacity, recovery state, client connectivity, and LNet status.&lt;br /&gt;
&lt;br /&gt;
For detailed statistics and monitoring, see the [[Lustre Monitoring and Statistics Guide]].&lt;br /&gt;
&lt;br /&gt;
== Quick Health Check Summary ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Check&lt;br /&gt;
! Command&lt;br /&gt;
! Healthy Output&lt;br /&gt;
! Unhealthy Output&lt;br /&gt;
|-&lt;br /&gt;
| Node health&lt;br /&gt;
| &amp;lt;code&amp;gt;lctl get_param health_check&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;healthy&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NOT HEALTHY&amp;lt;/code&amp;gt; (with reason)&lt;br /&gt;
|-&lt;br /&gt;
| Space usage&lt;br /&gt;
| &amp;lt;code&amp;gt;lfs df&amp;lt;/code&amp;gt;&lt;br /&gt;
| All targets show reasonable usage&lt;br /&gt;
| Any target at 100% or missing&lt;br /&gt;
|-&lt;br /&gt;
| Inode usage&lt;br /&gt;
| &amp;lt;code&amp;gt;lfs df -i&amp;lt;/code&amp;gt;&lt;br /&gt;
| Inode usage well below limits&lt;br /&gt;
| Inodes exhausted on any target&lt;br /&gt;
|-&lt;br /&gt;
| Recovery state&lt;br /&gt;
| &amp;lt;code&amp;gt;lctl get_param *.*.recovery_status&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;status: COMPLETE&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;INACTIVE&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;status: RECOVERING&amp;lt;/code&amp;gt;, clients not yet connected&lt;br /&gt;
|-&lt;br /&gt;
| Evictions&lt;br /&gt;
| &amp;lt;code&amp;gt;dmesg &amp;amp;#124; grep -i evict&amp;lt;/code&amp;gt;&lt;br /&gt;
| No output&lt;br /&gt;
| Messages like &amp;lt;code&amp;gt;Evicted client ... (CONN_EXPIRED)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| OST exports&lt;br /&gt;
| &amp;lt;code&amp;gt;lctl get_param obdfilter.*.num_exports&amp;lt;/code&amp;gt;&lt;br /&gt;
| Stable, expected client count&lt;br /&gt;
| Drops suddenly or is zero&lt;br /&gt;
|-&lt;br /&gt;
| MDT exports&lt;br /&gt;
| &amp;lt;code&amp;gt;lctl get_param mdt.*.num_exports&amp;lt;/code&amp;gt;&lt;br /&gt;
| Stable, expected client count&lt;br /&gt;
| Drops suddenly or is zero&lt;br /&gt;
|-&lt;br /&gt;
| LNet networks&lt;br /&gt;
| &amp;lt;code&amp;gt;lnetctl net show&amp;lt;/code&amp;gt;&lt;br /&gt;
| All NIDs listed, status up&lt;br /&gt;
| Missing NIDs or errors&lt;br /&gt;
|-&lt;br /&gt;
| LNet peers&lt;br /&gt;
| &amp;lt;code&amp;gt;lnetctl peer show&amp;lt;/code&amp;gt;&lt;br /&gt;
| All peers reachable, health value &amp;gt; 0&lt;br /&gt;
| Health value 0, state down&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Detailed Checks ==&lt;br /&gt;
&lt;br /&gt;
=== Node Health ===&lt;br /&gt;
&lt;br /&gt;
Every Lustre node (client, OSS, MDS) exposes a top-level health indicator:&lt;br /&gt;
&lt;br /&gt;
 lctl get_param health_check&lt;br /&gt;
&lt;br /&gt;
A healthy node returns &amp;lt;code&amp;gt;healthy&amp;lt;/code&amp;gt;. If the node is unhealthy, the output includes a reason such as &amp;lt;code&amp;gt;NOT HEALTHY - LBUG&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;NOT HEALTHY - dead import&amp;lt;/code&amp;gt;. An unhealthy status typically means at least one OBD device has failed or LNet is down.&lt;br /&gt;
&lt;br /&gt;
=== Space and Inode Usage ===&lt;br /&gt;
&lt;br /&gt;
Check aggregate and per-target space usage:&lt;br /&gt;
&lt;br /&gt;
 lfs df /mnt/lustre&lt;br /&gt;
&lt;br /&gt;
Check inode usage:&lt;br /&gt;
&lt;br /&gt;
 lfs df -i /mnt/lustre&lt;br /&gt;
&lt;br /&gt;
Things to watch for:&lt;br /&gt;
* Any OST above 95% triggers space rebalancing concerns.&lt;br /&gt;
* An MDT running low on inodes can block new file creation.&lt;br /&gt;
* Uneven OST utilization may indicate striping or QoS weight issues.&lt;br /&gt;
&lt;br /&gt;
=== Recovery Status ===&lt;br /&gt;
&lt;br /&gt;
After a server restart or network interruption, Lustre enters a recovery window during which clients reconnect:&lt;br /&gt;
&lt;br /&gt;
 lctl get_param *.*.recovery_status&lt;br /&gt;
&lt;br /&gt;
Key fields in the output:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;status&amp;#039;&amp;#039;&amp;#039; — &amp;lt;code&amp;gt;COMPLETE&amp;lt;/code&amp;gt; means recovery finished. &amp;lt;code&amp;gt;RECOVERING&amp;lt;/code&amp;gt; means the server is still waiting for clients.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;connected_clients&amp;#039;&amp;#039;&amp;#039; / &amp;#039;&amp;#039;&amp;#039;max_clients&amp;#039;&amp;#039;&amp;#039; — how many clients have reconnected.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;time_remaining&amp;#039;&amp;#039;&amp;#039; — seconds left in the recovery window.&lt;br /&gt;
&lt;br /&gt;
If recovery does not complete, check whether evicted clients are still trying to reconnect or whether the recovery timeout (&amp;#039;&amp;#039;recovery_time_hard&amp;#039;&amp;#039;) needs to be extended.&lt;br /&gt;
&lt;br /&gt;
=== Checking for Evictions ===&lt;br /&gt;
&lt;br /&gt;
Evictions occur when a client fails to communicate with a server within the timeout window. Check server-side kernel logs:&lt;br /&gt;
&lt;br /&gt;
 dmesg | grep -i evict&lt;br /&gt;
&lt;br /&gt;
Common eviction reasons:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;CONN_EXPIRED&amp;#039;&amp;#039;&amp;#039; — client did not send a ping within the timeout.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;RECONNECT_RACE&amp;#039;&amp;#039;&amp;#039; — conflicting reconnection attempts.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;ADMIN_FORCED&amp;#039;&amp;#039;&amp;#039; — administrator manually evicted the client.&lt;br /&gt;
&lt;br /&gt;
To see the server-side eviction count:&lt;br /&gt;
&lt;br /&gt;
 lctl get_param *.*.num_exports&lt;br /&gt;
&lt;br /&gt;
A sudden drop indicates clients were evicted.&lt;br /&gt;
&lt;br /&gt;
=== Target Export Count ===&lt;br /&gt;
&lt;br /&gt;
The number of active client connections to each target:&lt;br /&gt;
&lt;br /&gt;
 # OSTs&lt;br /&gt;
 lctl get_param obdfilter.*.num_exports&lt;br /&gt;
&lt;br /&gt;
 # MDTs&lt;br /&gt;
 lctl get_param mdt.*.num_exports&lt;br /&gt;
&lt;br /&gt;
Compare these values against the expected number of mounted clients. If a target shows zero exports and the filesystem is mounted, the target may be offline or in recovery.&lt;br /&gt;
&lt;br /&gt;
=== LNet Health ===&lt;br /&gt;
&lt;br /&gt;
Check that LNet networks are properly configured and operational:&lt;br /&gt;
&lt;br /&gt;
 lnetctl net show&lt;br /&gt;
&lt;br /&gt;
Verify peer connectivity and health scores:&lt;br /&gt;
&lt;br /&gt;
 lnetctl peer show&lt;br /&gt;
&lt;br /&gt;
Each peer has a &amp;#039;&amp;#039;&amp;#039;health value&amp;#039;&amp;#039;&amp;#039; (default max 1000). Values below 1000 indicate recent communication failures. A value of 0 means the peer is considered unreachable and LNet will avoid routing through it.&lt;br /&gt;
&lt;br /&gt;
To check overall LNet status quickly:&lt;br /&gt;
&lt;br /&gt;
 lctl get_param nis&lt;br /&gt;
&lt;br /&gt;
This shows local NIDs, their status, and traffic counters.&lt;br /&gt;
&lt;br /&gt;
== Key Proc Parameters ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;health_check&amp;lt;/code&amp;gt;&lt;br /&gt;
| Top-level node health (healthy / NOT HEALTHY)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;*.*.recovery_status&amp;lt;/code&amp;gt;&lt;br /&gt;
| Recovery state, connected clients, time remaining&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;*.*.num_exports&amp;lt;/code&amp;gt;&lt;br /&gt;
| Number of active client connections per target&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;obdfilter.*.kbytestotal&amp;lt;/code&amp;gt;&lt;br /&gt;
| Total capacity per OST (in KB)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;obdfilter.*.kbytesfree&amp;lt;/code&amp;gt;&lt;br /&gt;
| Free space per OST (in KB)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mdt.*.kbytestotal&amp;lt;/code&amp;gt;&lt;br /&gt;
| Total capacity per MDT (in KB)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mdt.*.filesfree&amp;lt;/code&amp;gt;&lt;br /&gt;
| Free inodes per MDT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Lustre Monitoring and Statistics Guide]]&lt;br /&gt;
* [[Lustre Debugging Procedures]]&lt;br /&gt;
* [[Understanding Lustre Evictions]]&lt;br /&gt;
* [[Lustre Timeout Hierarchy]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Administration]]&lt;br /&gt;
[[Category:Monitoring]]&lt;/div&gt;</summary>
		<author><name>Elliswilson</name></author>
	</entry>
</feed>