<?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_Upgrade_Checklist</id>
	<title>Lustre Upgrade Checklist - 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_Upgrade_Checklist"/>
	<link rel="alternate" type="text/html" href="http://wiki.lustre.org/index.php?title=Lustre_Upgrade_Checklist&amp;action=history"/>
	<updated>2026-08-08T18:44:02Z</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_Upgrade_Checklist&amp;diff=5579&amp;oldid=prev</id>
		<title>Elliswilson: Created page with &quot;== Purpose ==  This page is a &#039;&#039;&#039;condensed, actionable checklist&#039;&#039;&#039; for Lustre upgrades. It does &#039;&#039;&#039;not&#039;&#039;&#039; replace the full upgrade procedure — see Upgrading to a New Version of Lustre for the authoritative step-by-step guide. Use this page as a quick reference before, during, and after an upgrade.  == Pre-Upgrade Preparation ==  Complete &#039;&#039;&#039;all&#039;&#039;&#039; of the following before beginning any upgrade:  # &#039;&#039;&#039;Back up every MDT&#039;&#039;&#039; — &lt;code&gt;e2image -ra /dev/mdtdev /backup/md...&quot;</title>
		<link rel="alternate" type="text/html" href="http://wiki.lustre.org/index.php?title=Lustre_Upgrade_Checklist&amp;diff=5579&amp;oldid=prev"/>
		<updated>2026-07-20T15:25:37Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;== Purpose ==  This page is a &amp;#039;&amp;#039;&amp;#039;condensed, actionable checklist&amp;#039;&amp;#039;&amp;#039; for Lustre upgrades. It does &amp;#039;&amp;#039;&amp;#039;not&amp;#039;&amp;#039;&amp;#039; replace the full upgrade procedure — see &lt;a href=&quot;/Upgrading_to_a_New_Version_of_Lustre&quot; title=&quot;Upgrading to a New Version of Lustre&quot;&gt;Upgrading to a New Version of Lustre&lt;/a&gt; for the authoritative step-by-step guide. Use this page as a quick reference before, during, and after an upgrade.  == Pre-Upgrade Preparation ==  Complete &amp;#039;&amp;#039;&amp;#039;all&amp;#039;&amp;#039;&amp;#039; of the following before beginning any upgrade:  # &amp;#039;&amp;#039;&amp;#039;Back up every MDT&amp;#039;&amp;#039;&amp;#039; — &amp;lt;code&amp;gt;e2image -ra /dev/mdtdev /backup/md...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Purpose ==&lt;br /&gt;
&lt;br /&gt;
This page is a &amp;#039;&amp;#039;&amp;#039;condensed, actionable checklist&amp;#039;&amp;#039;&amp;#039; for Lustre upgrades. It does &amp;#039;&amp;#039;&amp;#039;not&amp;#039;&amp;#039;&amp;#039; replace the full upgrade procedure — see [[Upgrading to a New Version of Lustre]] for the authoritative step-by-step guide. Use this page as a quick reference before, during, and after an upgrade.&lt;br /&gt;
&lt;br /&gt;
== Pre-Upgrade Preparation ==&lt;br /&gt;
&lt;br /&gt;
Complete &amp;#039;&amp;#039;&amp;#039;all&amp;#039;&amp;#039;&amp;#039; of the following before beginning any upgrade:&lt;br /&gt;
&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Back up every MDT&amp;#039;&amp;#039;&amp;#039; — &amp;lt;code&amp;gt;e2image -ra /dev/mdtdev /backup/mdt0.img&amp;lt;/code&amp;gt; (ldiskfs) or ZFS snapshot. MDT data loss is unrecoverable.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Document current settings&amp;#039;&amp;#039;&amp;#039; — save output of &amp;lt;code&amp;gt;lctl get_param -R &amp;#039;*&amp;#039;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;lctl get_param osc.*.active&amp;lt;/code&amp;gt; on every server.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Record pool definitions&amp;#039;&amp;#039;&amp;#039; — &amp;lt;code&amp;gt;lctl pool_list fsname&amp;lt;/code&amp;gt; for every pool. Pools are destroyed by &amp;lt;code&amp;gt;--writeconf&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Read the Release Notes&amp;#039;&amp;#039;&amp;#039; for the target version. Note any required e2fsprogs or kernel version changes.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Check interoperability&amp;#039;&amp;#039;&amp;#039; — verify that client and server versions are within the supported interop matrix (see Release Notes).&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Test the upgrade&amp;#039;&amp;#039;&amp;#039; on a non-production system or VM first.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Notify users&amp;#039;&amp;#039;&amp;#039; — schedule a maintenance window and unmount all clients.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Verify backups&amp;#039;&amp;#039;&amp;#039; — confirm MDT backups are readable: &amp;lt;code&amp;gt;e2image -ra -I /backup/mdt0.img /dev/null&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Major Upgrade Checklist ==&lt;br /&gt;
&lt;br /&gt;
A &amp;#039;&amp;#039;major&amp;#039;&amp;#039; upgrade changes the Lustre feature release (e.g., 2.14 → 2.16). This typically requires downtime.&lt;br /&gt;
&lt;br /&gt;
# ☐ Unmount all clients.&lt;br /&gt;
# ☐ Stop all copytools and HSM coordinators.&lt;br /&gt;
# ☐ Unmount all OSTs, then MDTs, then the MGS (reverse mount order).&lt;br /&gt;
# ☐ Install new Lustre packages on &amp;#039;&amp;#039;&amp;#039;all&amp;#039;&amp;#039;&amp;#039; servers (MGS, MDS, OSS).&lt;br /&gt;
# ☐ If Release Notes require it, run &amp;lt;code&amp;gt;tunefs.lustre --writeconf&amp;lt;/code&amp;gt; on the MGS device. &amp;#039;&amp;#039;&amp;#039;Warning:&amp;#039;&amp;#039;&amp;#039; this erases all &amp;lt;code&amp;gt;conf_param&amp;lt;/code&amp;gt; settings and pool definitions. Re-apply them afterward.&lt;br /&gt;
# ☐ Mount the MGS first.&lt;br /&gt;
# ☐ Re-apply any &amp;lt;code&amp;gt;conf_param&amp;lt;/code&amp;gt; settings that were cleared by &amp;lt;code&amp;gt;--writeconf&amp;lt;/code&amp;gt; (use the backup from pre-upgrade step 2).&lt;br /&gt;
# ☐ Re-create OST pools if they were destroyed (use the backup from pre-upgrade step 3).&lt;br /&gt;
# ☐ Mount MDTs in index order (MDT0000, MDT0001, …).&lt;br /&gt;
# ☐ Mount all OSTs.&lt;br /&gt;
# ☐ Install new Lustre client packages on all clients.&lt;br /&gt;
# ☐ Mount clients.&lt;br /&gt;
# ☐ Run post-upgrade verification (see below).&lt;br /&gt;
&lt;br /&gt;
== Minor / Rolling Upgrade Checklist ==&lt;br /&gt;
&lt;br /&gt;
A &amp;#039;&amp;#039;minor&amp;#039;&amp;#039; upgrade stays within the same feature release (e.g., 2.14.0 → 2.14.2). Rolling upgrades are often possible — check the Release Notes.&lt;br /&gt;
&lt;br /&gt;
# ☐ Upgrade and restart one OSS at a time. Clients will reconnect automatically.&lt;br /&gt;
# ☐ After all OSSes are upgraded, upgrade the MDS (one at a time for DNE).&lt;br /&gt;
# ☐ Upgrade the MGS last (if separate from MDS).&lt;br /&gt;
# ☐ Upgrade clients in batches. Unmount, install new packages, remount.&lt;br /&gt;
# ☐ &amp;lt;code&amp;gt;--writeconf&amp;lt;/code&amp;gt; is typically &amp;#039;&amp;#039;&amp;#039;not&amp;#039;&amp;#039;&amp;#039; needed for minor upgrades. Confirm in Release Notes.&lt;br /&gt;
# ☐ Run post-upgrade verification.&lt;br /&gt;
&lt;br /&gt;
== Post-Upgrade Verification ==&lt;br /&gt;
&lt;br /&gt;
Run these checks on every server and a sample of clients:&lt;br /&gt;
&lt;br /&gt;
 # On any client — file system health&lt;br /&gt;
 lfs df&lt;br /&gt;
 lctl get_param version&lt;br /&gt;
 lctl get_param health_check        # must return &amp;quot;healthy&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 # On each server — target status&lt;br /&gt;
 lctl get_param obdfilter.*.recovery_status   # OSTs&lt;br /&gt;
 lctl get_param mdt.*.recovery_status         # MDTs&lt;br /&gt;
&lt;br /&gt;
 # Functional smoke test&lt;br /&gt;
 dd if=/dev/zero of=/mnt/lustre/upgrade_test bs=1M count=10&lt;br /&gt;
 md5sum /mnt/lustre/upgrade_test&lt;br /&gt;
 rm /mnt/lustre/upgrade_test&lt;br /&gt;
&lt;br /&gt;
== Optional Feature Enablement ==&lt;br /&gt;
&lt;br /&gt;
Some features must be explicitly enabled after upgrading. They may be &amp;#039;&amp;#039;&amp;#039;irreversible&amp;#039;&amp;#039;&amp;#039; — read the notes carefully.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Feature !! Enable Command !! Reversible? !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Project quotas || &amp;lt;code&amp;gt;tune2fs -O project /dev/mdtdev&amp;lt;/code&amp;gt; then &amp;lt;code&amp;gt;tunefs.lustre --enable-project /dev/mdtdev&amp;lt;/code&amp;gt; || &amp;#039;&amp;#039;&amp;#039;No&amp;#039;&amp;#039;&amp;#039; || Cannot be disabled once enabled. Requires ldiskfs reformat to remove.&lt;br /&gt;
|-&lt;br /&gt;
| Large xattr / ea_inode || &amp;lt;code&amp;gt;tune2fs -O ea_inode /dev/ostdev&amp;lt;/code&amp;gt; || &amp;#039;&amp;#039;&amp;#039;No&amp;#039;&amp;#039;&amp;#039; || Needed for &amp;gt;255 stripes or large ACLs. Older clients cannot read ea_inode data.&lt;br /&gt;
|-&lt;br /&gt;
| index_in_idif || &amp;lt;code&amp;gt;tunefs.lustre --param ost.index_in_idif=1 /dev/ostdev&amp;lt;/code&amp;gt; || &amp;#039;&amp;#039;&amp;#039;No&amp;#039;&amp;#039;&amp;#039; || Embeds OST index in FIDs. Required to support &amp;gt;65535 OSTs.&lt;br /&gt;
|-&lt;br /&gt;
| DNE (remote dirs) || &amp;lt;code&amp;gt;lfs mkdir -i 1 /mnt/lustre/remote_dir&amp;lt;/code&amp;gt; || Per-directory || Striped/remote directories require all MDTs to be at the new version.&lt;br /&gt;
|-&lt;br /&gt;
| Overstriping || &amp;lt;code&amp;gt;lfs setstripe -C &amp;#039;&amp;#039;count&amp;#039;&amp;#039; /mnt/lustre/dir&amp;lt;/code&amp;gt; || Per-file || Allows stripe count &amp;gt; OST count. Available since 2.14.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Common Gotchas ==&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;--writeconf&amp;lt;/code&amp;gt; destroys OST pools and &amp;lt;code&amp;gt;conf_param&amp;lt;/code&amp;gt; settings.&amp;#039;&amp;#039;&amp;#039; Always back up pool definitions and parameter settings before running it. Re-apply them immediately after mounting the MGS.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Project quota enablement is irreversible.&amp;#039;&amp;#039;&amp;#039; Once enabled on an MDT or OST, it cannot be disabled without reformatting the target.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Mount order matters after upgrade.&amp;#039;&amp;#039;&amp;#039; Always mount MGS → MDTs (in index order) → OSTs. Mounting out of order can cause configuration replay errors.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Client/server version skew.&amp;#039;&amp;#039;&amp;#039; Lustre supports N−1 interop (e.g., 2.14 clients with 2.16 servers). Wider gaps are unsupported and may cause silent data corruption.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;SELinux contexts.&amp;#039;&amp;#039;&amp;#039; New Lustre packages may reset SELinux file contexts. Run &amp;lt;code&amp;gt;restorecon -Rv /usr/lib64/lustre/&amp;lt;/code&amp;gt; if services fail to start with permission errors.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;LNET configuration.&amp;#039;&amp;#039;&amp;#039; New LNET module parameters or DLC settings may not carry forward. Verify &amp;lt;code&amp;gt;/etc/lnet.conf&amp;lt;/code&amp;gt; is correct before starting LNET after upgrade.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Upgrading to a New Version of Lustre]] — Full step-by-step upgrade procedure&lt;br /&gt;
* [[Lustre Common Mistakes]] — Frequently encountered pitfalls&lt;br /&gt;
&lt;br /&gt;
[[Category:Administration]]&lt;br /&gt;
[[Category:Upgrades]]&lt;br /&gt;
[[Category:Checklists]]&lt;/div&gt;</summary>
		<author><name>Elliswilson</name></author>
	</entry>
</feed>