Repository navigation
Expand file tree
/
Copy pathnetapp-tutorial21.html
More file actions
1355 lines (1221 loc) · 103 KB
/
Copy pathnetapp-tutorial21.html
File metadata and controls
1355 lines (1221 loc) · 103 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ONTAP Multi-Protocol, Storage Efficiency & Troubleshooting — Deep Dive Tutorial</title>
<script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
<style>
@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;600&family=Sora:wght@300;400;600;700;800&family=Inter:wght@300;400;500;600&display=swap');
:root {
--bg-primary:#0d1117;--bg-secondary:#161b22;--bg-card:#1c2333;
--accent-blue:#58a6ff;--accent-green:#3fb950;--accent-orange:#f78166;
--accent-purple:#bc8cff;--accent-yellow:#e3b341;--accent-teal:#39d3c3;
--text-primary:#e6edf3;--text-secondary:#8b949e;--text-muted:#6e7681;
--border:#30363d;--border-bright:#484f58;--sidebar-width:290px;
}
*{margin:0;padding:0;box-sizing:border-box}html{scroll-behavior:smooth}
body{font-family:'Inter',sans-serif;background:var(--bg-primary);color:var(--text-primary);display:flex;min-height:100vh}
#reading-progress{position:fixed;top:0;left:var(--sidebar-width);right:0;height:3px;background:linear-gradient(90deg,var(--accent-teal),var(--accent-blue),var(--accent-purple));transform-origin:left;transform:scaleX(0);z-index:999;transition:transform .1s linear}
.sidebar{width:var(--sidebar-width);background:var(--bg-secondary);border-right:1px solid var(--border);position:fixed;top:0;left:0;height:100vh;overflow-y:auto;z-index:100;display:flex;flex-direction:column}
.sidebar-header{padding:20px 16px;border-bottom:1px solid var(--border);background:var(--bg-secondary);position:sticky;top:0;z-index:10}
.sidebar-logo{display:flex;align-items:center;gap:10px;margin-bottom:4px}
.sidebar-logo .logo-icon{width:32px;height:32px;background:linear-gradient(135deg,var(--accent-purple),var(--accent-blue));border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:16px}
.sidebar-logo span{font-family:'Sora',sans-serif;font-weight:700;font-size:14px;color:var(--text-primary);letter-spacing:.5px}
.sidebar-subtitle{font-size:11px;color:var(--text-muted);padding-left:42px}
.toc-nav{padding:12px 0;flex:1}
.toc-section-label{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:1.2px;color:var(--text-muted);padding:12px 16px 6px}
.toc-link{display:flex;align-items:center;gap:8px;padding:7px 16px;font-size:12.5px;color:var(--text-secondary);text-decoration:none;transition:all .2s ease;border-left:2px solid transparent;line-height:1.4}
.toc-link:hover{background:var(--bg-card);color:var(--text-primary);border-left-color:var(--accent-purple)}
.toc-link.active{background:rgba(188,140,255,.1);color:var(--accent-purple);border-left-color:var(--accent-purple);font-weight:500}
.toc-link .toc-num{font-size:10px;font-weight:700;color:var(--text-muted);min-width:18px;font-family:'JetBrains Mono',monospace}
.toc-link.sub{padding-left:32px;font-size:12px}
.series-nav{padding:12px 16px;border-top:1px solid var(--border)}
.series-nav-title{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:1px;color:var(--text-muted);margin-bottom:8px}
.series-link{display:block;padding:5px 8px;font-size:11.5px;color:var(--text-secondary);text-decoration:none;border-radius:5px;transition:all .2s;margin-bottom:2px}
.series-link:hover{background:var(--bg-card);color:var(--accent-teal)}
.series-link.current{color:var(--accent-purple);font-weight:600}
.main-content{margin-left:var(--sidebar-width);flex:1;max-width:calc(100vw - var(--sidebar-width))}
.top-header{background:linear-gradient(135deg,#0d1117 0%,#0a0e1a 50%,#0d1117 100%);border-bottom:1px solid var(--border);padding:60px 60px 50px;position:relative;overflow:hidden}
.top-header::before{content:'';position:absolute;inset:0;background:radial-gradient(ellipse at 70% 50%,rgba(188,140,255,.07) 0%,transparent 60%),radial-gradient(ellipse at 20% 80%,rgba(88,166,255,.06) 0%,transparent 50%)}
.header-badge{display:inline-flex;align-items:center;gap:6px;background:rgba(188,140,255,.12);border:1px solid rgba(188,140,255,.3);border-radius:20px;padding:4px 14px;font-size:12px;color:var(--accent-purple);font-weight:500;margin-bottom:18px;font-family:'JetBrains Mono',monospace}
.main-title{font-family:'Sora',sans-serif;font-size:36px;font-weight:800;line-height:1.15;margin-bottom:16px;background:linear-gradient(135deg,#e6edf3 20%,#bc8cff 55%,#58a6ff 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;position:relative}
.header-desc{font-size:15px;color:var(--text-secondary);line-height:1.7;max-width:700px;position:relative}
.header-meta{display:flex;gap:24px;flex-wrap:wrap;margin-top:20px;position:relative}
.meta-chip{display:flex;align-items:center;gap:6px;font-size:12.5px;color:var(--text-secondary)}
.meta-chip .dot{width:8px;height:8px;border-radius:50%}
.prog-chips{display:flex;gap:8px;flex-wrap:wrap;margin-top:18px;position:relative}
.prog-chip{background:rgba(255,255,255,.04);border:1px solid var(--border);border-radius:6px;padding:3px 10px;font-size:11px;color:var(--text-muted);font-family:'JetBrains Mono',monospace}
.content-area{padding:40px 60px 80px;max-width:1020px}
.section{margin-bottom:64px;scroll-margin-top:30px}
.section-header{display:flex;align-items:flex-start;gap:16px;margin-bottom:24px;padding-bottom:16px;border-bottom:1px solid var(--border)}
.section-icon{width:44px;height:44px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:20px;flex-shrink:0;margin-top:2px}
.icon-teal{background:rgba(57,211,195,.15);border:1px solid rgba(57,211,195,.3)}
.icon-blue{background:rgba(88,166,255,.15);border:1px solid rgba(88,166,255,.3)}
.icon-green{background:rgba(63,185,80,.15);border:1px solid rgba(63,185,80,.3)}
.icon-orange{background:rgba(247,129,102,.15);border:1px solid rgba(247,129,102,.3)}
.icon-purple{background:rgba(188,140,255,.15);border:1px solid rgba(188,140,255,.3)}
.icon-yellow{background:rgba(227,179,65,.15);border:1px solid rgba(227,179,65,.3)}
.section-title-wrap h2{font-family:'Sora',sans-serif;font-size:24px;font-weight:700;color:var(--text-primary);line-height:1.2}
.section-title-wrap .section-num{font-size:11px;font-family:'JetBrains Mono',monospace;color:var(--text-muted);font-weight:400;margin-bottom:4px}
.card{background:var(--bg-card);border:1px solid var(--border);border-radius:12px;padding:24px;margin-bottom:20px;transition:border-color .2s}
.card:hover{border-color:var(--border-bright)}
.card-title{font-family:'Sora',sans-serif;font-weight:600;font-size:15px;color:var(--text-primary);margin-bottom:12px;display:flex;align-items:center;gap:8px}
p{font-size:14.5px;line-height:1.8;color:var(--text-secondary);margin-bottom:14px}
.callout{border-radius:10px;padding:16px 20px;margin:20px 0;display:flex;gap:14px;align-items:flex-start}
.callout-icon{font-size:18px;margin-top:1px;flex-shrink:0}
.callout-content{flex:1}
.callout-title{font-weight:600;font-size:13px;text-transform:uppercase;letter-spacing:.5px;margin-bottom:6px}
.callout-text{font-size:13.5px;line-height:1.7;color:var(--text-secondary)}
.callout.info{background:rgba(88,166,255,.08);border:1px solid rgba(88,166,255,.25)}.callout.info .callout-title{color:var(--accent-blue)}
.callout.success{background:rgba(63,185,80,.08);border:1px solid rgba(63,185,80,.25)}.callout.success .callout-title{color:var(--accent-green)}
.callout.warning{background:rgba(227,179,65,.08);border:1px solid rgba(227,179,65,.3)}.callout.warning .callout-title{color:var(--accent-yellow)}
.callout.danger{background:rgba(247,129,102,.08);border:1px solid rgba(247,129,102,.3)}.callout.danger .callout-title{color:var(--accent-orange)}
.callout.tip{background:rgba(188,140,255,.08);border:1px solid rgba(188,140,255,.25)}.callout.tip .callout-title{color:var(--accent-purple)}
.callout.teal{background:rgba(57,211,195,.08);border:1px solid rgba(57,211,195,.25)}.callout.teal .callout-title{color:var(--accent-teal)}
.code-block{background:#080c10;border:1px solid var(--border);border-radius:10px;overflow:hidden;margin:16px 0}
.code-header{background:var(--bg-secondary);border-bottom:1px solid var(--border);padding:8px 16px;display:flex;align-items:center;justify-content:space-between}
.code-lang{font-size:11px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.8px;font-family:'JetBrains Mono',monospace}
.code-dots{display:flex;gap:5px}.code-dots span{width:10px;height:10px;border-radius:50%}
.dot-red{background:#ff5f56}.dot-ylw{background:#ffbd2e}.dot-grn{background:#27c93f}
.code-body{padding:20px;font-size:12.5px;line-height:1.85;color:#79c0ff;overflow-x:auto;white-space:pre;font-family:'JetBrains Mono',monospace}
.code-body .cmd{color:#3fb950}.code-body .comment{color:#6e7681;font-style:italic}
.code-body .param{color:#ffa657}.code-body .value{color:#a5d6ff}
.code-body .output{color:#8b949e}.code-body .prompt{color:#e3b341}.code-body .hl{color:#39d3c3}
.spec-table{width:100%;border-collapse:collapse;margin:16px 0;font-size:13.5px}
.spec-table th{background:var(--bg-secondary);color:var(--text-secondary);font-weight:600;font-size:12px;text-transform:uppercase;letter-spacing:.5px;padding:10px 16px;text-align:left;border-bottom:2px solid var(--border)}
.spec-table td{padding:11px 16px;border-bottom:1px solid var(--border);color:var(--text-secondary);vertical-align:middle}
.spec-table tr:hover td{background:rgba(255,255,255,.02)}
.badge{display:inline-block;padding:2px 10px;border-radius:20px;font-size:11.5px;font-weight:600;font-family:'JetBrains Mono',monospace}
.badge-blue{background:rgba(88,166,255,.15);color:var(--accent-blue);border:1px solid rgba(88,166,255,.3)}
.badge-green{background:rgba(63,185,80,.15);color:var(--accent-green);border:1px solid rgba(63,185,80,.3)}
.badge-orange{background:rgba(247,129,102,.15);color:var(--accent-orange);border:1px solid rgba(247,129,102,.3)}
.badge-yellow{background:rgba(227,179,65,.15);color:var(--accent-yellow);border:1px solid rgba(227,179,65,.3)}
.badge-teal{background:rgba(57,211,195,.15);color:var(--accent-teal);border:1px solid rgba(57,211,195,.3)}
.badge-purple{background:rgba(188,140,255,.15);color:var(--accent-purple);border:1px solid rgba(188,140,255,.3)}
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin:16px 0}
.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin:16px 0}
.stat-card{background:var(--bg-card);border:1px solid var(--border);border-radius:10px;padding:20px;text-align:center}
.stat-num{font-family:'Sora',sans-serif;font-size:28px;font-weight:800;margin-bottom:4px}
.stat-label{font-size:12px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px}
.step-list{list-style:none;margin:12px 0}
.step-list li{display:flex;gap:12px;padding:10px 0;border-bottom:1px solid rgba(48,54,61,.5);font-size:13.5px;color:var(--text-secondary);line-height:1.6;align-items:flex-start}
.step-list li:last-child{border-bottom:none}
.step-num{width:22px;height:22px;border-radius:6px;background:rgba(188,140,255,.15);border:1px solid rgba(188,140,255,.3);color:var(--accent-purple);font-size:11px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:1px;font-family:'JetBrains Mono',monospace}
.bullet-list{list-style:none;margin:10px 0}
.bullet-list li{padding:6px 0 6px 20px;position:relative;font-size:13.5px;color:var(--text-secondary);line-height:1.6}
.bullet-list li::before{content:'▸';position:absolute;left:0;color:var(--accent-purple);font-size:11px;top:8px}
h3{font-family:'Sora',sans-serif;font-size:17px;font-weight:600;color:var(--text-primary);margin:24px 0 12px}
h4{font-family:'Sora',sans-serif;font-size:14px;font-weight:600;color:var(--accent-purple);margin:18px 0 8px;text-transform:uppercase;letter-spacing:.5px}
.diagram-wrap{background:var(--bg-card);border:1px solid var(--border);border-radius:12px;padding:24px;margin:20px 0;overflow-x:auto}
.diagram-caption{text-align:center;font-size:12px;color:var(--text-muted);margin-top:12px;font-style:italic}
.mermaid{display:flex;justify-content:center}
.svg-wrap{background:var(--bg-card);border:1px solid var(--border);border-radius:12px;padding:24px;margin:20px 0;overflow:hidden}
.quiz-card{background:var(--bg-card);border:1px solid var(--border);border-radius:12px;padding:22px;margin-bottom:16px}
.quiz-q{font-size:14px;font-weight:600;color:var(--text-primary);margin-bottom:12px}
.quiz-a{display:none;background:rgba(188,140,255,.06);border:1px solid rgba(188,140,255,.2);border-radius:8px;padding:14px 16px;margin-top:10px;font-size:13.5px;color:var(--text-secondary);line-height:1.7}
.quiz-btn{background:rgba(188,140,255,.1);border:1px solid rgba(188,140,255,.3);color:var(--accent-purple);border-radius:6px;padding:6px 14px;font-size:12px;cursor:pointer;font-family:'JetBrains Mono',monospace;transition:all .2s}
.quiz-btn:hover{background:rgba(188,140,255,.2)}
.author-card{background:linear-gradient(135deg,#161b22,#1c2333);border:1px solid var(--border);border-radius:16px;padding:32px;margin-top:40px;position:relative;overflow:hidden}
.author-card::before{content:'';position:absolute;top:-40px;right:-40px;width:180px;height:180px;background:radial-gradient(circle,rgba(188,140,255,.08),transparent 70%);border-radius:50%}
.author-avatar{font-size:48px;margin-bottom:12px}
.author-name{font-family:'Sora',sans-serif;font-size:22px;font-weight:700;color:var(--text-primary);margin-bottom:4px}
.author-title{font-size:13px;color:var(--accent-purple);margin-bottom:16px;font-family:'JetBrains Mono',monospace}
.author-bio{font-size:14px;color:var(--text-secondary);line-height:1.7;margin-bottom:20px}
.tech-badges{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:20px}
.tech-badge{background:rgba(188,140,255,.1);border:1px solid rgba(188,140,255,.25);color:var(--accent-purple);border-radius:20px;padding:3px 12px;font-size:12px;font-family:'JetBrains Mono',monospace}
.contact-link{display:inline-flex;align-items:center;gap:8px;background:rgba(188,140,255,.1);border:1px solid rgba(188,140,255,.3);color:var(--accent-purple);border-radius:8px;padding:8px 16px;font-size:13px;text-decoration:none;transition:all .2s;margin-bottom:20px}
.contact-link:hover{background:rgba(188,140,255,.2)}
.disclaimer{background:rgba(227,179,65,.06);border:1px solid rgba(227,179,65,.25);border-radius:10px;padding:16px 20px;margin-top:20px;font-size:12.5px;color:var(--text-muted);line-height:1.7}
@media(max-width:900px){.sidebar{transform:translateX(-100%)}.main-content{margin-left:0;max-width:100vw}.top-header{padding:30px 20px}.content-area{padding:20px}.grid-2,.grid-3{grid-template-columns:1fr}#reading-progress{left:0}}
</style>
</head>
<body>
<div id="reading-progress"></div>
<!-- SIDEBAR -->
<nav class="sidebar">
<div class="sidebar-header">
<div class="sidebar-logo">
<div class="logo-icon">🔀</div>
<span>ONTAP Deep Dive</span>
</div>
<div class="sidebar-subtitle">Multi-Protocol · Efficiency · Troubleshooting</div>
</div>
<div class="toc-nav">
<div class="toc-section-label">Multi-Protocol Access</div>
<a class="toc-link" href="#s1"><span class="toc-num">01</span>Multi-Protocol Overview</a>
<a class="toc-link sub" href="#s1"><span class="toc-num">↳</span>Security Style Selection</a>
<a class="toc-link sub" href="#s1"><span class="toc-num">↳</span>Unix UID / GID Concepts</a>
<a class="toc-link" href="#s2"><span class="toc-num">02</span>User Mapping — NTFS Volume</a>
<a class="toc-link sub" href="#s2"><span class="toc-num">↳</span>Unix-to-Windows Mapping</a>
<a class="toc-link sub" href="#s2"><span class="toc-num">↳</span>Group & Multi-User Mapping</a>
<a class="toc-link" href="#s3"><span class="toc-num">03</span>User Mapping — Unix Volume</a>
<a class="toc-link sub" href="#s3"><span class="toc-num">↳</span>Windows-to-Unix Mapping</a>
<div class="toc-section-label">Storage Efficiency</div>
<a class="toc-link" href="#s4"><span class="toc-num">04</span>Deduplication</a>
<a class="toc-link sub" href="#s4"><span class="toc-num">↳</span>Inline vs Post-Process</a>
<a class="toc-link sub" href="#s4"><span class="toc-num">↳</span>Cross-Volume Dedup</a>
<a class="toc-link" href="#s5"><span class="toc-num">05</span>Compression</a>
<a class="toc-link sub" href="#s5"><span class="toc-num">↳</span>Adaptive vs Secondary</a>
<a class="toc-link" href="#s6"><span class="toc-num">06</span>Compaction</a>
<a class="toc-link" href="#s7"><span class="toc-num">07</span>Configuring Efficiency</a>
<div class="toc-section-label">Management Tools</div>
<a class="toc-link" href="#s8"><span class="toc-num">08</span>ONTAP Tool Ecosystem</a>
<a class="toc-link sub" href="#s8"><span class="toc-num">↳</span>Active IQ Unified Manager</a>
<a class="toc-link sub" href="#s8"><span class="toc-num">↳</span>Workflow Automation (WFA)</a>
<a class="toc-link sub" href="#s8"><span class="toc-num">↳</span>OnCommand Insight (OCI)</a>
<div class="toc-section-label">Troubleshooting</div>
<a class="toc-link" href="#s9"><span class="toc-num">09</span>CIFS / SMB Troubleshooting</a>
<a class="toc-link" href="#s10"><span class="toc-num">10</span>NFS Troubleshooting</a>
<a class="toc-link" href="#s11"><span class="toc-num">11</span>SAN (iSCSI / FCP)</a>
<div class="toc-section-label">Reference</div>
<a class="toc-link" href="#s12"><span class="toc-num">12</span>CLI Quick Reference</a>
<a class="toc-link" href="#s13"><span class="toc-num">13</span>Interview Q&A</a>
<a class="toc-link" href="#author"><span class="toc-num">★</span>About the Author</a>
</div>
<div class="series-nav">
<div class="series-nav-title">ONTAP Tutorial Series</div>
<a class="series-link" href="#">📋 Series Index</a>
<a class="series-link current" href="#">▶ Multi-Protocol & Efficiency</a>
</div>
</nav>
<!-- MAIN -->
<div class="main-content">
<header class="top-header">
<div class="header-badge">🔀 ONTAP Tutorial · Multi-Protocol, Storage Efficiency & Troubleshooting</div>
<h1 class="main-title">ONTAP Multi-Protocol Access,<br>Storage Efficiency & Protocol Troubleshooting</h1>
<p class="header-desc">A hands-on technical guide covering multi-protocol volume configuration (NFS + CIFS on the same volume), Unix-to-Windows user identity mapping, storage efficiency techniques (deduplication, compression, compaction), ONTAP management tools ecosystem, and real-world protocol troubleshooting for storage engineers and architects.</p>
<div class="header-meta">
<div class="meta-chip"><span class="dot" style="background:var(--accent-purple)"></span>Multi-Protocol</div>
<div class="meta-chip"><span class="dot" style="background:var(--accent-teal)"></span>User Mapping</div>
<div class="meta-chip"><span class="dot" style="background:var(--accent-green)"></span>Storage Efficiency</div>
<div class="meta-chip"><span class="dot" style="background:var(--accent-orange)"></span>Troubleshooting</div>
</div>
<div class="prog-chips">
<span class="prog-chip">ONTAP 9.x</span>
<span class="prog-chip">CIFS / SMB</span>
<span class="prog-chip">NFS</span>
<span class="prog-chip">iSCSI</span>
<span class="prog-chip">FCP</span>
<span class="prog-chip">Deduplication</span>
<span class="prog-chip">Compression</span>
<span class="prog-chip">Active IQ UM</span>
<span class="prog-chip">WFA</span>
</div>
</header>
<div class="content-area">
<!-- ===== SECTION 1 ===== -->
<section class="section" id="s1">
<div class="section-header">
<div class="section-icon icon-purple">🔀</div>
<div class="section-title-wrap">
<div class="section-num">SECTION 01</div>
<h2>Multi-Protocol Volume Access — Concepts & Design</h2>
</div>
</div>
<p>In most environments, storage volumes are dedicated to a single protocol — a CIFS share for Windows clients or an NFS export for Linux servers. However, there are use cases where both Windows and Linux clients need simultaneous access to the <strong style="color:var(--text-primary)">same volume</strong>. This is called <em>multi-protocol access</em>, and it requires careful planning around security styles, identity mapping, and permission management.</p>
<h3>When Is Multi-Protocol Access Required?</h3>
<div class="grid-2">
<div class="card">
<div class="card-title">💼 Typical Use Case</div>
<p style="font-size:13.5px">A development team has both Windows workstations and Linux build servers that need to share a common project directory — without maintaining two separate copies of the data.</p>
</div>
<div class="card">
<div class="card-title">⚠️ Complexity Warning</div>
<p style="font-size:13.5px">Multi-protocol introduces cross-identity permission management. Without proper user mapping, users from one OS cannot access data created by users from the other OS.</p>
</div>
</div>
<!-- Architecture Diagram -->
<div class="svg-wrap">
<svg viewBox="0 0 820 260" xmlns="http://www.w3.org/2000/svg" style="width:100%;max-width:820px;display:block;margin:0 auto">
<!-- Windows Client -->
<rect x="20" y="80" width="140" height="100" rx="10" fill="#1c2333" stroke="#484f58" stroke-width="1.5"/>
<text x="90" y="108" text-anchor="middle" fill="#e6edf3" font-size="12" font-weight="700" font-family="Sora,sans-serif">Windows</text>
<text x="90" y="124" text-anchor="middle" fill="#8b949e" font-size="10" font-family="JetBrains Mono,monospace">win-srv-01</text>
<text x="90" y="152" text-anchor="middle" fill="#58a6ff" font-size="20">🖥️</text>
<text x="90" y="172" text-anchor="middle" fill="#8b949e" font-size="10" font-family="JetBrains Mono,monospace">AD User: corp\jdoe</text>
<!-- Arrow Windows to Volume -->
<defs>
<marker id="a1" markerWidth="9" markerHeight="7" refX="9" refY="3.5" orient="auto"><polygon points="0 0,9 3.5,0 7" fill="#58a6ff"/></marker>
<marker id="a2" markerWidth="9" markerHeight="7" refX="9" refY="3.5" orient="auto"><polygon points="0 0,9 3.5,0 7" fill="#3fb950"/></marker>
</defs>
<line x1="160" y1="120" x2="290" y2="120" stroke="#58a6ff" stroke-width="2" marker-end="url(#a1)"/>
<text x="225" y="110" text-anchor="middle" fill="#58a6ff" font-size="10" font-weight="600" font-family="Sora,sans-serif">CIFS / SMB</text>
<!-- Central Volume -->
<rect x="290" y="50" width="240" height="160" rx="14" fill="#1c2333" stroke="#bc8cff" stroke-width="2"/>
<text x="410" y="82" text-anchor="middle" fill="#e6edf3" font-size="13" font-weight="700" font-family="Sora,sans-serif">Multi-Protocol Volume</text>
<text x="410" y="99" text-anchor="middle" fill="#bc8cff" font-size="10" font-family="JetBrains Mono,monospace">Security Style: NTFS or Unix</text>
<rect x="315" y="110" width="190" height="30" rx="6" fill="rgba(88,166,255,.12)" stroke="rgba(88,166,255,.3)" stroke-width="1"/>
<text x="410" y="130" text-anchor="middle" fill="#58a6ff" font-size="11" font-family="JetBrains Mono,monospace">CIFS Share: \\storage\projects</text>
<rect x="315" y="148" width="190" height="30" rx="6" fill="rgba(63,185,80,.12)" stroke="rgba(63,185,80,.3)" stroke-width="1"/>
<text x="410" y="168" text-anchor="middle" fill="#3fb950" font-size="11" font-family="JetBrains Mono,monospace">NFS Export: /vol/projects</text>
<text x="410" y="196" text-anchor="middle" fill="#bc8cff" font-size="10" font-family="JetBrains Mono,monospace">User Mapping: corp\jdoe ↔ uid=2001</text>
<!-- Arrow Volume to Linux -->
<line x1="530" y1="130" x2="660" y2="130" stroke="#3fb950" stroke-width="2" marker-end="url(#a2)"/>
<text x="595" y="120" text-anchor="middle" fill="#3fb950" font-size="10" font-weight="600" font-family="Sora,sans-serif">NFS v3 / v4</text>
<!-- Linux Client -->
<rect x="660" y="80" width="140" height="100" rx="10" fill="#1c2333" stroke="#484f58" stroke-width="1.5"/>
<text x="730" y="108" text-anchor="middle" fill="#e6edf3" font-size="12" font-weight="700" font-family="Sora,sans-serif">Linux Server</text>
<text x="730" y="124" text-anchor="middle" fill="#8b949e" font-size="10" font-family="JetBrains Mono,monospace">lnx-app-01</text>
<text x="730" y="152" text-anchor="middle" fill="#3fb950" font-size="20">🐧</text>
<text x="730" y="172" text-anchor="middle" fill="#8b949e" font-size="10" font-family="JetBrains Mono,monospace">Unix User: uid=2001</text>
</svg>
<div class="diagram-caption">Figure 1 — Multi-protocol volume architecture: a single ONTAP volume serving both Windows (CIFS) and Linux (NFS) clients simultaneously through user identity mapping</div>
</div>
<h3>Choosing the Right Security Style</h3>
<p>The security style of a volume determines <strong style="color:var(--text-primary)">from which side permissions are managed</strong>. This is one of the most important design decisions in multi-protocol deployments and should be based on client input — specifically, which team will own permission management.</p>
<table class="spec-table">
<thead>
<tr><th>Security Style</th><th>Permission Management</th><th>Best For</th><th>Limitation</th></tr>
</thead>
<tbody>
<tr>
<td><span class="badge badge-blue">NTFS</span></td>
<td>Windows side only (via ACLs)</td>
<td>Environments where Windows teams manage ACLs</td>
<td>Unix/Linux cannot modify permissions</td>
</tr>
<tr>
<td><span class="badge badge-green">Unix</span></td>
<td>Linux/Unix side only (via chmod/chown)</td>
<td>Environments where Linux admins own permissions</td>
<td>Windows ACL changes are ignored</td>
</tr>
<tr>
<td><span class="badge badge-yellow">Mixed</span></td>
<td>Determined per file by creator's protocol</td>
<td>Flexible but complex environments</td>
<td>Harder to predict/audit permissions</td>
</tr>
</tbody>
</table>
<div class="callout tip">
<div class="callout-icon">💡</div>
<div class="callout-content">
<div class="callout-title">Architect's Tip — Ask Before You Deploy</div>
<div class="callout-text">Before creating a multi-protocol volume, always ask the customer: <em>"Which team will be responsible for managing file permissions — Windows admins or Linux admins?"</em> The answer directly dictates your security style choice. Changing the security style post-deployment is painful and disruptive.</div>
</div>
</div>
<h3>Required Information Before Configuration</h3>
<p>Gather the following details from the client's Linux/Unix team before beginning any multi-protocol volume setup:</p>
<div class="card">
<div class="card-title">📋 Pre-Configuration Checklist</div>
<ul class="bullet-list">
<li><strong style="color:var(--text-primary)">Unix Username</strong> — The local OS-level username on the Linux host</li>
<li><strong style="color:var(--text-primary)">UID (User ID)</strong> — Numeric identifier for the Unix user (e.g., 2001). Obtained via <code style="color:var(--accent-teal);background:rgba(57,211,195,.08);padding:2px 6px;border-radius:4px">id <username></code> on the Linux server</li>
<li><strong style="color:var(--text-primary)">GID (Group ID)</strong> — Numeric identifier for the primary group of the Unix user</li>
<li><strong style="color:var(--text-primary)">Windows AD Username</strong> — The Active Directory domain account to be mapped (e.g., corp\jdoe)</li>
</ul>
</div>
<div class="callout info">
<div class="callout-icon">ℹ️</div>
<div class="callout-content">
<div class="callout-title">Why UID and GID Matter</div>
<div class="callout-text">Unix-based operating systems identify users and groups by numeric IDs — UID and GID — rather than usernames. The name "jdoe" is human-readable, but the OS internally uses UID=2001 and GID=500 for all permission checks. ONTAP must be aware of these same numeric identifiers to correctly resolve identities during cross-protocol access.</div>
</div>
</div>
</section>
<!-- ===== SECTION 2 ===== -->
<section class="section" id="s2">
<div class="section-header">
<div class="section-icon icon-blue">🗺️</div>
<div class="section-title-wrap">
<div class="section-num">SECTION 02</div>
<h2>User Mapping for NTFS-Style Volumes (Unix → Windows)</h2>
</div>
</div>
<p>When a volume uses NTFS security style, all permission decisions are made from the Windows perspective. To allow a Linux/Unix user to access data in this volume, ONTAP must know which Windows AD account that Unix user corresponds to. This is achieved through <strong style="color:var(--text-primary)">Unix-to-Windows name mapping</strong>.</p>
<h3>How User Mapping Works</h3>
<div class="svg-wrap">
<svg viewBox="0 0 820 200" xmlns="http://www.w3.org/2000/svg" style="width:100%;max-width:820px;display:block;margin:0 auto">
<defs>
<marker id="ma1" markerWidth="9" markerHeight="7" refX="9" refY="3.5" orient="auto"><polygon points="0 0,9 3.5,0 7" fill="#bc8cff"/></marker>
<marker id="ma2" markerWidth="9" markerHeight="7" refX="9" refY="3.5" orient="auto"><polygon points="0 0,9 3.5,0 7" fill="#e3b341"/></marker>
</defs>
<!-- Unix User Box -->
<rect x="20" y="60" width="160" height="80" rx="10" fill="#1c2333" stroke="#3fb950" stroke-width="1.5"/>
<text x="100" y="88" text-anchor="middle" fill="#3fb950" font-size="12" font-weight="700" font-family="Sora,sans-serif">Unix User</text>
<text x="100" y="106" text-anchor="middle" fill="#8b949e" font-size="11" font-family="JetBrains Mono,monospace">username: devuser</text>
<text x="100" y="122" text-anchor="middle" fill="#8b949e" font-size="11" font-family="JetBrains Mono,monospace">UID:2001 GID:500</text>
<!-- Arrow to Mapping Engine -->
<line x1="180" y1="100" x2="310" y2="100" stroke="#bc8cff" stroke-width="2" marker-end="url(#ma1)"/>
<!-- ONTAP Mapping Engine -->
<rect x="310" y="40" width="200" height="120" rx="12" fill="#1c2333" stroke="#bc8cff" stroke-width="2"/>
<text x="410" y="70" text-anchor="middle" fill="#bc8cff" font-size="12" font-weight="700" font-family="Sora,sans-serif">ONTAP Name Mapping</text>
<text x="410" y="90" text-anchor="middle" fill="#8b949e" font-size="10" font-family="JetBrains Mono,monospace">direction: unix-to-windows</text>
<text x="410" y="110" text-anchor="middle" fill="#e3b341" font-size="10" font-family="JetBrains Mono,monospace">pattern: devuser</text>
<text x="410" y="126" text-anchor="middle" fill="#e3b341" font-size="10" font-family="JetBrains Mono,monospace">replacement: corp\\jdoe</text>
<text x="410" y="148" text-anchor="middle" fill="#8b949e" font-size="10" font-family="Inter,sans-serif">Resolves identity transparently</text>
<!-- Arrow to Windows -->
<line x1="510" y1="100" x2="640" y2="100" stroke="#e3b341" stroke-width="2" marker-end="url(#ma2)"/>
<!-- Windows AD Box -->
<rect x="640" y="60" width="160" height="80" rx="10" fill="#1c2333" stroke="#58a6ff" stroke-width="1.5"/>
<text x="720" y="88" text-anchor="middle" fill="#58a6ff" font-size="12" font-weight="700" font-family="Sora,sans-serif">Windows AD User</text>
<text x="720" y="106" text-anchor="middle" fill="#8b949e" font-size="11" font-family="JetBrains Mono,monospace">corp\jdoe</text>
<text x="720" y="122" text-anchor="middle" fill="#8b949e" font-size="11" font-family="JetBrains Mono,monospace">Full Control on share</text>
</svg>
<div class="diagram-caption">Figure 2 — ONTAP transparently resolves Unix user identity to the mapped Windows AD account for NTFS volume access</div>
</div>
<h3>Step-by-Step: Configuring Unix-to-Windows Mapping</h3>
<ol class="step-list">
<li><span class="step-num">1</span>Create the Unix user account locally in ONTAP with the same UID/GID from the Linux server</li>
<li><span class="step-num">2</span>Create the multi-protocol volume with NTFS security style</li>
<li><span class="step-num">3</span>Create a CIFS share on the volume and set Windows-side ACL permissions</li>
<li><span class="step-num">4</span>Create an NFS export policy and apply it to the volume</li>
<li><span class="step-num">5</span>Create the Unix-to-Windows name mapping to link Unix identity to AD account</li>
<li><span class="step-num">6</span>Switch to the Unix user on Linux and verify access to the mounted volume</li>
</ol>
<!-- COMMANDS -->
<h4>CLI Commands — Unix User Creation on ONTAP</h4>
<div class="code-block">
<div class="code-header">
<span class="code-lang">ONTAP CLI — vserver services</span>
<div class="code-dots"><span class="dot-red"></span><span class="dot-ylw"></span><span class="dot-grn"></span></div>
</div>
<div class="code-body"><span class="comment"># Verify existing Unix users on the SVM</span>
<span class="cmd">vserver services unix-user show</span>
<span class="comment"># Create Unix user with matching UID and GID from the Linux server</span>
<span class="cmd">vserver services unix-user create</span> <span class="param">-vserver</span> <span class="value">svm_prod</span> <span class="param">-user</span> <span class="value">devuser</span> <span class="param">-id</span> <span class="value">2001</span> <span class="param">-primary-gid</span> <span class="value">500</span> <span class="param">-full-name</span> <span class="value">"Dev User"</span>
<span class="comment"># Confirm creation</span>
<span class="cmd">vserver services unix-user show</span></div>
</div>
<h4>CLI Commands — NTFS Volume + Share + Export Policy</h4>
<div class="code-block">
<div class="code-header">
<span class="code-lang">ONTAP CLI — Volume & Protocol Setup</span>
<div class="code-dots"><span class="dot-red"></span><span class="dot-ylw"></span><span class="dot-grn"></span></div>
</div>
<div class="code-body"><span class="comment"># Create an NTFS-style volume</span>
<span class="cmd">volume create</span> <span class="param">-vserver</span> <span class="value">svm_prod</span> <span class="param">-volume</span> <span class="value">vol_shared</span> <span class="param">-size</span> <span class="value">50g</span> <span class="param">-security-style</span> <span class="value">ntfs</span> <span class="param">-junction-path</span> <span class="value">/vol_shared</span> <span class="param">-snapshot-policy</span> <span class="value">none</span>
<span class="comment"># Create a CIFS share pointing to the volume</span>
<span class="cmd">vserver cifs share create</span> <span class="param">-vserver</span> <span class="value">svm_prod</span> <span class="param">-share-name</span> <span class="value">shared_projects</span> <span class="param">-path</span> <span class="value">/vol_shared</span>
<span class="comment"># Grant Windows user Full Control on the share</span>
<span class="cmd">vserver cifs share access-control create</span> <span class="param">-vserver</span> <span class="value">svm_prod</span> <span class="param">-share</span> <span class="value">shared_projects</span> <span class="param">-user-or-group</span> <span class="value">corp\jdoe</span> <span class="param">-permission</span> <span class="value">Full_Control</span>
<span class="comment"># Create NFS export policy</span>
<span class="cmd">vserver export-policy create</span> <span class="param">-vserver</span> <span class="value">svm_prod</span> <span class="param">-policyname</span> <span class="value">shared_export_pol</span>
<span class="comment"># Add export rule — allow Linux client 10.20.30.15</span>
<span class="cmd">vserver export-policy rule create</span> <span class="param">-vserver</span> <span class="value">svm_prod</span> <span class="param">-policyname</span> <span class="value">shared_export_pol</span> <span class="param">-clientmatch</span> <span class="value">10.20.30.15</span> <span class="param">-rorule</span> <span class="value">any</span> <span class="param">-rwrule</span> <span class="value">any</span> <span class="param">-superuser</span> <span class="value">any</span> <span class="param">-protocol</span> <span class="value">nfs3</span> <span class="param">-ruleindex</span> <span class="value">1</span>
<span class="comment"># Apply export policy to the volume</span>
<span class="cmd">volume modify</span> <span class="param">-vserver</span> <span class="value">svm_prod</span> <span class="param">-volume</span> <span class="value">vol_shared</span> <span class="param">-policy</span> <span class="value">shared_export_pol</span></div>
</div>
<h4>CLI Commands — Create Unix-to-Windows User Mapping</h4>
<div class="code-block">
<div class="code-header">
<span class="code-lang">ONTAP CLI — Name Mapping</span>
<div class="code-dots"><span class="dot-red"></span><span class="dot-ylw"></span><span class="dot-grn"></span></div>
</div>
<div class="code-body"><span class="comment"># Check existing name mappings</span>
<span class="cmd">vserver name-mapping show</span>
<span class="comment"># Create Unix-to-Windows mapping (pattern=Unix user, replacement=AD user)</span>
<span class="cmd">vserver name-mapping create</span> <span class="param">-vserver</span> <span class="value">svm_prod</span> <span class="param">-direction</span> <span class="value">unix-wins</span> <span class="param">-position</span> <span class="value">1</span> <span class="param">-pattern</span> <span class="value">devuser</span> <span class="param">-replacement</span> <span class="value">corp\\jdoe</span>
<span class="comment"># Add a second Unix user mapping at position 2</span>
<span class="cmd">vserver name-mapping create</span> <span class="param">-vserver</span> <span class="value">svm_prod</span> <span class="param">-direction</span> <span class="value">unix-wins</span> <span class="param">-position</span> <span class="value">2</span> <span class="param">-pattern</span> <span class="value">builduser</span> <span class="param">-replacement</span> <span class="value">corp\\jdoe</span>
<span class="comment"># Verify all mappings</span>
<span class="cmd">vserver name-mapping show</span>
<span class="comment"># On Linux — switch to Unix user and mount the volume</span>
<span class="prompt">$</span> sudo <span class="value">devuser</span>
<span class="prompt">$</span> mount <span class="value">10.20.30.5</span>:/vol_shared /mnt/projects
<span class="prompt">$</span> cd /mnt/projects && ls -la</div>
</div>
<h3>Multi-User and Group Mapping</h3>
<p>Instead of mapping individual users one by one, you can map multiple Unix users to a single Windows AD account, or map an entire AD group. This is common when a team needs shared access.</p>
<div class="callout warning">
<div class="callout-icon">⚠️</div>
<div class="callout-content">
<div class="callout-title">Critical Rule — One-to-One Direction Only</div>
<div class="callout-text">You <strong>can</strong> map multiple Unix users to a single Windows user. However, you <strong>cannot</strong> map a single Unix user to multiple Windows users. Doing so creates a permission conflict — ONTAP cannot determine which Windows identity (and thus which ACL set) should apply. Always maintain a many-to-one mapping direction.</div>
</div>
</div>
</section>
<!-- ===== SECTION 3 ===== -->
<section class="section" id="s3">
<div class="section-header">
<div class="section-icon icon-green">🐧</div>
<div class="section-title-wrap">
<div class="section-num">SECTION 03</div>
<h2>User Mapping for Unix-Style Volumes (Windows → Unix)</h2>
</div>
</div>
<p>When the volume uses <strong style="color:var(--text-primary)">Unix security style</strong>, permissions are controlled from the Linux/Unix side. For a Windows user to access data in this volume through CIFS, ONTAP needs a <strong style="color:var(--text-primary)">Windows-to-Unix mapping</strong> that links the AD account to a local Unix identity on the SVM.</p>
<h3>Key Differences from NTFS-Style Mapping</h3>
<div class="grid-2">
<div class="card">
<div class="card-title">🖥️ NTFS Volume</div>
<ul class="bullet-list">
<li>Security managed from Windows</li>
<li>Mapping direction: <span class="badge badge-blue">unix-wins</span></li>
<li>Unix user → mapped to Windows AD user</li>
<li>Unix user gains Windows ACL permissions</li>
</ul>
</div>
<div class="card">
<div class="card-title">🐧 Unix Volume</div>
<ul class="bullet-list">
<li>Security managed from Linux (chmod/chown)</li>
<li>Mapping direction: <span class="badge badge-green">wins-unix</span></li>
<li>Windows AD user → mapped to Unix user</li>
<li>Windows user gains Unix permissions</li>
</ul>
</div>
</div>
<h4>CLI Commands — Windows-to-Unix Mapping</h4>
<div class="code-block">
<div class="code-header">
<span class="code-lang">ONTAP CLI — Unix Volume Setup & Mapping</span>
<div class="code-dots"><span class="dot-red"></span><span class="dot-ylw"></span><span class="dot-grn"></span></div>
</div>
<div class="code-body"><span class="comment"># Create Unix-style volume with Unix permissions specified</span>
<span class="cmd">volume create</span> <span class="param">-vserver</span> <span class="value">svm_prod</span> <span class="param">-volume</span> <span class="value">vol_linux</span> <span class="param">-size</span> <span class="value">100g</span> <span class="param">-security-style</span> <span class="value">unix</span> <span class="param">-junction-path</span> <span class="value">/vol_linux</span> <span class="param">-unix-permissions</span> <span class="value">0755</span> <span class="param">-user</span> <span class="value">devuser</span> <span class="param">-group</span> <span class="value">devgroup</span>
<span class="comment"># Create CIFS share on Unix volume</span>
<span class="cmd">vserver cifs share create</span> <span class="param">-vserver</span> <span class="value">svm_prod</span> <span class="param">-share-name</span> <span class="value">linux_share</span> <span class="param">-path</span> <span class="value">/vol_linux</span>
<span class="comment"># Create Windows-to-Unix mapping</span>
<span class="comment"># pattern = Windows AD user, replacement = Unix user on SVM</span>
<span class="cmd">vserver name-mapping create</span> <span class="param">-vserver</span> <span class="value">svm_prod</span> <span class="param">-direction</span> <span class="value">wins-unix</span> <span class="param">-position</span> <span class="value">1</span> <span class="param">-pattern</span> <span class="value">corp\\jdoe</span> <span class="param">-replacement</span> <span class="value">devuser</span>
<span class="comment"># Verify mapping</span>
<span class="cmd">vserver name-mapping show</span></div>
</div>
<div class="callout success">
<div class="callout-icon">✅</div>
<div class="callout-content">
<div class="callout-title">Best Practice — Volume-Level Unix Permissions</div>
<div class="callout-text">When creating a Unix-style volume for multi-protocol use, always specify the <code>-unix-permissions</code>, <code>-user</code>, and <code>-group</code> parameters at volume creation time. These set the ownership at the root of the volume and determine what the mapped Windows user can do when accessing via CIFS.</div>
</div>
</div>
</section>
<!-- ===== SECTION 4 ===== -->
<section class="section" id="s4">
<div class="section-header">
<div class="section-icon icon-teal">♻️</div>
<div class="section-title-wrap">
<div class="section-num">SECTION 04</div>
<h2>Deduplication — Eliminating Redundant Data Blocks</h2>
</div>
</div>
<p>Deduplication is the most foundational storage efficiency technique in ONTAP. It operates at the <strong style="color:var(--text-primary)">block level</strong>, scanning stored data for identical blocks and replacing duplicate copies with a single shared instance plus a lightweight pointer. This can dramatically reduce the physical storage footprint, especially for workloads with repetitive data (virtual machine disk files, backup repositories, office documents).</p>
<h3>How Deduplication Works Internally</h3>
<div class="svg-wrap">
<svg viewBox="0 0 820 240" xmlns="http://www.w3.org/2000/svg" style="width:100%;max-width:820px;display:block;margin:0 auto">
<!-- Before label -->
<text x="200" y="28" text-anchor="middle" fill="#e6edf3" font-size="13" font-weight="700" font-family="Sora,sans-serif">Before Deduplication</text>
<!-- Blocks before -->
<rect x="30" y="40" width="50" height="50" rx="6" fill="rgba(88,166,255,.2)" stroke="#58a6ff" stroke-width="1.5"/>
<text x="55" y="70" text-anchor="middle" fill="#58a6ff" font-size="15" font-weight="700" font-family="JetBrains Mono,monospace">A</text>
<rect x="90" y="40" width="50" height="50" rx="6" fill="rgba(63,185,80,.2)" stroke="#3fb950" stroke-width="1.5"/>
<text x="115" y="70" text-anchor="middle" fill="#3fb950" font-size="15" font-weight="700" font-family="JetBrains Mono,monospace">B</text>
<rect x="150" y="40" width="50" height="50" rx="6" fill="rgba(88,166,255,.2)" stroke="#58a6ff" stroke-width="1.5"/>
<text x="175" y="70" text-anchor="middle" fill="#58a6ff" font-size="15" font-weight="700" font-family="JetBrains Mono,monospace">A</text>
<rect x="210" y="40" width="50" height="50" rx="6" fill="rgba(247,129,102,.2)" stroke="#f78166" stroke-width="1.5"/>
<text x="235" y="70" text-anchor="middle" fill="#f78166" font-size="15" font-weight="700" font-family="JetBrains Mono,monospace">C</text>
<rect x="270" y="40" width="50" height="50" rx="6" fill="rgba(63,185,80,.2)" stroke="#3fb950" stroke-width="1.5"/>
<text x="295" y="70" text-anchor="middle" fill="#3fb950" font-size="15" font-weight="700" font-family="JetBrains Mono,monospace">B</text>
<rect x="330" y="40" width="50" height="50" rx="6" fill="rgba(188,140,255,.2)" stroke="#bc8cff" stroke-width="1.5"/>
<text x="355" y="70" text-anchor="middle" fill="#bc8cff" font-size="15" font-weight="700" font-family="JetBrains Mono,monospace">D</text>
<text x="200" y="115" text-anchor="middle" fill="#8b949e" font-size="11" font-family="JetBrains Mono,monospace">6 blocks × 20MB = 120MB used</text>
<!-- Arrow -->
<defs><marker id="dedup" markerWidth="9" markerHeight="7" refX="9" refY="3.5" orient="auto"><polygon points="0 0,9 3.5,0 7" fill="#39d3c3"/></marker></defs>
<line x1="430" y1="70" x2="490" y2="70" stroke="#39d3c3" stroke-width="3" marker-end="url(#dedup)"/>
<text x="460" y="58" text-anchor="middle" fill="#39d3c3" font-size="10" font-weight="600" font-family="Sora,sans-serif">DEDUP</text>
<text x="460" y="88" text-anchor="middle" fill="#39d3c3" font-size="10" font-family="JetBrains Mono,monospace">scans & removes</text>
<!-- After label -->
<text x="660" y="28" text-anchor="middle" fill="#e6edf3" font-size="13" font-weight="700" font-family="Sora,sans-serif">After Deduplication</text>
<!-- Unique Blocks after -->
<rect x="510" y="40" width="50" height="50" rx="6" fill="rgba(88,166,255,.2)" stroke="#58a6ff" stroke-width="1.5"/>
<text x="535" y="70" text-anchor="middle" fill="#58a6ff" font-size="15" font-weight="700" font-family="JetBrains Mono,monospace">A</text>
<rect x="570" y="40" width="50" height="50" rx="6" fill="rgba(63,185,80,.2)" stroke="#3fb950" stroke-width="1.5"/>
<text x="595" y="70" text-anchor="middle" fill="#3fb950" font-size="15" font-weight="700" font-family="JetBrains Mono,monospace">B</text>
<rect x="630" y="40" width="50" height="50" rx="6" fill="rgba(247,129,102,.2)" stroke="#f78166" stroke-width="1.5"/>
<text x="655" y="70" text-anchor="middle" fill="#f78166" font-size="15" font-weight="700" font-family="JetBrains Mono,monospace">C</text>
<rect x="690" y="40" width="50" height="50" rx="6" fill="rgba(188,140,255,.2)" stroke="#bc8cff" stroke-width="1.5"/>
<text x="715" y="70" text-anchor="middle" fill="#bc8cff" font-size="15" font-weight="700" font-family="JetBrains Mono,monospace">D</text>
<!-- Pointers for duplicate A -->
<line x1="535" y1="90" x2="535" y2="130" stroke="#58a6ff" stroke-width="1" stroke-dasharray="4,2"/>
<rect x="490" y="130" width="90" height="30" rx="4" fill="rgba(88,166,255,.08)" stroke="rgba(88,166,255,.3)" stroke-width="1"/>
<text x="535" y="150" text-anchor="middle" fill="#58a6ff" font-size="9" font-family="JetBrains Mono,monospace">→ pointer (saved 20MB)</text>
<line x1="595" y1="90" x2="595" y2="130" stroke="#3fb950" stroke-width="1" stroke-dasharray="4,2"/>
<rect x="548" y="130" width="94" height="30" rx="4" fill="rgba(63,185,80,.08)" stroke="rgba(63,185,80,.3)" stroke-width="1"/>
<text x="595" y="150" text-anchor="middle" fill="#3fb950" font-size="9" font-family="JetBrains Mono,monospace">→ pointer (saved 20MB)</text>
<text x="625" y="196" text-anchor="middle" fill="#39d3c3" font-size="11" font-weight="600" font-family="Sora,sans-serif">4 blocks × 20MB = 80MB | Space saved: 40MB (33%)</text>
</svg>
<div class="diagram-caption">Figure 3 — Deduplication replaces duplicate blocks with shared pointers. Duplicate A and B blocks are each collapsed to a single shared copy.</div>
</div>
<h3>Inline vs Post-Process Deduplication</h3>
<div class="grid-2">
<div class="card">
<div class="card-title">⚡ Inline Deduplication</div>
<p style="font-size:13.5px">Runs <strong style="color:var(--text-primary)">during write operations</strong>. Data is scanned and deduplicated as it arrives, so duplicate blocks are never written to disk. Recommended for <span class="badge badge-teal">AFF (All-Flash)</span> systems which have the IOPS headroom to handle concurrent write + scan workloads.</p>
</div>
<div class="card">
<div class="card-title">📅 Post-Process Deduplication</div>
<p style="font-size:13.5px">Runs <strong style="color:var(--text-primary)">as a background scheduled job</strong>. Data is written first, then scanned later. Recommended for <span class="badge badge-orange">FAS (Hybrid/HDD)</span> systems where running deduplication inline would impact write performance.</p>
</div>
</div>
<h3>Cross-Volume (Aggregate-Level) Deduplication</h3>
<p>Standard deduplication only scans blocks within a single volume. Cross-volume deduplication extends this to identify identical blocks <strong style="color:var(--text-primary)">across all volumes within the same aggregate</strong>, yielding significantly higher space savings in environments with multiple volumes hosting similar data (e.g., multiple VM datastores).</p>
<div class="diagram-wrap">
<div class="mermaid">
graph TD
A["🗄️ Aggregate<br/>aggr_flash_01"] --> V1["Volume: app_data_01<br/>[Block: X, Y, Z]"]
A --> V2["Volume: app_data_02<br/>[Block: X, W, Z]"]
A --> V3["Volume: app_data_03<br/>[Block: P, X, Q]"]
V1 --> D["🔍 Cross-Volume Dedup Engine<br/>Finds: Block X repeated 3×<br/>Block Z repeated 2×"]
V2 --> D
V3 --> D
D --> R["✅ Single shared copy of X and Z<br/>Pointers in all 3 volumes<br/>Massive aggregate-level savings"]
style A fill:#1c2333,stroke:#bc8cff,color:#e6edf3
style D fill:#1c2333,stroke:#39d3c3,color:#e6edf3
style R fill:#1c2333,stroke:#3fb950,color:#e6edf3
</div>
<div class="diagram-caption">Figure 4 — Cross-volume deduplication scans all volumes in an aggregate and eliminates duplicate blocks across volume boundaries</div>
</div>
<div class="callout info">
<div class="callout-icon">ℹ️</div>
<div class="callout-content">
<div class="callout-title">Cross-Volume Dedup — AFF Only</div>
<div class="callout-text">Cross-volume deduplication (both inline and background variants) is recommended only for AFF arrays. The additional computation required to track and compare blocks across multiple volumes simultaneously is too intensive for HDD-based FAS controllers.</div>
</div>
</div>
</section>
<!-- ===== SECTION 5 ===== -->
<section class="section" id="s5">
<div class="section-header">
<div class="section-icon icon-yellow">🗜️</div>
<div class="section-title-wrap">
<div class="section-num">SECTION 05</div>
<h2>Compression — Reducing Block Size</h2>
</div>
</div>
<p>Compression reduces the physical size of data blocks before they are stored. Think of it as applying ZIP-level compression at the storage controller layer, transparently and automatically. When data is read back, the controller decompresses it on the fly — the application sees uncompressed data with no code changes needed.</p>
<h3>Two Compression Types in ONTAP</h3>
<div class="grid-2">
<div class="card">
<div class="card-title">🚀 Adaptive Compression</div>
<ul class="bullet-list">
<li>Default for <span class="badge badge-teal">AFF systems</span></li>
<li>Optimized for performance — minimal latency impact</li>
<li>Achieves moderate compression ratios</li>
<li>Works well with random I/O workloads</li>
<li>Can be run inline or post-process</li>
</ul>
</div>
<div class="card">
<div class="card-title">📦 Secondary Compression</div>
<ul class="bullet-list">
<li>Default for <span class="badge badge-orange">FAS systems</span></li>
<li>Higher compression ratios than adaptive</li>
<li>More CPU-intensive — better suited to sequential I/O</li>
<li>Typically run as post-process (background)</li>
<li>Can be enabled on AFF but not recommended</li>
</ul>
</div>
</div>
<div class="callout warning">
<div class="callout-icon">⚠️</div>
<div class="callout-content">
<div class="callout-title">Changing Compression Type Is Disruptive</div>
<div class="callout-text">Switching from secondary compression to adaptive compression on a volume that already has data requires: (1) uncompressing all existing data, (2) disabling compression, (3) changing the type, and (4) re-running compression from scratch. This operation is I/O intensive and should be planned during a maintenance window. Plan your compression type correctly from the start.</div>
</div>
</div>
<h3>Inline vs Post-Process Compression</h3>
<p>Like deduplication, compression can be run either inline (during writes) or as a scheduled background process. The same performance trade-off applies: AFF systems are suited for inline, while FAS systems should use post-process to avoid impacting production workloads.</p>
<div class="diagram-wrap">
<div class="mermaid">
flowchart LR
A["📥 Incoming<br/>Data Block<br/>(4KB)"] --> B{Controller<br/>Type?}
B -->|"AFF"| C["⚡ Inline Compression<br/>(Adaptive)<br/>During Write"]
B -->|"FAS"| D["📅 Post-Process<br/>(Secondary)<br/>Background Schedule"]
C --> E["💾 Compressed Block<br/>Written to Flash<br/>~2KB saved"]
D --> F["💾 Full Block Written<br/>First, Then Compressed<br/>Later by Scheduler"]
E --> G["📊 Space Savings<br/>Visible Immediately"]
F --> G
style A fill:#1c2333,stroke:#bc8cff,color:#e6edf3
style B fill:#1c2333,stroke:#e3b341,color:#e6edf3
style C fill:#1c2333,stroke:#39d3c3,color:#e6edf3
style D fill:#1c2333,stroke:#f78166,color:#e6edf3
style G fill:#1c2333,stroke:#3fb950,color:#e6edf3
</div>
<div class="diagram-caption">Figure 5 — Compression path decision based on array type. AFF uses inline adaptive compression; FAS uses scheduled post-process secondary compression.</div>
</div>
</section>
<!-- ===== SECTION 6 ===== -->
<section class="section" id="s6">
<div class="section-header">
<div class="section-icon icon-orange">📦</div>
<div class="section-title-wrap">
<div class="section-num">SECTION 06</div>
<h2>Compaction — Eliminating Wasted Block Space</h2>
</div>
</div>
<p>Even after deduplication and compression, there can be wasted space within blocks due to partially-filled 4KB block allocations. Compaction is a background process that addresses this inefficiency by identifying and merging partial blocks.</p>
<h3>The Problem: Partial Block Waste</h3>
<div class="svg-wrap">
<svg viewBox="0 0 820 210" xmlns="http://www.w3.org/2000/svg" style="width:100%;max-width:820px;display:block;margin:0 auto">
<text x="200" y="22" text-anchor="middle" fill="#e6edf3" font-size="12" font-weight="700" font-family="Sora,sans-serif">Before Compaction</text>
<!-- Block 1: 4KB full -->
<rect x="20" y="35" width="60" height="140" rx="6" fill="rgba(88,166,255,.2)" stroke="#58a6ff" stroke-width="1.5"/>
<text x="50" y="60" text-anchor="middle" fill="#8b949e" font-size="9" font-family="JetBrains Mono,monospace">4KB</text>
<rect x="24" y="65" width="52" height="104" rx="3" fill="rgba(88,166,255,.4)"/>
<text x="50" y="122" text-anchor="middle" fill="#58a6ff" font-size="10" font-family="JetBrains Mono,monospace">File A</text>
<text x="50" y="185" text-anchor="middle" fill="#3fb950" font-size="9" font-family="JetBrains Mono,monospace">FULL</text>
<!-- Block 2: partial (2KB used) -->
<rect x="90" y="35" width="60" height="140" rx="6" fill="rgba(247,129,102,.15)" stroke="#f78166" stroke-width="1.5"/>
<text x="120" y="60" text-anchor="middle" fill="#8b949e" font-size="9" font-family="JetBrains Mono,monospace">4KB</text>
<rect x="94" y="105" width="52" height="64" rx="3" fill="rgba(247,129,102,.4)"/>
<text x="120" y="137" text-anchor="middle" fill="#f78166" font-size="9" font-family="JetBrains Mono,monospace">File A</text>
<text x="120" y="153" text-anchor="middle" fill="#f78166" font-size="9" font-family="JetBrains Mono,monospace">2KB</text>
<text x="120" y="185" text-anchor="middle" fill="#f78166" font-size="9" font-family="JetBrains Mono,monospace">2KB waste</text>
<!-- Block 3: partial (1KB used) -->
<rect x="160" y="35" width="60" height="140" rx="6" fill="rgba(227,179,65,.15)" stroke="#e3b341" stroke-width="1.5"/>
<text x="190" y="60" text-anchor="middle" fill="#8b949e" font-size="9" font-family="JetBrains Mono,monospace">4KB</text>
<rect x="164" y="140" width="52" height="29" rx="3" fill="rgba(227,179,65,.4)"/>
<text x="190" y="158" text-anchor="middle" fill="#e3b341" font-size="9" font-family="JetBrains Mono,monospace">1KB</text>
<text x="190" y="185" text-anchor="middle" fill="#e3b341" font-size="9" font-family="JetBrains Mono,monospace">3KB waste</text>
<!-- Arrow Compaction -->
<defs><marker id="comp" markerWidth="9" markerHeight="7" refX="9" refY="3.5" orient="auto"><polygon points="0 0,9 3.5,0 7" fill="#39d3c3"/></marker></defs>
<line x1="295" y1="105" x2="355" y2="105" stroke="#39d3c3" stroke-width="3" marker-end="url(#comp)"/>
<text x="325" y="90" text-anchor="middle" fill="#39d3c3" font-size="10" font-weight="600" font-family="Sora,sans-serif">COMPACTION</text>
<text x="325" y="122" text-anchor="middle" fill="#39d3c3" font-size="9" font-family="JetBrains Mono,monospace">merges partials</text>
<text x="550" y="22" text-anchor="middle" fill="#e6edf3" font-size="12" font-weight="700" font-family="Sora,sans-serif">After Compaction</text>
<!-- Block 1: still full -->
<rect x="380" y="35" width="60" height="140" rx="6" fill="rgba(88,166,255,.2)" stroke="#58a6ff" stroke-width="1.5"/>
<rect x="384" y="65" width="52" height="104" rx="3" fill="rgba(88,166,255,.4)"/>
<text x="410" y="122" text-anchor="middle" fill="#58a6ff" font-size="10" font-family="JetBrains Mono,monospace">File A</text>
<text x="410" y="185" text-anchor="middle" fill="#3fb950" font-size="9" font-family="JetBrains Mono,monospace">FULL</text>
<!-- Block 2: merged partials -->
<rect x="450" y="35" width="60" height="140" rx="6" fill="rgba(63,185,80,.2)" stroke="#3fb950" stroke-width="1.5"/>
<rect x="454" y="105" width="52" height="64" rx="3" fill="rgba(247,129,102,.4)"/>
<text x="480" y="137" text-anchor="middle" fill="#f78166" font-size="9" font-family="JetBrains Mono,monospace">2KB</text>
<rect x="454" y="140" width="52" height="29" rx="3" fill="rgba(227,179,65,.4)"/>
<text x="480" y="158" text-anchor="middle" fill="#e3b341" font-size="9" font-family="JetBrains Mono,monospace">1KB</text>
<text x="480" y="185" text-anchor="middle" fill="#3fb950" font-size="9" font-family="JetBrains Mono,monospace">1 block freed</text>
</svg>
<div class="diagram-caption">Figure 6 — Compaction merges two partial blocks (File A tail + small file) into a single block, freeing one entire 4KB block</div>
</div>
<div class="callout teal">
<div class="callout-icon">🔧</div>
<div class="callout-content">
<div class="callout-title">Compaction Is Always a Background Process</div>
<div class="callout-text">Unlike deduplication and compression, compaction does not have an inline mode. It always runs as a background scan. ONTAP introduced compaction starting around version 9.3 to address the growing problem of partial block waste in environments storing large numbers of small files.</div>
</div>
</div>
<div class="card">
<div class="card-title">📊 Efficiency Techniques at a Glance</div>
<table class="spec-table">
<thead>
<tr><th>Technique</th><th>What It Targets</th><th>Run Mode</th><th>AFF Default</th><th>FAS Default</th></tr>
</thead>
<tbody>
<tr><td><span class="badge badge-blue">Deduplication</span></td><td>Identical data blocks</td><td>Inline or Post-Process</td><td>Inline</td><td>Post-Process</td></tr>
<tr><td><span class="badge badge-yellow">Compression</span></td><td>Large compressible blocks</td><td>Inline or Post-Process</td><td>Inline (Adaptive)</td><td>Post-Process (Secondary)</td></tr>
<tr><td><span class="badge badge-orange">Compaction</span></td><td>Partially filled 4KB blocks</td><td>Background only</td><td>Enabled</td><td>Manual enable</td></tr>
</tbody>
</table>
</div>
</section>
<!-- ===== SECTION 7 ===== -->
<section class="section" id="s7">
<div class="section-header">
<div class="section-icon icon-teal">⚙️</div>
<div class="section-title-wrap">
<div class="section-num">SECTION 07</div>
<h2>Configuring Storage Efficiency on ONTAP Volumes</h2>
</div>
</div>
<p>ONTAP provides granular control over which efficiency features are enabled on each volume, when they run, and how they run. The settings can be applied via direct CLI parameters or through reusable efficiency policies.</p>
<div class="callout danger">
<div class="callout-icon">🔴</div>
<div class="callout-content">
<div class="callout-title">Dependency Order — Deduplication Is Required First</div>
<div class="callout-text">Compression and compaction <strong>cannot be enabled</strong> unless deduplication is also enabled. Deduplication is the prerequisite for all other efficiency techniques. However, you can enable deduplication alone without compression or compaction.</div>
</div>
</div>
<h3>Execution Order When All Three Are Enabled</h3>
<div class="diagram-wrap">
<div class="mermaid">
flowchart LR
W["💾 Data Written<br/>to Volume"] --> C["Step 1️⃣<br/>Compression<br/>Reduce block size"]
C --> P["Step 2️⃣<br/>Compaction<br/>Merge partial blocks"]
P --> D["Step 3️⃣<br/>Deduplication<br/>Eliminate duplicate blocks"]
D --> S["📊 Final Space<br/>Savings Achieved"]
style W fill:#1c2333,stroke:#8b949e,color:#e6edf3
style C fill:#1c2333,stroke:#e3b341,color:#e6edf3
style P fill:#1c2333,stroke:#f78166,color:#e6edf3
style D fill:#1c2333,stroke:#39d3c3,color:#e6edf3
style S fill:#1c2333,stroke:#3fb950,color:#e6edf3
</div>
<div class="diagram-caption">Figure 7 — ONTAP runs efficiency operations in a specific order: Compression → Compaction → Deduplication. Deduplication runs last because deduplicated blocks cannot be further compressed.</div>
</div>
<h4>CLI Commands — Enable and Configure Efficiency</h4>
<div class="code-block">
<div class="code-header">
<span class="code-lang">ONTAP CLI — Storage Efficiency</span>
<div class="code-dots"><span class="dot-red"></span><span class="dot-ylw"></span><span class="dot-grn"></span></div>
</div>
<div class="code-body"><span class="comment"># Check current efficiency status on all volumes</span>
<span class="cmd">volume efficiency show</span>
<span class="comment"># Enable efficiency on a specific volume</span>
<span class="cmd">volume efficiency on</span> <span class="param">-vserver</span> <span class="value">svm_prod</span> <span class="param">-volume</span> <span class="value">vol_data</span>
<span class="comment"># Configure efficiency — inline dedup + inline compression + compaction</span>
<span class="cmd">volume efficiency modify</span> <span class="param">-vserver</span> <span class="value">svm_prod</span> <span class="param">-volume</span> <span class="value">vol_data</span> <span class="param">-inline-deduplication</span> <span class="value">true</span> <span class="param">-compression</span> <span class="value">true</span> <span class="param">-inline-compression</span> <span class="value">true</span> <span class="param">-data-compaction</span> <span class="value">true</span> <span class="param">-schedule</span> <span class="value">daily</span>
<span class="comment"># Set compression type (advanced privilege required)</span>
<span class="prompt">::></span> <span class="cmd">set advanced</span>
<span class="cmd">volume efficiency modify</span> <span class="param">-vserver</span> <span class="value">svm_prod</span> <span class="param">-volume</span> <span class="value">vol_data</span> <span class="param">-compression-type</span> <span class="value">adaptive</span>
<span class="comment"># Check space savings from efficiency</span>
<span class="cmd">volume show</span> <span class="param">-fields</span> <span class="value">dedup-space-saved,dedup-space-saved-percent,compression-space-saved,compression-space-saved-percent</span>
<span class="comment"># Run efficiency scan on existing (old) data manually</span>
<span class="cmd">volume efficiency start</span> <span class="param">-vserver</span> <span class="value">svm_prod</span> <span class="param">-volume</span> <span class="value">vol_data</span> <span class="param">-scan-old-data</span> <span class="value">true</span> <span class="param">-deduplicate</span> <span class="value">true</span> <span class="param">-compression</span> <span class="value">true</span></div>
</div>
<h3>Creating Efficiency Policies</h3>
<p>Instead of configuring efficiency options per-volume, you can create reusable efficiency <em>policies</em> and apply them across multiple volumes. Policies can be schedule-based (run at a fixed time) or threshold-based (run when volume utilization reaches a defined level).</p>
<div class="code-block">
<div class="code-header">
<span class="code-lang">ONTAP CLI — Efficiency Policy</span>
<div class="code-dots"><span class="dot-red"></span><span class="dot-ylw"></span><span class="dot-grn"></span></div>
</div>
<div class="code-body"><span class="comment"># View existing efficiency policies</span>
<span class="cmd">volume efficiency policy show</span>
<span class="comment"># Create a schedule-based efficiency policy</span>
<span class="cmd">volume efficiency policy create</span> <span class="param">-vserver</span> <span class="value">svm_prod</span> <span class="param">-policy</span> <span class="value">eff_nightly</span> <span class="param">-type</span> <span class="value">scheduled</span> <span class="param">-schedule</span> <span class="value">daily</span> <span class="param">-duration</span> <span class="value">6</span> <span class="param">-enabled</span> <span class="value">true</span>
<span class="comment"># Create a threshold-based policy (triggers at 80% volume fill)</span>
<span class="cmd">volume efficiency policy create</span> <span class="param">-vserver</span> <span class="value">svm_prod</span> <span class="param">-policy</span> <span class="value">eff_threshold80</span> <span class="param">-type</span> <span class="value">threshold</span> <span class="param">-start-threshold-percent</span> <span class="value">80</span> <span class="param">-enabled</span> <span class="value">true</span>
<span class="comment"># Apply policy to a volume</span>
<span class="cmd">volume efficiency modify</span> <span class="param">-vserver</span> <span class="value">svm_prod</span> <span class="param">-volume</span> <span class="value">vol_data</span> <span class="param">-policy</span> <span class="value">eff_nightly</span></div>
</div>
<div class="callout success">
<div class="callout-icon">✅</div>
<div class="callout-content">
<div class="callout-title">Best Practice — Run Efficiency During Off-Business Hours</div>
<div class="callout-text">Post-process efficiency operations — especially on FAS arrays — can consume significant CPU and I/O. Always schedule them during non-business hours (e.g., 11 PM to 5 AM). Set a <code>-duration</code> limit to ensure the job stops before business hours resume, regardless of whether it has completed. Any unprocessed data will be picked up in the next run.</div>
</div>
</div>
</section>
<!-- ===== SECTION 8 ===== -->
<section class="section" id="s8">
<div class="section-header">
<div class="section-icon icon-blue">🛠️</div>
<div class="section-title-wrap">
<div class="section-num">SECTION 08</div>
<h2>ONTAP Management Tools Ecosystem</h2>
</div>
</div>
<p>NetApp provides a suite of management and monitoring tools designed for different operational roles — from day-to-day cluster administration to datacenter-wide infrastructure visibility. Understanding which tool to use for which task is essential for efficient operations.</p>
<div class="svg-wrap">
<svg viewBox="0 0 820 280" xmlns="http://www.w3.org/2000/svg" style="width:100%;max-width:820px;display:block;margin:0 auto">
<!-- System Manager -->
<rect x="20" y="30" width="170" height="100" rx="10" fill="#1c2333" stroke="#58a6ff" stroke-width="1.5"/>
<text x="105" y="58" text-anchor="middle" fill="#58a6ff" font-size="13" font-weight="700" font-family="Sora,sans-serif">System Manager</text>
<text x="105" y="76" text-anchor="middle" fill="#8b949e" font-size="10" font-family="Inter,sans-serif">GUI Cluster Management</text>
<text x="105" y="92" text-anchor="middle" fill="#8b949e" font-size="10" font-family="Inter,sans-serif">~90% of CLI tasks via UI</text>
<text x="105" y="108" text-anchor="middle" fill="#58a6ff" font-size="10" font-family="JetBrains Mono,monospace">Single Cluster</text>
<!-- Active IQ UM -->
<rect x="210" y="30" width="170" height="100" rx="10" fill="#1c2333" stroke="#39d3c3" stroke-width="1.5"/>
<text x="295" y="55" text-anchor="middle" fill="#39d3c3" font-size="12" font-weight="700" font-family="Sora,sans-serif">Active IQ</text>
<text x="295" y="71" text-anchor="middle" fill="#39d3c3" font-size="12" font-weight="700" font-family="Sora,sans-serif">Unified Manager</text>
<text x="295" y="89" text-anchor="middle" fill="#8b949e" font-size="10" font-family="Inter,sans-serif">Monitor all clusters</text>
<text x="295" y="105" text-anchor="middle" fill="#8b949e" font-size="10" font-family="Inter,sans-serif">Alerts, Reports, Performance</text>
<!-- WFA -->
<rect x="400" y="30" width="170" height="100" rx="10" fill="#1c2333" stroke="#bc8cff" stroke-width="1.5"/>
<text x="485" y="58" text-anchor="middle" fill="#bc8cff" font-size="13" font-weight="700" font-family="Sora,sans-serif">WFA</text>
<text x="485" y="74" text-anchor="middle" fill="#8b949e" font-size="10" font-family="Inter,sans-serif">Workflow Automation</text>
<text x="485" y="90" text-anchor="middle" fill="#8b949e" font-size="10" font-family="Inter,sans-serif">Automate provisioning</text>
<text x="485" y="106" text-anchor="middle" fill="#8b949e" font-size:10" font-family="Inter,sans-serif">Reduce human error</text>
<!-- OCI -->
<rect x="590" y="30" width="200" height="100" rx="10" fill="#1c2333" stroke="#f78166" stroke-width="1.5"/>
<text x="690" y="55" text-anchor="middle" fill="#f78166" font-size="12" font-weight="700" font-family="Sora,sans-serif">OnCommand Insight</text>
<text x="690" y="71" text-anchor="middle" fill="#f78166" font-size="12" font-weight="700" font-family="Sora,sans-serif">(OCI)</text>
<text x="690" y="89" text-anchor="middle" fill="#8b949e" font-size="10" font-family="Inter,sans-serif">Datacenter-wide visibility</text>
<text x="690" y="105" text-anchor="middle" fill="#8b949e" font-size="10" font-family="Inter,sans-serif">EMC, HP, Pure, IBM + NetApp</text>
<!-- Bottom labels -->
<text x="105" y="160" text-anchor="middle" fill="#8b949e" font-size="10" font-family="JetBrains Mono,monospace">Scope: 1 Cluster</text>
<text x="295" y="160" text-anchor="middle" fill="#8b949e" font-size="10" font-family="JetBrains Mono,monospace">Scope: All Clusters</text>
<text x="485" y="160" text-anchor="middle" fill="#8b949e" font-size="10" font-family="JetBrains Mono,monospace">Scope: Workflows</text>
<text x="690" y="160" text-anchor="middle" fill="#8b949e" font-size="10" font-family="JetBrains Mono,monospace">Scope: Entire DC</text>
<!-- Use case row -->
<text x="410" y="210" text-anchor="middle" fill="#e6edf3" font-size="12" font-weight="600" font-family="Sora,sans-serif">Broader the scope → more integration complexity required</text>
</svg>
<div class="diagram-caption">Figure 8 — ONTAP management tool ecosystem, from single-cluster GUI administration to full datacenter infrastructure monitoring</div>
</div>
<h3>Active IQ Unified Manager (AIQUM)</h3>
<p>Previously known as OnCommand Unified Manager, Active IQ Unified Manager is the central monitoring platform for multi-cluster ONTAP environments. It consolidates health, performance, and capacity data across all registered clusters into a single pane of glass.</p>
<div class="card">
<div class="card-title">📊 AIQUM Capabilities</div>
<div class="grid-2">
<ul class="bullet-list">
<li>Centralized dashboard for all cluster health</li>
<li>Event management — volume fill, hardware failures</li>
<li>Performance monitoring — latency, IOPS, throughput</li>
<li>Report generation (CSV, PDF, Excel)</li>
</ul>
<ul class="bullet-list">
<li>Volume explorer — browse files without node shell</li>
<li>Workload analysis and QoS visibility</li>
<li>vCenter integration for VM monitoring</li>
<li>Storage provisioning via integrated workflows</li>
</ul>
</div>
</div>
<div class="callout info">
<div class="callout-icon">📌</div>
<div class="callout-content">
<div class="callout-title">Tool Name History</div>
<div class="callout-text">Before version 9.5 of Active IQ UM, this tool was called <strong>OnCommand Unified Manager</strong>. It was also previously split into two separate products — OnCommand Manager (health) and OnCommand Performance Manager — which were merged into a single Unified Manager starting with version 7.2.</div>
</div>
</div>
<h3>Workflow Automation (WFA)</h3>
<p>WFA is a workflow engine that allows storage teams to define multi-step provisioning procedures once and execute them with minimal manual input thereafter. This eliminates repetitive CLI commands and dramatically reduces the risk of configuration mistakes.</p>
<div class="card">
<div class="card-title">⚙️ How WFA Adds Value</div>
<ol class="step-list">
<li><span class="step-num">1</span>Define a workflow once with all required steps (volume creation, security style, share creation, ACL setup, export policy)</li>
<li><span class="step-num">2</span>Encode your organization's standards into the workflow as non-negotiable defaults</li>
<li><span class="step-num">3</span>Operations teams execute the workflow by filling in only the variable inputs (volume name, size, SVM name)</li>
<li><span class="step-num">4</span>WFA executes every step in sequence and emails a completion report with all the details</li>
</ol>
</div>
<div class="callout tip">
<div class="callout-icon">💡</div>
<div class="callout-content">
<div class="callout-title">WFA Skills for Your Resume</div>
<div class="callout-text">Configuring WFA workflows requires scripting knowledge (Perl, Shell, or Python) along with SQL for the internal data source queries. Organizations using WFA heavily often delegate all day-to-day storage provisioning to operations teams via WFA, with storage architects only involved for complex or non-standard requests.</div>
</div>
</div>
<h3>OnCommand Insight (OCI) — Datacenter Intelligence</h3>
<p>OCI is not an ONTAP-exclusive tool. It is a datacenter-wide infrastructure monitoring platform that can collect performance and capacity data from <strong style="color:var(--text-primary)">heterogeneous storage arrays</strong> (NetApp, Dell EMC, HPE, Pure Storage, IBM), network switches (Brocade, Cisco), and servers. This makes it invaluable in large environments with multi-vendor infrastructure.</p>
<div class="grid-3">
<div class="stat-card">
<div class="stat-num" style="color:var(--accent-teal)">Multi</div>
<div class="stat-label">Vendor Storage Support</div>
</div>
<div class="stat-card">
<div class="stat-num" style="color:var(--accent-blue)">360°</div>
<div class="stat-label">Infrastructure Visibility</div>
</div>
<div class="stat-card">
<div class="stat-num" style="color:var(--accent-purple)">1 Pane</div>
<div class="stat-label">All DC Monitoring</div>
</div>
</div>
</section>
<!-- ===== SECTION 9 ===== -->
<section class="section" id="s9">
<div class="section-header">
<div class="section-icon icon-orange">🔧</div>
<div class="section-title-wrap">
<div class="section-num">SECTION 09</div>
<h2>CIFS / SMB Troubleshooting Guide</h2>
</div>
</div>
<p>CIFS is the most complex protocol to troubleshoot in ONTAP environments due to its dependency on Active Directory, Kerberos authentication, DNS resolution, antivirus scanning, and Windows ACL semantics. Here is a structured approach to the most common issue categories.</p>
<div class="diagram-wrap">