Whamcloud - gitweb
LUDOC-11 Misc cleanups of examples and text
[doc/manual.git] / ManagingFileSystemIO.xml
1 <?xml version='1.0' encoding='UTF-8'?>
2 <!-- This document was created with Syntext Serna Free. --><chapter xmlns="http://docbook.org/ns/docbook" xmlns:xl="http://www.w3.org/1999/xlink" version="5.0" xml:lang="en-US" xml:id="managingfilesystemio">
3   <title xml:id="managingfilesystemio.title">Managing the File System and I/O</title>
4   <para>This chapter describes file striping and I/O options, and includes the following sections:</para>
5   <itemizedlist>
6     <listitem>
7       <para><xref linkend="dbdoclet.50438211_17536"/></para>
8     </listitem>
9     <listitem>
10       <para><xref linkend="dbdoclet.50438211_75549"/></para>
11     </listitem>
12     <listitem>
13       <para><xref linkend="dbdoclet.50438211_11204"/></para>
14     </listitem>
15     <listitem>
16       <para><xref linkend="dbdoclet.50438211_80295"/></para>
17     </listitem>
18     <listitem>
19       <para><xref linkend="dbdoclet.50438211_61024"/></para>
20     </listitem>
21   </itemizedlist>
22   <section xml:id="dbdoclet.50438211_17536">
23       <title><indexterm><primary>I/O</primary></indexterm>
24           <indexterm><primary>I/O</primary><secondary>full OSTs</secondary></indexterm>
25           Handling Full OSTs</title>
26     <para>Sometimes a Lustre file system becomes unbalanced, often due to incorrectly-specified stripe settings, or when very large files are created that are not striped over all of the OSTs. If an OST is full and an attempt is made to write more information to the file system, an error occurs. The procedures below describe how to handle a full OST.</para>
27     <para>The MDS will normally handle space balancing automatically at file creation time, and this procedure is normally not needed, but may be desirable in certain circumstances (e.g. when creating very large files that would consume more than the total free space of the full OSTs).</para>
28     <section remap="h3">
29       <title><indexterm><primary>I/O</primary><secondary>OST space usage</secondary></indexterm>Checking OST Space Usage</title>
30       <para>The example below shows an unbalanced file system:</para>
31       <screen>root@LustreClient01 ~]# lfs df -h
32 UUID                       bytes           Used            Available       \
33 Use%            Mounted on
34 lustre-MDT0000_UUID        4.4G            214.5M          3.9G            \
35 4%              /mnt/lustre[MDT:0]
36 lustre-OST0000_UUID        2.0G            751.3M          1.1G            \
37 37%             /mnt/lustre[OST:0]
38 lustre-OST0001_UUID        2.0G            755.3M          1.1G            \
39 37%             /mnt/lustre[OST:1]
40 lustre-OST0002_UUID        2.0G            1.7G            155.1M          \
41 86%             /mnt/lustre[OST:2] &lt;-
42 lustre-OST0003_UUID        2.0G            751.3M          1.1G            \
43 37%             /mnt/lustre[OST:3]
44 lustre-OST0004_UUID        2.0G            747.3M          1.1G            \
45 37%             /mnt/lustre[OST:4]
46 lustre-OST0005_UUID        2.0G            743.3M          1.1G            \
47 36%             /mnt/lustre[OST:5]
48  
49 filesystem summary:        11.8G           5.4G            5.8G            \
50 45%             /mnt/lustre</screen>
51       <para>In this case, OST:2 is almost full and when an attempt is made to write additional information to the file system (even with uniform striping over all the OSTs), the write command fails as follows:</para>
52       <screen>[root@LustreClient01 ~]# lfs setstripe /mnt/lustre 4M 0 -1
53 [root@LustreClient01 ~]# dd if=/dev/zero of=/mnt/lustre/test_3 \ bs=10M cou\
54 nt=100
55 dd: writing `/mnt/lustre/test_3&apos;: No space left on device
56 98+0 records in
57 97+0 records out
58 1017192448 bytes (1.0 GB) copied, 23.2411 seconds, 43.8 MB/s</screen>
59     </section>
60     <section remap="h3">
61       <title><indexterm><primary>I/O</primary><secondary>taking OST offline</secondary></indexterm>Taking a Full OST Offline</title>
62       <para>To avoid running out of space in the file system, if the OST usage is imbalanced and one or more OSTs are close to being full while there are others that have a lot of space, the full OSTs may optionally be deactivated at the MDS to prevent the MDS from allocating new objects there.</para>
63       <orderedlist>
64         <listitem>
65           <para>Log into the MDS server:</para>
66           <screen>[root@LustreClient01 ~]# ssh root@192.168.0.10 
67 root@192.168.0.10&apos;s password: 
68 Last login: Wed Nov 26 13:35:12 2008 from 192.168.0.6</screen>
69         </listitem>
70         <listitem>
71           <para>Use the <literal>lctl dl</literal> command to show the status of all file system components:</para>
72           <screen>[root@mds ~]# lctl dl 
73 0 UP mgs MGS MGS 9 
74 1 UP mgc MGC192.168.0.10@tcp e384bb0e-680b-ce25-7bc9-81655dd1e813 5
75 2 UP mdt MDS MDS_uuid 3
76 3 UP lov lustre-mdtlov lustre-mdtlov_UUID 4
77 4 UP mds lustre-MDT0000 lustre-MDT0000_UUID 5
78 5 UP osc lustre-OST0000-osc lustre-mdtlov_UUID 5
79 6 UP osc lustre-OST0001-osc lustre-mdtlov_UUID 5
80 7 UP osc lustre-OST0002-osc lustre-mdtlov_UUID 5
81 8 UP osc lustre-OST0003-osc lustre-mdtlov_UUID 5
82 9 UP osc lustre-OST0004-osc lustre-mdtlov_UUID 5
83 10 UP osc lustre-OST0005-osc lustre-mdtlov_UUID 5</screen>
84         </listitem>
85         <listitem>
86           <para>Use <literal>lctl</literal> deactivate to take the full OST offline:</para>
87           <screen>[root@mds ~]# lctl --device 7 deactivate</screen>
88         </listitem>
89         <listitem>
90           <para>Display the status of the file system components:</para>
91           <screen>[root@mds ~]# lctl dl 
92 0 UP mgs MGS MGS 9
93 1 UP mgc MGC192.168.0.10@tcp e384bb0e-680b-ce25-7bc9-81655dd1e813 5
94 2 UP mdt MDS MDS_uuid 3
95 3 UP lov lustre-mdtlov lustre-mdtlov_UUID 4
96 4 UP mds lustre-MDT0000 lustre-MDT0000_UUID 5
97 5 UP osc lustre-OST0000-osc lustre-mdtlov_UUID 5
98 6 UP osc lustre-OST0001-osc lustre-mdtlov_UUID 5
99 7 IN osc lustre-OST0002-osc lustre-mdtlov_UUID 5
100 8 UP osc lustre-OST0003-osc lustre-mdtlov_UUID 5
101 9 UP osc lustre-OST0004-osc lustre-mdtlov_UUID 5
102 10 UP osc lustre-OST0005-osc lustre-mdtlov_UUID 5</screen>
103         </listitem>
104       </orderedlist>
105       <para>The device list shows that OST0002 is now inactive. When new files are created in the file system, they will only use the remaining active OSTs. Either manual space rebalancing can be done by migrating data to other OSTs, as shown in the next section, or normal file deletion and creation can be allowed to passively rebalance the space usage.</para>
106     </section>
107     <section remap="h3">
108         <title>
109             <indexterm><primary>I/O</primary><secondary>migrating data</secondary></indexterm>
110             <indexterm><primary>maintance</primary><secondary>full OSTs</secondary></indexterm>
111             Migrating Data within a File System</title>
112       <para>As stripes cannot be moved within the file system, data must be migrated manually by copying and renaming the file, removing the original file, and renaming the new file with the original file name. The simplest way to do this is to use the <literal>lfs_migrate</literal> command (see <xref linkend="dbdoclet.50438206_42260"/>). However, the steps for migrating a file by hand are also shown here for reference.</para>
113       <orderedlist>
114         <listitem>
115           <para>Identify the file(s) to be moved.</para>
116           <para>In the example below, output from the <literal>getstripe</literal> command indicates that the file <literal>test_2</literal> is located entirely on OST2:</para>
117           <screen>[client]# lfs getstripe /mnt/lustre/test_2
118 /mnt/lustre/test_2
119 obdidx     objid   objid   group
120      2      8     0x8       0</screen>
121         </listitem>
122         <listitem>
123           <para>To move single object(s), create a new copy and remove the original. Enter:</para>
124           <screen>[client]# cp -a /mnt/lustre/test_2 /mnt/lustre/test_2.tmp
125 [client]# mv /mnt/lustre/test_2.tmp /mnt/lustre/test_2</screen>
126         </listitem>
127         <listitem>
128           <para>To migrate large files from one or more OSTs, enter:</para>
129           <screen>[client]# lfs find --ost {OST_UUID} -size +1G | lfs_migrate -y</screen>
130         </listitem>
131         <listitem>
132           <para>Check the file system balance.</para>
133           <para>The <literal>df</literal> output in the example below shows a more balanced system compared to the <literal>df</literal> output in the example in <xref linkend="dbdoclet.50438211_17536"/>.</para>
134           <screen>[client]# lfs df -h
135 UUID                 bytes         Used            Available       Use%    \
136         Mounted on
137 lustre-MDT0000_UUID   4.4G         214.5M          3.9G            4%      \
138         /mnt/lustre[MDT:0]
139 lustre-OST0000_UUID   2.0G         1.3G            598.1M          65%     \
140         /mnt/lustre[OST:0]
141 lustre-OST0001_UUID   2.0G         1.3G            594.1M          65%     \
142         /mnt/lustre[OST:1]
143 lustre-OST0002_UUID   2.0G         913.4M          1000.0M         45%     \
144         /mnt/lustre[OST:2]
145 lustre-OST0003_UUID   2.0G         1.3G            602.1M          65%     \
146         /mnt/lustre[OST:3]
147 lustre-OST0004_UUID   2.0G         1.3G            606.1M          64%     \
148         /mnt/lustre[OST:4]
149 lustre-OST0005_UUID   2.0G         1.3G            610.1M          64%     \
150         /mnt/lustre[OST:5]
151  
152 filesystem summary:  11.8G 7.3G            3.9G    61%                     \
153 /mnt/lustre</screen>
154         </listitem>
155       </orderedlist>
156     </section>
157     <section remap="h3">
158         <title>
159             <indexterm><primary>I/O</primary><secondary>bringing OST online</secondary></indexterm>
160             <indexterm><primary>maintance</primary><secondary>bringing OST online</secondary></indexterm>
161             
162             Returning an Inactive OST Back Online</title>
163       <para>Once the deactivated OST(s) no longer are severely imbalanced, due to either active or passive data redistribution, they should be reactivated so they will again have new files allocated on them.</para>
164       <screen>[mds]# lctl --device 7 activate
165 [mds]# lctl dl
166   0 UP mgs MGS MGS 9
167   1 UP mgc MGC192.168.0.10@tcp e384bb0e-680b-ce25-7bc9-816dd1e813 5
168   2 UP mdt MDS MDS_uuid 3
169   3 UP lov lustre-mdtlov lustre-mdtlov_UUID 4
170   4 UP mds lustre-MDT0000 lustre-MDT0000_UUID 5
171   5 UP osc lustre-OST0000-osc lustre-mdtlov_UUID 5
172   6 UP osc lustre-OST0001-osc lustre-mdtlov_UUID 5
173   7 UP osc lustre-OST0002-osc lustre-mdtlov_UUID 5
174   8 UP osc lustre-OST0003-osc lustre-mdtlov_UUID 5
175   9 UP osc lustre-OST0004-osc lustre-mdtlov_UUID 5
176  10 UP osc lustre-OST0005-osc lustre-mdtlov_UUID
177 </screen>
178     </section>
179   </section>
180   <section xml:id="dbdoclet.50438211_75549">
181       <title>
182             <indexterm><primary>I/O</primary><secondary>pools</secondary></indexterm>
183             <indexterm><primary>maintance</primary><secondary>pools</secondary></indexterm>
184             <indexterm><primary>pools</primary></indexterm>
185           Creating and Managing OST Pools</title>
186     <para>The OST pools feature enables users to group OSTs together to make object placement more flexible. A &apos;pool&apos; is the name associated with an arbitrary subset of OSTs in a Lustre cluster.</para>
187     <para>OST pools follow these rules:</para>
188     <itemizedlist>
189       <listitem>
190         <para>An OST can be a member of multiple pools.</para>
191       </listitem>
192       <listitem>
193         <para>No ordering of OSTs in a pool is defined or implied.</para>
194       </listitem>
195       <listitem>
196         <para>Stripe allocation within a pool follows the same rules as the normal stripe allocator.</para>
197       </listitem>
198       <listitem>
199         <para>OST membership in a pool is flexible, and can change over time.</para>
200       </listitem>
201     </itemizedlist>
202     <para>When an OST pool is defined, it can be used to allocate files. When file or directory striping is set to a pool, only OSTs in the pool are candidates for striping. If a stripe_index is specified which refers to an OST that is not a member of the pool, an error is returned.</para>
203     <para>OST pools are used only at file creation. If the definition of a pool changes (an OST is added or removed or the pool is destroyed), already-created files are not affected.</para>
204     <note>
205       <para>An error (<literal>EINVAL</literal>) results if you create a file using an empty pool.</para>
206     </note>
207     <note>
208       <para>If a directory has pool striping set and the pool is subsequently removed, the new files created in this directory have the (non-pool) default striping pattern for that directory applied and no error is returned.</para>
209     </note>
210     <section remap="h3">
211       <title>Working with OST Pools</title>
212       <para>OST pools are defined in the configuration log on the MGS. Use the lctl command to:</para>
213       <itemizedlist>
214         <listitem>
215           <para>Create/destroy a pool</para>
216         </listitem>
217         <listitem>
218           <para>Add/remove OSTs in a pool</para>
219         </listitem>
220         <listitem>
221           <para>List pools and OSTs in a specific pool</para>
222         </listitem>
223       </itemizedlist>
224       <para>The lctl command MUST be run on the MGS. Another requirement for managing OST pools is to either have the MDT and MGS on the same node or have a Lustre client mounted on the MGS node, if it is separate from the MDS. This is needed to validate the pool commands being run are correct.</para>
225       <caution>
226         <para>Running the <literal>writeconf</literal> command on the MDS erases all pools information (as well as any other parameters set using <literal>lctl conf_param</literal>). We recommend that the pools definitions (and <literal>conf_param</literal> settings) be executed using a script, so they can be reproduced easily after a <literal>writeconf</literal> is performed.</para>
227       </caution>
228       <para>To create a new pool, run:</para>
229       <screen>lctl pool_new &lt;fsname&gt;.&lt;poolname&gt;</screen>
230       <note>
231         <para>The pool name is an ASCII string up to 16 characters.</para>
232       </note>
233       <para>To add the named OST to a pool, run:</para>
234       <screen>lctl pool_add &lt;fsname&gt;.&lt;poolname&gt; &lt;ost_list&gt;</screen>
235       <para>Where:</para>
236       <itemizedlist>
237         <listitem>
238           <para><literal>&lt;ost_list&gt; is &lt;fsname-&gt;OST&lt;index_range&gt;[_UUID]</literal></para>
239         </listitem>
240         <listitem>
241           <para><literal>&lt;index_range&gt; is &lt;ost_index_start&gt;-&lt;ost_index_end&gt;[,&lt;index_range&gt;]</literal> or <literal>&lt;ost_index_start&gt;-&lt;ost_index_end&gt;/&lt;step&gt;</literal></para>
242         </listitem>
243       </itemizedlist>
244       <para>If the leading <literal>&lt;fsname&gt;</literal> and/or ending <literal>_UUID</literal> are missing, they are automatically added.</para>
245       <para> For example, to add even-numbered OSTs to pool1 on file system <literal>lustre</literal>, run a single command (add) to add many OSTs to the pool at one time:</para>
246       <para><screen>lctl pool_add lustre.pool1 OST[0-10/2]</screen></para>
247       <note>
248         <para>Each time an OST is added to a pool, a new <literal>llog</literal> configuration record is created. For convenience, you can run a single command.</para>
249       </note>
250       <para>To remove a named OST from a pool, run:</para>
251       <screen>lctl pool_remove &lt;fsname&gt;.&lt;poolname&gt; &lt;ost_list&gt;</screen>
252       <para>To destroy a pool, run:</para>
253       <screen>lctl pool_destroy &lt;fsname&gt;.&lt;poolname&gt;</screen>
254       <note>
255         <para>All OSTs must be removed from a pool before it can be destroyed.</para>
256       </note>
257       <para>To list pools in the named file system, run:</para>
258       <screen>lctl pool_list &lt;fsname&gt; | &lt;pathname&gt;</screen>
259       <para>To list OSTs in a named pool, run:</para>
260       <screen>lctl pool_list &lt;fsname&gt;.&lt;poolname&gt;</screen>
261       <section remap="h4">
262         <title>Using the lfs Command with OST Pools</title>
263         <para>Several lfs commands can be run with OST pools. Use the <literal>lfs setstripe</literal> command to associate a directory with an OST pool. This causes all new regular files and directories in the directory to be created in the pool. The lfs command can be used to list pools in a file system and OSTs in a named pool.</para>
264         <para>To associate a directory with a pool, so all new files and directories will be created in the pool, run:</para>
265         <screen>lfs setstripe --pool|-p pool_name &lt;filename|dirname&gt; </screen>
266         <para>To set striping patterns, run:</para>
267         <screen>lfs setstripe        [--size|-s stripe_size] [--offset|-o start_ost]
268            [--count|-c stripe_count] [--pool|-p pool_name]
269            &lt;dir|filename&gt;</screen>
270         <note>
271           <para>If you specify striping with an invalid pool name, because the pool does not exist or the pool name was mistyped, <literal>lfs setstripe</literal> returns an error. Run <literal>lfs pool_list</literal> to make sure the pool exists and the pool name is entered correctly.</para>
272         </note>
273         <note>
274           <para>The <literal>--pool</literal> option for lfs setstripe is compatible with other modifiers. For example, you can set striping on a directory to use an explicit starting index.</para>
275         </note>
276       </section>
277     </section>
278     <section remap="h3">
279       <title><indexterm><primary>pools</primary><secondary>usage tips</secondary></indexterm>Tips for Using OST Pools</title>
280       <para>Here are several suggestions for using OST pools.</para>
281       <itemizedlist>
282         <listitem>
283           <para>A directory or file can be given an extended attribute (EA), that restricts striping to a pool.</para>
284         </listitem>
285         <listitem>
286           <para>Pools can be used to group OSTs with the same technology or performance (slower or faster), or that are preferred for certain jobs. Examples are SATA OSTs versus SAS OSTs or remote OSTs versus local OSTs.</para>
287         </listitem>
288         <listitem>
289           <para>A file created in an OST pool tracks the pool by keeping the pool name in the file LOV EA.</para>
290         </listitem>
291       </itemizedlist>
292     </section>
293   </section>
294   <section xml:id="dbdoclet.50438211_11204">
295     <title><indexterm><primary>I/O</primary><secondary>adding an OST</secondary></indexterm>Adding an OST to a Lustre File System</title>
296     <para>To add an OST to existing Lustre file system:</para>
297     <orderedlist>
298       <listitem>
299         <para>Add a new OST by passing on the following commands, run:</para>
300         <screen>$ mkfs.lustre --fsname=spfs --mgsnode=mds16@tcp0 --ost --index=12 /dev/sda
301 $ mkdir -p /mnt/test/ost12
302 $ mount -t lustre /dev/sda /mnt/test/ost12</screen>
303       </listitem>
304       <listitem>
305         <para>Migrate the data (possibly).</para>
306         <para>The file system is quite unbalanced when new empty OSTs are added. New file creations are automatically balanced. If this is a scratch file system or files are pruned at a regular interval, then no further work may be needed. Files existing prior to the expansion can be rebalanced with an in-place copy, which can be done with a simple script.</para>
307         <para>The basic method is to copy existing files to a temporary file, then move the temp file over the old one. This should not be attempted with files which are currently being written to by users or applications. This operation redistributes the stripes over the entire set of OSTs.</para>
308         <para>A very clever migration script would do the following:</para>
309         <itemizedlist>
310           <listitem>
311             <para> Examine the current distribution of data.</para>
312           </listitem>
313           <listitem>
314             <para> Calculate how much data should move from each full OST to the empty ones.</para>
315           </listitem>
316           <listitem>
317             <para> Search for files on a given full OST (using <literal>lfs getstripe</literal>).</para>
318           </listitem>
319           <listitem>
320             <para> Force the new destination OST (using <literal>lfs setstripe</literal>).</para>
321           </listitem>
322           <listitem>
323             <para> Copy only enough files to address the imbalance.</para>
324           </listitem>
325         </itemizedlist>
326       </listitem>
327     </orderedlist>
328     <para>If a Lustre administrator wants to explore this approach further, per-OST disk-usage statistics can be found under <literal>/proc/fs/lustre/osc/*/rpc_stats</literal></para>
329   </section>
330   <section xml:id="dbdoclet.50438211_80295">
331     <title><indexterm><primary>I/O</primary><secondary>direct</secondary></indexterm>Performing Direct I/O</title>
332     <para>Lustre supports the <literal>O_DIRECT</literal> flag to open.</para>
333     <para>Applications using the <literal>read()</literal> and <literal>write()</literal> calls must supply buffers aligned on a page boundary (usually 4 K). If the alignment is not correct, the call returns <literal>-EINVAL</literal>. Direct I/O may help performance in cases where the client is doing a large amount of I/O and is CPU-bound (CPU utilization 100%).</para>
334     <section remap="h3">
335       <title>Making File System Objects Immutable</title>
336       <para>An immutable file or directory is one that cannot be modified, renamed or removed. To do this:</para>
337       <screen>chattr +i &lt;file&gt;</screen>
338       <para>To remove this flag, use <literal>chattr -i</literal></para>
339     </section>
340   </section>
341   <section xml:id="dbdoclet.50438211_61024">
342     <title>Other I/O Options</title>
343     <para>This section describes other I/O options, including checksums.</para>
344     <section remap="h3">
345       <title>Lustre Checksums</title>
346       <para>To guard against network data corruption, a Lustre client can perform two types of data checksums: in-memory (for data in client memory) and wire (for data sent over the network). For each checksum type, a 32-bit checksum of the data read or written on both the client and server is computed, to ensure that the data has not been corrupted in transit over the network. The <literal>ldiskfs</literal> backing file system does NOT do any persistent checksumming, so it does not detect corruption of data in the OST file system.</para>
347       <para>The checksumming feature is enabled, by default, on individual client nodes. If the client or OST detects a checksum mismatch, then an error is logged in the syslog of the form:</para>
348       <screen>LustreError: BAD WRITE CHECKSUM: changed in transit before arrival at OST: \
349 from 192.168.1.1@tcp inum 8991479/2386814769 object 1127239/0 extent [10240\
350 0-106495]</screen>
351       <para>If this happens, the client will re-read or re-write the affected data up to five times to get a good copy of the data over the network. If it is still not possible, then an I/O error is returned to the application.</para>
352       <para>To enable both types of checksums (in-memory and wire), run:</para>
353       <screen>lctl set_param llite.*.checksum_pages=1</screen>
354       <para>To disable both types of checksums (in-memory and wire), run:</para>
355       <screen>lctl set_param llite.*.checksum_pages=0</screen>
356       <para>To check the status of a wire checksum, run:</para>
357       <screen>lctl get_param osc.*.checksums</screen>
358       <section remap="h4">
359         <title>Changing Checksum Algorithms</title>
360         <para>By default, Lustre uses the adler32 checksum algorithm, because it is robust and has a lower impact on performance than crc32. The Lustre administrator can change the checksum algorithm via <literal>lctl get_param</literal>, depending on what is supported in the kernel.</para>
361         <para>To check which checksum algorithm is being used by Lustre, run:</para>
362         <screen>$ lctl get_param osc.*.checksum_type</screen>
363         <para>To change the wire checksum algorithm used by Lustre, run:</para>
364         <screen>$ lctl set_param osc.*.checksum_type=&lt;algorithm name&gt;</screen>
365         <note>
366           <para>The in-memory checksum always uses the adler32 algorithm, if available, and only falls back to crc32 if adler32 cannot be used.</para>
367         </note>
368         <para>In the following example, the <literal>lctl get_param</literal> command is used to determine that Lustre is using the adler32 checksum algorithm. Then the <literal>lctl set_param</literal> command is used to change the checksum algorithm to crc32. A second <literal>lctl get_param</literal> command confirms that the crc32 checksum algorithm is now in use.</para>
369         <screen>$ lctl get_param osc.*.checksum_type
370 osc.lustre-OST0000-osc-ffff81012b2c48e0.checksum_type=crc32 [adler]
371 $ lctl set_param osc.*.checksum_type=crc32
372 osc.lustre-OST0000-osc-ffff81012b2c48e0.checksum_type=crc32
373 $ lctl get_param osc.*.checksum_type
374 osc.lustre-OST0000-osc-ffff81012b2c48e0.checksum_type=[crc32] adler</screen>
375       </section>
376     </section>
377   </section>
378 </chapter>