Repository navigation
Expand file tree
/
Copy pathnetapp-tutorial13.html
More file actions
1042 lines (951 loc) · 76.1 KB
/
Copy pathnetapp-tutorial13.html
File metadata and controls
1042 lines (951 loc) · 76.1 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>NetApp ONTAP — Tutorial 13: LIF Migration, ifgrp, VLANs & iSCSI SAN</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-blue),var(--accent-teal),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-teal),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-blue)}
.toc-link.active{background:rgba(88,166,255,.1);color:var(--accent-blue);border-left-color:var(--accent-blue);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-teal);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%,#0d1f30 50%,#0d1a2e 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(88,166,255,.07) 0%,transparent 60%),radial-gradient(ellipse at 20% 80%,rgba(57,211,195,.06) 0%,transparent 50%)}
.header-badge{display:inline-flex;align-items:center;gap:6px;background:rgba(88,166,255,.12);border:1px solid rgba(88,166,255,.3);border-radius:20px;padding:4px 14px;font-size:12px;color:var(--accent-blue);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%,#58a6ff 55%,#39d3c3 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)}
.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(57,211,195,.15);border:1px solid rgba(57,211,195,.3);color:var(--accent-teal);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-teal);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-teal);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}
.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-x:auto}
.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(57,211,195,.06);border:1px solid rgba(57,211,195,.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(57,211,195,.1);border:1px solid rgba(57,211,195,.3);color:var(--accent-teal);border-radius:6px;padding:6px 14px;font-size:12px;cursor:pointer;font-family:'JetBrains Mono',monospace;transition:all .2s}
.quiz-btn:hover{background:rgba(57,211,195,.2)}
.timeline{position:relative;padding-left:28px;margin:20px 0}
.timeline::before{content:'';position:absolute;left:8px;top:0;bottom:0;width:2px;background:linear-gradient(to bottom,var(--accent-teal),var(--accent-blue));border-radius:2px}
.tl-item{position:relative;padding:0 0 24px 20px}
.tl-item::before{content:'';position:absolute;left:-24px;top:4px;width:12px;height:12px;border-radius:50%;background:var(--accent-teal);border:2px solid var(--bg-primary);box-shadow:0 0 0 3px rgba(57,211,195,.2)}
.tl-title{font-size:14px;font-weight:600;color:var(--text-primary);margin-bottom:4px}
.tl-body{font-size:13px;color:var(--text-secondary);line-height:1.6}
.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(57,211,195,.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-teal);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(88,166,255,.1);border:1px solid rgba(88,166,255,.25);color:var(--accent-blue);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(57,211,195,.1);border:1px solid rgba(57,211,195,.3);color:var(--accent-teal);border-radius:8px;padding:8px 16px;font-size:13px;text-decoration:none;transition:all .2s;margin-bottom:20px}
.contact-link:hover{background:rgba(57,211,195,.2)}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.3}}
.lif-anim{display:flex;align-items:center;justify-content:center;gap:12px;padding:20px}
.lif-port{background:var(--bg-secondary);border:2px solid var(--border);border-radius:8px;padding:10px 18px;font-family:'JetBrains Mono',monospace;font-size:13px;color:var(--text-primary)}
.lif-port.active{border-color:var(--accent-teal);color:var(--accent-teal)}
.lif-arrow{font-size:20px;color:var(--accent-blue);animation:pulse 1.5s infinite}
@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>NetApp Series</span>
</div>
<div class="sidebar-subtitle">Tutorial 13 · Networking & SAN</div>
</div>
<div class="toc-nav">
<div class="toc-section-label">LIF Management</div>
<a class="toc-link" href="#s1"><span class="toc-num">01</span>LIF Types & Mobility Rules</a>
<a class="toc-link sub" href="#s1"><span class="toc-num">↳</span>Migrate & Revert Commands</a>
<div class="toc-section-label">Interface Groups</div>
<a class="toc-link" href="#s2"><span class="toc-num">02</span>ifgrp — Interface Grouping</a>
<a class="toc-link sub" href="#s2"><span class="toc-num">↳</span>Modes: Single / Multi / LACP</a>
<a class="toc-link sub" href="#s2"><span class="toc-num">↳</span>Configuring ifgrp CLI</a>
<div class="toc-section-label">VLANs on ONTAP</div>
<a class="toc-link" href="#s3"><span class="toc-num">03</span>VLAN Ports in ONTAP</a>
<a class="toc-link sub" href="#s3"><span class="toc-num">↳</span>VLAN on ifgrp & Physical Port</a>
<div class="toc-section-label">iSCSI SAN</div>
<a class="toc-link" href="#s4"><span class="toc-num">04</span>SAN Protocols — iSCSI vs FCP</a>
<a class="toc-link" href="#s5"><span class="toc-num">05</span>iSCSI Configuration Steps</a>
<a class="toc-link sub" href="#s5"><span class="toc-num">↳</span>LIF & vServer Setup</a>
<a class="toc-link sub" href="#s5"><span class="toc-num">↳</span>Initiator Connection</a>
<a class="toc-link" href="#s6"><span class="toc-num">06</span>LUN Provisioning & iGroup</a>
<a class="toc-link sub" href="#s6"><span class="toc-num">↳</span>iGroup Mapping</a>
<a class="toc-link sub" href="#s6"><span class="toc-num">↳</span>LUN Resize Best Practices</a>
<a class="toc-link" href="#s7"><span class="toc-num">07</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">NetApp Tutorial Series</div>
<a class="series-link" href="https://mohammedabdularchitect.github.io/NetAppTutorials/index.html" target="_blank">📋 Series Index</a>
<a class="series-link" href="https://mohammedabdularchitect.github.io/NetAppTutorials/netapp-tutorial6.html" target="_blank">← Tutorial 12</a>
<a class="series-link current" href="#">Tutorial 13 (Current)</a>
</div>
</nav>
<!-- MAIN -->
<div class="main-content">
<header class="top-header">
<div class="header-badge">📘 Tutorial 13 · NetApp ONTAP Administration</div>
<h1 class="main-title">LIF Migration, Interface Groups,<br>VLANs & iSCSI SAN</h1>
<p class="header-desc">A hands-on walkthrough of logical interface mobility, port aggregation with interface groups, VLAN segmentation on ONTAP, and a complete end-to-end iSCSI SAN provisioning workflow — from license validation to LUN presentation on the server side.</p>
<div class="header-meta">
<div class="meta-chip"><span class="dot" style="background:var(--accent-teal)"></span>LIF Migration</div>
<div class="meta-chip"><span class="dot" style="background:var(--accent-blue)"></span>Interface Groups</div>
<div class="meta-chip"><span class="dot" style="background:var(--accent-purple)"></span>VLANs</div>
<div class="meta-chip"><span class="dot" style="background:var(--accent-orange)"></span>iSCSI SAN</div>
</div>
<div class="prog-chips">
<span class="prog-chip">ONTAP 9.x</span>
<span class="prog-chip">LIF Failover</span>
<span class="prog-chip">ifgrp / LAG</span>
<span class="prog-chip">LACP 802.3ad</span>
<span class="prog-chip">VLAN 802.1Q</span>
<span class="prog-chip">iSCSI</span>
<span class="prog-chip">LUN</span>
<span class="prog-chip">iGroup</span>
<span class="prog-chip">IQN</span>
</div>
</header>
<div class="content-area">
<!-- ═══ SECTION 1 ═══ -->
<section class="section" id="s1">
<div class="section-header">
<div class="section-icon icon-teal">🔀</div>
<div class="section-title-wrap">
<div class="section-num">SECTION 01</div>
<h2>LIF Types & Mobility Rules</h2>
</div>
</div>
<p>A LIF (Logical Interface) is the IP identity of a vServer on the network. Each LIF is anchored to a home port but can be moved — either manually by an administrator or automatically by ONTAP during a failure. Understanding which LIF types support movement is essential for resilient network design.</p>
<table class="spec-table">
<thead>
<tr><th>LIF Type</th><th>Purpose</th><th>Can Migrate?</th><th>Can Failover?</th></tr>
</thead>
<tbody>
<tr><td>Cluster LIF</td><td>Internal node-to-node communication</td><td><span class="badge badge-green">Yes</span></td><td><span class="badge badge-green">Yes</span></td></tr>
<tr><td>Cluster Mgmt LIF</td><td>Single IP to manage the entire cluster</td><td><span class="badge badge-green">Yes</span></td><td><span class="badge badge-green">Yes</span></td></tr>
<tr><td>Data LIF</td><td>NAS / SAN client data access</td><td><span class="badge badge-green">Yes</span></td><td><span class="badge badge-green">Yes</span></td></tr>
<tr><td>Node Mgmt LIF</td><td>Per-node management access</td><td><span class="badge badge-orange">No</span></td><td><span class="badge badge-orange">No</span></td></tr>
<tr><td>Intercluster LIF</td><td>SnapMirror / cluster peering traffic</td><td><span class="badge badge-orange">No</span></td><td><span class="badge badge-orange">No</span></td></tr>
</tbody>
</table>
<div class="callout warning">
<div class="callout-icon">⚠️</div>
<div class="callout-content">
<div class="callout-title">Node Mgmt & Intercluster LIFs — No Failover</div>
<div class="callout-text">If the port hosting a Node Management or Intercluster LIF goes down, that IP becomes unreachable until the port recovers. These LIFs cannot move. Design physical redundancy (dual uplinks, bonding) for ports that carry these LIF types.</div>
</div>
</div>
<h3>Manual LIF Migration</h3>
<p>Cluster, Cluster Management, and Data LIFs can be manually moved between ports or nodes. This is a non-disruptive operation — client connections pause for milliseconds and resume automatically. The target port must be in the same broadcast domain as the source port.</p>
<div class="diagram-wrap">
<div class="lif-anim">
<div class="lif-port active">node-a : e0d</div>
<div class="lif-arrow">⟶ LIF migrating ⟶</div>
<div class="lif-port">node-a : e0f</div>
</div>
<div class="diagram-caption">LIF moves between ports within the same broadcast domain — zero planned downtime</div>
</div>
<div class="code-block">
<div class="code-header">
<span class="code-lang">ONTAP CLI — Migrate & Revert LIFs</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"># Migrate a specific LIF to another port</span>
<span class="prompt">cluster1::></span> <span class="cmd">network interface migrate</span> \
<span class="param">-vserver</span> <span class="value">svm_prod</span> \
<span class="param">-lif</span> <span class="value">data_lif_01</span> \
<span class="param">-destination-node</span> <span class="value">node-b</span> \
<span class="param">-destination-port</span> <span class="value">e0f</span>
<span class="comment"># Verify — is_home = false means LIF is not on its home port</span>
<span class="prompt">cluster1::></span> <span class="cmd">network interface show</span> <span class="param">-vserver</span> <span class="value">svm_prod</span>
<span class="comment"># Revert a single LIF back to its home port</span>
<span class="prompt">cluster1::></span> <span class="cmd">network interface revert</span> \
<span class="param">-vserver</span> <span class="value">svm_prod</span> \
<span class="param">-lif</span> <span class="value">data_lif_01</span>
<span class="comment"># Revert ALL LIFs across ALL vServers to home port at once</span>
<span class="prompt">cluster1::></span> <span class="cmd">network interface revert</span> \
<span class="param">-vserver</span> <span class="value">*</span> \
<span class="param">-lif</span> <span class="value">*</span></div>
</div>
<div class="callout info">
<div class="callout-icon">💡</div>
<div class="callout-content">
<div class="callout-title">Migrating the Cluster Mgmt LIF Disconnects Your Session</div>
<div class="callout-text">Your SSH/CLI session connects via the Cluster Management IP. Moving that LIF will drop your session — the IP itself moves to another port. Reconnect within seconds. To avoid this, log in via a Node Management LIF first, then migrate the Cluster Management LIF.</div>
</div>
</div>
<div class="diagram-wrap">
<div class="mermaid">
graph LR
subgraph BD["Broadcast Domain: BD_DATA"]
A["node-a : e0d"] --- B["node-a : e0f"]
B --- C["node-b : e0d"]
C --- D["node-b : e0f"]
end
LIF(["Data LIF\n10.10.20.50"]) -->|can migrate to| B
LIF -->|can migrate to| C
LIF -->|can migrate to| D
style BD fill:#1c2333,stroke:#39d3c3,color:#e6edf3
style LIF fill:#0d2035,stroke:#58a6ff,color:#58a6ff
</div>
<div class="diagram-caption">LIF migration is restricted to ports sharing the same broadcast domain</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>Interface Groups (ifgrp)</h2>
</div>
</div>
<p>An interface group (ifgrp) — also called a Link Aggregation Group (LAG) — combines two or more physical ports into a single logical port. This delivers two key benefits: increased aggregate bandwidth and link-level redundancy. If one member port fails, traffic continues uninterrupted through the remaining ports.</p>
<h3>ifgrp Modes</h3>
<div class="grid-3">
<div class="stat-card">
<div class="stat-num" style="color:var(--accent-teal);font-size:17px;">Single-Mode</div>
<div class="stat-label" style="margin-top:10px;font-size:12px;color:var(--text-secondary);text-transform:none;letter-spacing:0">Active + Standby. One port carries traffic; the rest wait. Failover on link loss. No special switch config needed.</div>
</div>
<div class="stat-card">
<div class="stat-num" style="color:var(--accent-blue);font-size:17px;">Multi-Mode</div>
<div class="stat-label" style="margin-top:10px;font-size:12px;color:var(--text-secondary);text-transform:none;letter-spacing:0">All ports active simultaneously. Load balanced using MAC or IP hashing. No switch LACP required.</div>
</div>
<div class="stat-card">
<div class="stat-num" style="color:var(--accent-purple);font-size:17px;">LACP (802.3ad)</div>
<div class="stat-label" style="margin-top:10px;font-size:12px;color:var(--text-secondary);text-transform:none;letter-spacing:0">Dynamic negotiation with the switch. Best resiliency and traffic distribution. Requires switch port-channel config.</div>
</div>
</div>
<div class="callout success">
<div class="callout-icon">✅</div>
<div class="callout-content">
<div class="callout-title">Best Practice — Use LACP in Production</div>
<div class="callout-text">LACP provides dynamic failover detection and optimal traffic distribution. It requires coordinating with your network team to configure matching port-channel settings on the upstream switch. Always align mode and distribution function before deployment.</div>
</div>
</div>
<div class="svg-wrap">
<svg viewBox="0 0 700 260" xmlns="http://www.w3.org/2000/svg" style="width:100%;max-width:700px;display:block;margin:auto">
<defs>
<marker id="arr1" markerWidth="8" markerHeight="8" refX="6" refY="3" orient="auto"><path d="M0,0 L0,6 L8,3 z" fill="#39d3c3"/></marker>
</defs>
<!-- Controller -->
<rect x="30" y="80" width="170" height="110" rx="10" fill="#1c2333" stroke="#58a6ff" stroke-width="1.5"/>
<text x="115" y="68" text-anchor="middle" fill="#8b949e" font-size="11" font-family="sans-serif">ONTAP Controller</text>
<rect x="50" y="98" width="60" height="28" rx="5" fill="#0d2035" stroke="#58a6ff" stroke-width="1"/>
<text x="80" y="117" text-anchor="middle" fill="#58a6ff" font-size="11" font-family="monospace">e0a</text>
<rect x="130" y="98" width="60" height="28" rx="5" fill="#0d2035" stroke="#58a6ff" stroke-width="1"/>
<text x="160" y="117" text-anchor="middle" fill="#58a6ff" font-size="11" font-family="monospace">e0b</text>
<text x="115" y="158" text-anchor="middle" fill="#6e7681" font-size="10" font-family="sans-serif">Physical Ports</text>
<!-- ifgrp box -->
<rect x="265" y="95" width="140" height="50" rx="8" fill="#0d2035" stroke="#39d3c3" stroke-width="2"/>
<text x="335" y="117" text-anchor="middle" fill="#39d3c3" font-size="12" font-family="monospace" font-weight="bold">a0a (ifgrp)</text>
<text x="335" y="135" text-anchor="middle" fill="#6e7681" font-size="10" font-family="monospace">Logical / Virtual Port</text>
<!-- LIF box -->
<rect x="460" y="95" width="120" height="50" rx="8" fill="#0d2035" stroke="#bc8cff" stroke-width="1.5"/>
<text x="520" y="117" text-anchor="middle" fill="#bc8cff" font-size="12" font-family="monospace">LIF</text>
<text x="520" y="135" text-anchor="middle" fill="#6e7681" font-size="10" font-family="monospace">10.20.30.50/24</text>
<!-- Lines -->
<line x1="110" y1="126" x2="265" y2="115" stroke="#58a6ff" stroke-width="1.5" stroke-dasharray="5,3"/>
<line x1="160" y1="126" x2="265" y2="125" stroke="#58a6ff" stroke-width="1.5" stroke-dasharray="5,3"/>
<line x1="405" y1="120" x2="460" y2="120" stroke="#39d3c3" stroke-width="2" marker-end="url(#arr1)"/>
<!-- Labels -->
<text x="335" y="200" text-anchor="middle" fill="#e3b341" font-size="11" font-family="monospace">Two physical ports → one logical port → one LIF IP</text>
<text x="335" y="220" text-anchor="middle" fill="#6e7681" font-size="10" font-family="sans-serif">Redundancy + Aggregated Bandwidth</text>
</svg>
<div class="diagram-caption">Interface Group: two physical ports become one logical port hosting a single LIF</div>
</div>
<h3>Configuring an Interface Group — CLI</h3>
<div class="code-block">
<div class="code-header">
<span class="code-lang">ONTAP CLI — Create & Verify ifgrp</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"># Step 1: Create the ifgrp on the node</span>
<span class="prompt">cluster1::></span> <span class="cmd">network port ifgrp create</span> \
<span class="param">-node</span> <span class="value">node-a</span> \
<span class="param">-ifgrpname</span> <span class="value">a0a</span> \
<span class="param">-mode</span> <span class="value">multimode_lacp</span> \
<span class="param">-distr-func</span> <span class="value">ip</span>
<span class="comment"># Step 2: Add member ports</span>
<span class="prompt">cluster1::></span> <span class="cmd">network port ifgrp add-port</span> \
<span class="param">-node</span> <span class="value">node-a</span> <span class="param">-ifgrpname</span> <span class="value">a0a</span> <span class="param">-port</span> <span class="value">e0a</span>
<span class="prompt">cluster1::></span> <span class="cmd">network port ifgrp add-port</span> \
<span class="param">-node</span> <span class="value">node-a</span> <span class="param">-ifgrpname</span> <span class="value">a0a</span> <span class="param">-port</span> <span class="value">e0b</span>
<span class="comment"># Step 3: Add ifgrp to a broadcast domain</span>
<span class="prompt">cluster1::></span> <span class="cmd">network port broadcast-domain add-ports</span> \
<span class="param">-broadcast-domain</span> <span class="value">Default</span> \
<span class="param">-ports</span> <span class="value">node-a:a0a</span>
<span class="comment"># Step 4: Verify</span>
<span class="prompt">cluster1::></span> <span class="cmd">network port ifgrp show</span>
<span class="output">Node Ifgrp Distr-Func Mode Ports
------ ----- ---------- -------------- --------
node-a a0a ip multimode_lacp e0a, e0b</span></div>
</div>
</section>
<!-- ═══ SECTION 3 ═══ -->
<section class="section" id="s3">
<div class="section-header">
<div class="section-icon icon-purple">🏷️</div>
<div class="section-title-wrap">
<div class="section-num">SECTION 03</div>
<h2>VLAN Ports in ONTAP</h2>
</div>
</div>
<p>VLANs (802.1Q) allow a single physical port or ifgrp to carry traffic for multiple isolated networks simultaneously. ONTAP exposes each VLAN as a separate logical port (e.g., <code>a0a-10</code>, <code>a0a-20</code>). You configure LIFs on these VLAN ports to serve different IP subnets from the same physical hardware.</p>
<div class="callout info">
<div class="callout-icon">ℹ️</div>
<div class="callout-content">
<div class="callout-title">When Are VLANs Mandatory?</div>
<div class="callout-text">If you need LIFs from <strong>different IP subnets</strong> on the same port or ifgrp, you <strong>must</strong> use VLANs — ONTAP will reject the configuration otherwise. If both LIFs belong to the same subnet, VLANs are optional. This is a common scenario when a single ifgrp must carry both NFS traffic (192.168.10.x) and iSCSI traffic (10.50.10.x).</div>
</div>
</div>
<div class="svg-wrap">
<svg viewBox="0 0 720 300" xmlns="http://www.w3.org/2000/svg" style="width:100%;max-width:720px;display:block;margin:auto">
<defs>
<marker id="arr2" markerWidth="8" markerHeight="8" refX="6" refY="3" orient="auto"><path d="M0,0 L0,6 L8,3 z" fill="#e3b341"/></marker>
<marker id="arr3" markerWidth="8" markerHeight="8" refX="6" refY="3" orient="auto"><path d="M0,0 L0,6 L8,3 z" fill="#bc8cff"/></marker>
</defs>
<!-- ifgrp -->
<rect x="20" y="115" width="130" height="40" rx="8" fill="#0d2035" stroke="#39d3c3" stroke-width="1.5"/>
<text x="85" y="140" text-anchor="middle" fill="#39d3c3" font-size="12" font-family="monospace">a0a (ifgrp)</text>
<!-- VLAN 10 -->
<rect x="210" y="60" width="130" height="38" rx="8" fill="#0d2035" stroke="#e3b341" stroke-width="1.5"/>
<text x="275" y="83" text-anchor="middle" fill="#e3b341" font-size="12" font-family="monospace">a0a-10 (VLAN 10)</text>
<!-- VLAN 20 -->
<rect x="210" y="172" width="130" height="38" rx="8" fill="#0d2035" stroke="#bc8cff" stroke-width="1.5"/>
<text x="275" y="195" text-anchor="middle" fill="#bc8cff" font-size="12" font-family="monospace">a0a-20 (VLAN 20)</text>
<!-- Lines from ifgrp -->
<line x1="150" y1="130" x2="210" y2="79" stroke="#58a6ff" stroke-width="1.5" stroke-dasharray="5,3"/>
<line x1="150" y1="140" x2="210" y2="191" stroke="#58a6ff" stroke-width="1.5" stroke-dasharray="5,3"/>
<!-- LIF boxes -->
<rect x="400" y="48" width="175" height="50" rx="8" fill="#1c2333" stroke="#e3b341" stroke-width="1"/>
<text x="487" y="70" text-anchor="middle" fill="#e3b341" font-size="11" font-family="monospace">LIF: 192.168.10.21/24</text>
<text x="487" y="87" text-anchor="middle" fill="#6e7681" font-size="10" font-family="sans-serif">NFS / CIFS traffic</text>
<rect x="400" y="160" width="175" height="50" rx="8" fill="#1c2333" stroke="#bc8cff" stroke-width="1"/>
<text x="487" y="182" text-anchor="middle" fill="#bc8cff" font-size="11" font-family="monospace">LIF: 10.50.10.21/24</text>
<text x="487" y="199" text-anchor="middle" fill="#6e7681" font-size="10" font-family="sans-serif">iSCSI traffic</text>
<!-- Arrows -->
<line x1="340" y1="79" x2="400" y2="72" stroke="#e3b341" stroke-width="1.5" marker-end="url(#arr2)"/>
<line x1="340" y1="191" x2="400" y2="185" stroke="#bc8cff" stroke-width="1.5" marker-end="url(#arr3)"/>
<text x="360" y="265" text-anchor="middle" fill="#8b949e" font-size="11" font-family="sans-serif">Single ifgrp serving two isolated networks via VLAN sub-interfaces</text>
</svg>
<div class="diagram-caption">VLAN sub-ports enable multi-subnet LIF configuration on a single ifgrp</div>
</div>
<div class="code-block">
<div class="code-header">
<span class="code-lang">ONTAP CLI — VLANs on ifgrp & Physical Port</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 VLAN ports on ifgrp a0a (node-a)</span>
<span class="prompt">cluster1::></span> <span class="cmd">network port vlan create</span> \
<span class="param">-node</span> <span class="value">node-a</span> <span class="param">-vlan-name</span> <span class="value">a0a-10</span>
<span class="prompt">cluster1::></span> <span class="cmd">network port vlan create</span> \
<span class="param">-node</span> <span class="value">node-a</span> <span class="param">-vlan-name</span> <span class="value">a0a-20</span>
<span class="comment"># Verify VLAN ports</span>
<span class="prompt">cluster1::></span> <span class="cmd">network port vlan show</span>
<span class="output">Node VLAN-Name Base-Port VLAN-ID MTU
------ --------- --------- ------- ----
node-a a0a-10 a0a 10 1500
node-a a0a-20 a0a 20 1500</span>
<span class="comment"># Add VLAN ports to broadcast domain</span>
<span class="prompt">cluster1::></span> <span class="cmd">network port broadcast-domain add-ports</span> \
<span class="param">-broadcast-domain</span> <span class="value">Default</span> \
<span class="param">-ports</span> <span class="value">node-a:a0a-10,node-a:a0a-20</span>
<span class="comment"># Create LIF on VLAN 10 port (192.168.10.x subnet)</span>
<span class="prompt">cluster1::></span> <span class="cmd">network interface create</span> \
<span class="param">-vserver</span> <span class="value">svm_prod</span> \
<span class="param">-lif</span> <span class="value">lif_vlan10</span> \
<span class="param">-home-node</span> <span class="value">node-a</span> \
<span class="param">-home-port</span> <span class="value">a0a-10</span> \
<span class="param">-address</span> <span class="value">192.168.10.21</span> \
<span class="param">-netmask-length</span> <span class="value">24</span> \
<span class="param">-status-admin</span> <span class="value">up</span>
<span class="comment"># ── VLAN on a physical port (node-b / e0e) ──────────────────</span>
<span class="prompt">cluster1::></span> <span class="cmd">network port vlan create</span> \
<span class="param">-node</span> <span class="value">node-b</span> <span class="param">-vlan-name</span> <span class="value">e0e-10</span>
<span class="prompt">cluster1::></span> <span class="cmd">network port vlan create</span> \
<span class="param">-node</span> <span class="value">node-b</span> <span class="param">-vlan-name</span> <span class="value">e0e-120</span>
<span class="comment"># VLAN ports appear as logical ports in port show</span>
<span class="prompt">cluster1::></span> <span class="cmd">network port show</span> <span class="param">-node</span> <span class="value">node-b</span>
<span class="output">Port Type Speed Health
-------- -------- ------ -------
e0e physical 10Gb healthy
e0e-10 vlan 10Gb healthy
e0e-120 vlan 10Gb healthy</span></div>
</div>
<div class="callout tip">
<div class="callout-icon">📝</div>
<div class="callout-content">
<div class="callout-title">VLAN IDs Must Match the Network Switch</div>
<div class="callout-text">VLAN IDs configured on ONTAP must match the VLAN IDs trunked on the upstream switch port. Mismatched VLAN IDs mean tagged frames are dropped silently — the LIF will appear up but traffic will not flow. Always coordinate VLAN numbering with your network team.</div>
</div>
</div>
</section>
<!-- ═══ SECTION 4 ═══ -->
<section class="section" id="s4">
<div class="section-header">
<div class="section-icon icon-orange">💾</div>
<div class="section-title-wrap">
<div class="section-num">SECTION 04</div>
<h2>SAN Protocols — iSCSI vs FCP</h2>
</div>
</div>
<p>SAN (Storage Area Network) delivers block-level storage to servers. The server sees a raw disk device — it formats it with its own filesystem (NTFS, ext4, etc.) just like a local drive. ONTAP supports two SAN protocols: iSCSI over IP, and Fiber Channel Protocol (FCP) over a dedicated FC fabric.</p>
<div class="grid-2">
<div class="card">
<div class="card-title">🌐 iSCSI</div>
<ul class="bullet-list">
<li>Runs over existing IP/LAN — no new fabric needed</li>
<li>Uses standard Ethernet NICs and switches</li>
<li>Cost-effective SAN — ideal for budget-conscious deployments</li>
<li>Devices identified by <strong>IQN</strong> (iSCSI Qualified Name)</li>
<li>Non-routable — servers must be co-located with storage on a dedicated LAN or VLAN</li>
</ul>
</div>
<div class="card">
<div class="card-title">⚡ FCP (Fiber Channel Protocol)</div>
<ul class="bullet-list">
<li>Requires a separate dedicated SAN fabric (FC switches)</li>
<li>Servers need HBAs; storage needs FC adapters — both expensive</li>
<li>Devices identified by <strong>WWPN</strong> (World Wide Port Name)</li>
<li>Highest performance and isolation for mission-critical workloads</li>
<li>Preferred in large enterprises where cost is not the primary constraint</li>
</ul>
</div>
</div>
<div class="diagram-wrap">
<div class="mermaid">
graph TB
subgraph ISCSI["iSCSI — Uses Existing IP Network"]
direction LR
SRV1["App Server\n(Standard NIC)"] -->|IP / LAN / VLAN| SW1["Ethernet Switch"]
SW1 --> ONTAP1["ONTAP vServer\niSCSI LIFs"]
end
subgraph FCP["FCP — Dedicated SAN Fabric"]
direction LR
SRV2["App Server\n(HBA installed)"] -->|Fiber Channel| FC_SW["FC SAN Switch"]
FC_SW --> ONTAP2["ONTAP Node\nFC Adapters"]
end
style ISCSI fill:#0d1f30,stroke:#39d3c3,color:#e6edf3
style FCP fill:#1c1a2e,stroke:#bc8cff,color:#e6edf3
</div>
<div class="diagram-caption">iSCSI leverages your existing IP network; FCP requires a dedicated fiber channel fabric</div>
</div>
<div class="callout warning">
<div class="callout-icon">⚠️</div>
<div class="callout-content">
<div class="callout-title">iSCSI Is Non-Routable — Same Location Required</div>
<div class="callout-text">Unlike CIFS or NFS, iSCSI traffic cannot be routed across WAN links or between geographically separated sites. Servers using iSCSI must be in the same data center as the storage, connected via a dedicated VLAN or isolated LAN segment. This is a hard architectural constraint — not a recommendation.</div>
</div>
</div>
</section>
<!-- ═══ SECTION 5 ═══ -->
<section class="section" id="s5">
<div class="section-header">
<div class="section-icon icon-teal">⚙️</div>
<div class="section-title-wrap">
<div class="section-num">SECTION 05</div>
<h2>iSCSI Configuration Walkthrough</h2>
</div>
</div>
<p>Configuring iSCSI on ONTAP follows a clear, sequential process. Each step below builds on the previous one — validate before configuring, configure before provisioning.</p>
<div class="timeline">
<div class="tl-item">
<div class="tl-title">Step 1 — Validate iSCSI License</div>
<div class="tl-body">Confirm the iSCSI protocol license is active on both controllers before creating any resources.</div>
</div>
<div class="tl-item">
<div class="tl-title">Step 2 — Create Dedicated iSCSI LIFs</div>
<div class="tl-body">iSCSI requires its own LIFs. Use service policy <code>default-data-blocks</code> and data protocol <code>iscsi</code>. These LIFs cannot be shared with NAS protocols. Typically 2 per node (one per port) for multipath.</div>
</div>
<div class="tl-item">
<div class="tl-title">Step 3 — Enable iSCSI Service on the vServer</div>
<div class="tl-body">Run <code>vserver iscsi create</code>. This assigns a unique IQN address to the vServer — the identifier that servers use to discover and connect to storage.</div>
</div>
<div class="tl-item">
<div class="tl-title">Step 4 — Verify iSCSI Interface Status</div>
<div class="tl-body">Confirm all iSCSI LIFs show <code>enabled: true</code>. Manually enable if needed with <code>vserver iscsi interface enable</code>.</div>
</div>
<div class="tl-item">
<div class="tl-title">Step 5 — Provide LIF IPs to the Server Team</div>
<div class="tl-body">Hand the iSCSI LIF IP addresses to the server/application team. They configure the iSCSI Initiator software on the host and add these IPs to the discovery portal.</div>
</div>
<div class="tl-item">
<div class="tl-title">Step 6 — Validate Active Initiator Sessions</div>
<div class="tl-body">Run <code>vserver iscsi initiator show</code>. If the server IQN appears here, the iSCSI session is established. If not — troubleshoot firewall, port 3260, or IP reachability.</div>
</div>
<div class="tl-item">
<div class="tl-title">Step 7 — Create iGroup, Volume, LUN, and Map</div>
<div class="tl-body">Provision block storage: create volume → create LUN → create iGroup (add server IQN) → map LUN to iGroup with a LUN ID.</div>
</div>
</div>
<div class="callout teal">
<div class="callout-icon">📌</div>
<div class="callout-content">
<div class="callout-title">iSCSI Requires Dedicated LIFs</div>
<div class="callout-text">You cannot run iSCSI and NAS (CIFS/NFS) on the same LIF. iSCSI LIFs use <code>default-data-blocks</code>; NAS LIFs use <code>default-data-files</code>. Separate them at the port level for traffic isolation and clean troubleshooting.</div>
</div>
</div>
<h3>CLI — iSCSI LIF Creation & vServer Service</h3>
<div class="code-block">
<div class="code-header">
<span class="code-lang">ONTAP CLI — iSCSI 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"># Validate iSCSI license on both controllers</span>
<span class="prompt">cluster1::></span> <span class="cmd">license show</span> | <span class="cmd">grep</span> <span class="value">iscsi</span>
<span class="comment"># Check existing iSCSI configuration on vServers</span>
<span class="prompt">cluster1::></span> <span class="cmd">vserver iscsi show</span>
<span class="comment"># Create iSCSI LIF on node-a port e0f</span>
<span class="prompt">cluster1::></span> <span class="cmd">network interface create</span> \
<span class="param">-vserver</span> <span class="value">svm_prod</span> \
<span class="param">-lif</span> <span class="value">iscsi_lif_01</span> \
<span class="param">-service-policy</span> <span class="value">default-data-blocks</span> \
<span class="param">-data-protocol</span> <span class="value">iscsi</span> \
<span class="param">-home-node</span> <span class="value">node-a</span> \
<span class="param">-home-port</span> <span class="value">e0f</span> \
<span class="param">-address</span> <span class="value">10.50.10.21</span> \
<span class="param">-netmask</span> <span class="value">255.255.255.0</span>
<span class="comment"># Additional LIFs for multipath (node-a e0g, node-b e0f, node-b e0g)</span>
<span class="prompt">cluster1::></span> <span class="cmd">network interface create</span> \
<span class="param">-vserver</span> <span class="value">svm_prod</span> <span class="param">-lif</span> <span class="value">iscsi_lif_02</span> \
<span class="param">-service-policy</span> <span class="value">default-data-blocks</span> <span class="param">-data-protocol</span> <span class="value">iscsi</span> \
<span class="param">-home-node</span> <span class="value">node-a</span> <span class="param">-home-port</span> <span class="value">e0g</span> \
<span class="param">-address</span> <span class="value">10.50.10.22</span> <span class="param">-netmask</span> <span class="value">255.255.255.0</span>
<span class="comment"># Enable iSCSI service on vServer — this assigns the IQN address</span>
<span class="prompt">cluster1::></span> <span class="cmd">vserver iscsi create</span> \
<span class="param">-vserver</span> <span class="value">svm_prod</span> \
<span class="param">-status-admin</span> <span class="value">up</span>
<span class="comment"># View the vServer IQN address (provide this to server team if requested)</span>
<span class="prompt">cluster1::></span> <span class="cmd">vserver iscsi show</span> <span class="param">-vserver</span> <span class="value">svm_prod</span>
<span class="output">Vserver Target Name (IQN) Status
------- -------------------------------------------- ------
svm_prod iqn.1992-08.com.netapp:sn.x7b3c9:vs.3 up</span>
<span class="comment"># Verify all iSCSI LIFs are enabled</span>
<span class="prompt">cluster1::></span> <span class="cmd">vserver iscsi interface show</span> <span class="param">-vserver</span> <span class="value">svm_prod</span>
<span class="output">Logical Interface IP Address Enabled
------------------ ------------- -------
iscsi_lif_01 10.50.10.21 true
iscsi_lif_02 10.50.10.22 true</span>
<span class="comment"># If not enabled, enable manually:</span>
<span class="prompt">cluster1::></span> <span class="cmd">vserver iscsi interface enable</span> \
<span class="param">-vserver</span> <span class="value">svm_prod</span> <span class="param">-lif</span> <span class="value">iscsi_lif_01</span>
<span class="comment"># Filter any LIF list by protocol</span>
<span class="prompt">cluster1::></span> <span class="cmd">network interface show</span> <span class="param">-data-protocol</span> <span class="value">iscsi</span></div>
</div>
<h3>Initiator Connection & IQN Validation</h3>
<p>Once the server team adds the iSCSI LIF IPs to their host's iSCSI Initiator software (built into Windows; installable on Linux), the host sends a discovery request to port 3260. ONTAP responds with its IQN. The session becomes active after the host clicks "Connect" and enables Multipath (MPIO).</p>
<div class="svg-wrap">
<svg viewBox="0 0 720 220" xmlns="http://www.w3.org/2000/svg" style="width:100%;max-width:720px;display:block;margin:auto">
<defs>
<marker id="arr4" markerWidth="8" markerHeight="8" refX="6" refY="3" orient="auto"><path d="M0,0 L0,6 L8,3 z" fill="#58a6ff"/></marker>
<marker id="arr5" markerWidth="8" markerHeight="8" refX="6" refY="3" orient="auto"><path d="M0,0 L0,6 L8,3 z" fill="#39d3c3"/></marker>
</defs>
<rect x="20" y="70" width="140" height="80" rx="10" fill="#1c2333" stroke="#58a6ff" stroke-width="1.5"/>
<text x="90" y="100" text-anchor="middle" fill="#e6edf3" font-size="12" font-family="sans-serif" font-weight="bold">App Server</text>
<text x="90" y="117" text-anchor="middle" fill="#6e7681" font-size="10" font-family="monospace">iSCSI Initiator</text>
<text x="90" y="134" text-anchor="middle" fill="#6e7681" font-size="10" font-family="monospace">Port 3260</text>
<rect x="295" y="85" width="130" height="50" rx="8" fill="#0d2035" stroke="#39d3c3" stroke-width="1.5"/>
<text x="360" y="108" text-anchor="middle" fill="#39d3c3" font-size="12" font-family="sans-serif">Dedicated</text>
<text x="360" y="125" text-anchor="middle" fill="#6e7681" font-size="10" font-family="monospace">iSCSI VLAN / LAN</text>
<rect x="570" y="60" width="135" height="100" rx="10" fill="#1c2333" stroke="#e3b341" stroke-width="1.5"/>
<text x="637" y="90" text-anchor="middle" fill="#e3b341" font-size="12" font-family="sans-serif" font-weight="bold">ONTAP vServer</text>
<text x="637" y="108" text-anchor="middle" fill="#6e7681" font-size="10" font-family="monospace">10.50.10.21/22</text>
<text x="637" y="125" text-anchor="middle" fill="#6e7681" font-size="10" font-family="monospace">IQN: iqn.1992...</text>
<text x="637" y="143" text-anchor="middle" fill="#6e7681" font-size="10" font-family="monospace">Port: 3260</text>
<line x1="160" y1="110" x2="295" y2="110" stroke="#58a6ff" stroke-width="2" marker-end="url(#arr4)"/>
<line x1="425" y1="110" x2="570" y2="110" stroke="#39d3c3" stroke-width="2" marker-end="url(#arr5)"/>
<text x="228" y="100" text-anchor="middle" fill="#6e7681" font-size="10" font-family="monospace">Discovery</text>
<text x="498" y="100" text-anchor="middle" fill="#6e7681" font-size="10" font-family="monospace">IQN Exchange</text>
<text x="360" y="190" text-anchor="middle" fill="#8b949e" font-size="11" font-family="sans-serif">After connect: run vserver iscsi initiator show to confirm server IQN visible</text>
</svg>
<div class="diagram-caption">iSCSI session establishment: server discovers target via LIF IPs and exchanges IQN addresses</div>
</div>
<div class="code-block">
<div class="code-header">
<span class="code-lang">ONTAP CLI — Validate Active Sessions</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"># Show server IQN numbers once sessions are established</span>
<span class="prompt">cluster1::></span> <span class="cmd">vserver iscsi initiator show</span>
<span class="output">Tpgroup Initiator Initiator-Name
----------- ------------------------------------------- ------------------
iscsi_lif_01 iqn.1991-05.com.microsoft:app-server-prod01 Windows Server
iscsi_lif_03 iqn.1991-05.com.microsoft:dc-server-01 Domain Controller</span>
<span class="comment"># If initiator show is empty — connection not established yet</span>
<span class="comment"># Check: firewall (port 3260), correct IPs added to initiator, LIF is up</span></div>
</div>
</section>
<!-- ═══ SECTION 6 ═══ -->
<section class="section" id="s6">
<div class="section-header">
<div class="section-icon icon-green">🗂️</div>
<div class="section-title-wrap">
<div class="section-num">SECTION 06</div>
<h2>LUN Provisioning & iGroup Mapping</h2>
</div>
</div>
<p>A LUN (Logical Unit Number) is the block-level storage object presented to SAN hosts. It lives inside an ONTAP volume (which acts as a thin container) and appears to the server as a raw disk. The server formats it with its native filesystem and uses it like any local drive.</p>
<div class="callout info">
<div class="callout-icon">ℹ️</div>
<div class="callout-content">
<div class="callout-title">Why Not Serve a Volume Directly Over SAN?</div>
<div class="callout-text">ONTAP volumes carry a filesystem (security style), making them file-level objects. SAN requires raw block access — no filesystem layer. A LUN inside a volume exposes just the raw block space. This is why you cannot present volumes or qtrees directly via iSCSI or FCP.</div>
</div>
</div>
<div class="diagram-wrap">
<div class="mermaid">
flowchart LR
A["1. Create Volume\nsize = LUN + overhead\nDisable snapshots"] --> B["2. Create LUN\nOS type, thick/thin\n50 GB example"]
B --> C["3. Create iGroup\nprotocol: iscsi\nAdd server IQN"]
C --> D["4. Map LUN\nto iGroup\nAssign LUN ID"]
D --> E["5. Server Rescan\nDisk appears\nOnline + Format"]
style A fill:#0d2035,stroke:#39d3c3,color:#e6edf3
style B fill:#0d2035,stroke:#58a6ff,color:#e6edf3
style C fill:#0d2035,stroke:#e3b341,color:#e6edf3
style D fill:#0d2035,stroke:#bc8cff,color:#e6edf3
style E fill:#0d2035,stroke:#3fb950,color:#e6edf3
</div>
<div class="diagram-caption">End-to-end LUN provisioning flow — from ONTAP configuration to host-visible disk</div>
</div>
<div class="code-block">
<div class="code-header">
<span class="code-lang">ONTAP CLI — Full LUN Provisioning</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"># Step 1: Create a volume — slightly larger than the target LUN size</span>
<span class="prompt">cluster1::></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">san_vol_01</span> \
<span class="param">-aggregate</span> <span class="value">aggr1_node_a</span> \
<span class="param">-size</span> <span class="value">52g</span> \
<span class="param">-percent-snapshot-space</span> <span class="value">0</span> \
<span class="param">-snapshot-policy</span> <span class="value">none</span>
<span class="comment"># Step 2: Create the LUN — thick (space-reserve enabled = best practice)</span>
<span class="prompt">cluster1::></span> <span class="cmd">lun create</span> \
<span class="param">-vserver</span> <span class="value">svm_prod</span> \
<span class="param">-volume</span> <span class="value">san_vol_01</span> \
<span class="param">-lun</span> <span class="value">san_lun_01</span> \
<span class="param">-size</span> <span class="value">50g</span> \
<span class="param">-ostype</span> <span class="value">windows</span> \
<span class="param">-space-reserve</span> <span class="value">enabled</span>
<span class="comment"># Verify — shows "unmapped" until assigned to an iGroup</span>
<span class="prompt">cluster1::></span> <span class="cmd">lun show</span> <span class="param">-vserver</span> <span class="value">svm_prod</span>
<span class="output">Vserver Path Size State Mapped Type
-------- ------------------------- ------ ------ -------- -------
svm_prod /vol/san_vol_01/san_lun_01 50.00g online unmapped windows</span>
<span class="comment"># Step 3: Create iGroup — add the server IQN number</span>
<span class="prompt">cluster1::></span> <span class="cmd">igroup create</span> \
<span class="param">-vserver</span> <span class="value">svm_prod</span> \
<span class="param">-igroup</span> <span class="value">ig_prod_servers</span> \
<span class="param">-protocol</span> <span class="value">iscsi</span> \
<span class="param">-ostype</span> <span class="value">windows</span> \
<span class="param">-initiator</span> <span class="value">iqn.1991-05.com.microsoft:app-server-prod01</span>
<span class="comment"># Add a second server to the iGroup (ONLY if servers are in a Windows cluster)</span>
<span class="prompt">cluster1::></span> <span class="cmd">igroup add</span> \
<span class="param">-vserver</span> <span class="value">svm_prod</span> \
<span class="param">-igroup</span> <span class="value">ig_prod_servers</span> \
<span class="param">-initiator</span> <span class="value">iqn.1991-05.com.microsoft:app-server-prod02</span>
<span class="comment"># Step 4: Map LUN to iGroup with a LUN ID</span>
<span class="prompt">cluster1::></span> <span class="cmd">lun map</span> \
<span class="param">-vserver</span> <span class="value">svm_prod</span> \
<span class="param">-path</span> <span class="value">/vol/san_vol_01/san_lun_01</span> \
<span class="param">-igroup</span> <span class="value">ig_prod_servers</span> \
<span class="param">-lun-id</span> <span class="value">0</span>
<span class="comment"># Verify mapping — send this output to the server team</span>
<span class="prompt">cluster1::></span> <span class="cmd">lun mapping show</span> <span class="param">-vserver</span> <span class="value">svm_prod</span>
<span class="output">Vserver Path IGroup LUN ID Protocol
-------- ------------------------- --------------- ------ --------
svm_prod /vol/san_vol_01/san_lun_01 ig_prod_servers 0 iscsi</span></div>
</div>
<div class="callout danger">
<div class="callout-icon">🚫</div>
<div class="callout-content">
<div class="callout-title">Critical — Never Map One LUN to Independent Servers</div>
<div class="callout-text">A LUN must not be shared between two or more <strong>standalone (non-clustered)</strong> servers. SAN is block-level — there is no filesystem coordination. Both servers would write to the same blocks simultaneously, causing immediate and permanent data corruption. Shared LUN access is only safe when servers are part of a Windows Server Failover Cluster (or equivalent) that uses SCSI-3 reservations to coordinate writes.</div>
</div>
</div>
<h3>LUN Resize — Guidelines & Best Practices</h3>
<table class="spec-table">
<thead>
<tr><th>Operation</th><th>Recommended?</th><th>Notes</th></tr>
</thead>
<tbody>
<tr><td>Expand LUN size</td><td><span class="badge badge-yellow">Possible — use carefully</span></td><td>First expand the parent volume, then resize the LUN. Server must rescan to see new size.</td></tr>
<tr><td>Shrink LUN size</td><td><span class="badge badge-orange">Not Recommended</span></td><td>Server must shrink first. Requires <code>-force true</code> on ONTAP. Any sequencing error risks complete data loss.</td></tr>
<tr><td>Provision a new larger LUN</td><td><span class="badge badge-green">Best Practice</span></td><td>Create a new LUN, migrate data, decommission the old one. Zero risk. Preferred by most enterprises.</td></tr>
</tbody>
</table>
<div class="code-block">
<div class="code-header">
<span class="code-lang">ONTAP CLI — LUN Resize</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"># Expand: always increase volume FIRST, then LUN</span>
<span class="prompt">cluster1::></span> <span class="cmd">volume size</span> \
<span class="param">-vserver</span> <span class="value">svm_prod</span> \
<span class="param">-volume</span> <span class="value">san_vol_01</span> \
<span class="param">-new-size</span> <span class="value">+52g</span>
<span class="prompt">cluster1::></span> <span class="cmd">lun resize</span> \
<span class="param">-vserver</span> <span class="value">svm_prod</span> \
<span class="param">-path</span> <span class="value">/vol/san_vol_01/san_lun_01</span> \
<span class="param">-size</span> <span class="value">100g</span>
<span class="comment"># Verify new size</span>
<span class="prompt">cluster1::></span> <span class="cmd">lun show</span> <span class="param">-vserver</span> <span class="value">svm_prod</span>
<span class="output">/vol/san_vol_01/san_lun_01 100.0g online mapped windows</span>
<span class="comment"># SHRINK — high risk — avoid in production</span>
<span class="comment"># Server team must shrink volume from their side FIRST</span>
<span class="prompt">cluster1::></span> <span class="cmd">lun resize</span> \
<span class="param">-vserver</span> <span class="value">svm_prod</span> \
<span class="param">-path</span> <span class="value">/vol/san_vol_01/san_lun_01</span> \
<span class="param">-size</span> <span class="value">-30g</span> \
<span class="param">-force</span> <span class="value">true</span>
<span class="comment"># ONTAP will warn: reducing LUN size without host coordination</span>
<span class="comment"># may cause permanent data loss or corruption</span></div>
</div>
<h3>iSCSI SAN — Full Architecture Summary</h3>
<div class="svg-wrap">
<svg viewBox="0 0 750 380" xmlns="http://www.w3.org/2000/svg" style="width:100%;max-width:750px;display:block;margin:auto">
<defs>
<marker id="arr6" markerWidth="8" markerHeight="8" refX="6" refY="3" orient="auto"><path d="M0,0 L0,6 L8,3 z" fill="#39d3c3"/></marker>
</defs>
<!-- Server 1 -->
<rect x="20" y="55" width="130" height="65" rx="8" fill="#1c2333" stroke="#58a6ff" stroke-width="1.5"/>
<text x="85" y="82" text-anchor="middle" fill="#e6edf3" font-size="11" font-family="sans-serif" font-weight="bold">App Server 1</text>
<text x="85" y="99" text-anchor="middle" fill="#6e7681" font-size="10" font-family="monospace">IQN: ...prod01</text>
<text x="85" y="114" text-anchor="middle" fill="#6e7681" font-size="10" font-family="sans-serif">LUN ID 0 visible</text>
<!-- Server 2 -->
<rect x="20" y="200" width="130" height="65" rx="8" fill="#1c2333" stroke="#58a6ff" stroke-width="1.5"/>
<text x="85" y="227" text-anchor="middle" fill="#e6edf3" font-size="11" font-family="sans-serif" font-weight="bold">App Server 2</text>
<text x="85" y="244" text-anchor="middle" fill="#6e7681" font-size="10" font-family="monospace">IQN: ...prod02</text>
<text x="85" y="259" text-anchor="middle" fill="#6e7681" font-size="10" font-family="sans-serif">Cluster member only</text>
<!-- Network -->
<rect x="210" y="130" width="110" height="60" rx="8" fill="#0d2035" stroke="#39d3c3" stroke-width="1.5"/>
<text x="265" y="157" text-anchor="middle" fill="#39d3c3" font-size="11" font-family="sans-serif">iSCSI</text>
<text x="265" y="174" text-anchor="middle" fill="#6e7681" font-size="10" font-family="monospace">VLAN 50 / LAN</text>
<!-- Lines to network -->
<line x1="150" y1="88" x2="210" y2="155" stroke="#58a6ff" stroke-width="1.2" stroke-dasharray="4,3"/>
<line x1="150" y1="232" x2="210" y2="168" stroke="#58a6ff" stroke-width="1.2" stroke-dasharray="4,3"/>
<!-- ONTAP box -->
<rect x="375" y="50" width="210" height="240" rx="10" fill="#1c2333" stroke="#e3b341" stroke-width="1.5"/>
<text x="480" y="78" text-anchor="middle" fill="#e3b341" font-size="12" font-family="sans-serif" font-weight="bold">ONTAP Cluster</text>
<!-- vServer -->
<rect x="393" y="90" width="174" height="38" rx="6" fill="#0d2035" stroke="#39d3c3" stroke-width="1"/>
<text x="480" y="108" text-anchor="middle" fill="#39d3c3" font-size="11" font-family="monospace">svm_prod (iSCSI)</text>
<text x="480" y="122" text-anchor="middle" fill="#6e7681" font-size="10" font-family="monospace">IQN: iqn.1992...</text>
<!-- LIFs -->
<rect x="393" y="140" width="80" height="28" rx="5" fill="#0d1117" stroke="#bc8cff" stroke-width="1"/>
<text x="433" y="158" text-anchor="middle" fill="#bc8cff" font-size="9" font-family="monospace">10.50.10.21</text>
<rect x="487" y="140" width="80" height="28" rx="5" fill="#0d1117" stroke="#bc8cff" stroke-width="1"/>
<text x="527" y="158" text-anchor="middle" fill="#bc8cff" font-size="9" font-family="monospace">10.50.10.22</text>
<!-- iGroup -->
<rect x="393" y="182" width="174" height="28" rx="5" fill="#0d1117" stroke="#f78166" stroke-width="1"/>
<text x="480" y="200" text-anchor="middle" fill="#f78166" font-size="10" font-family="monospace">iGroup: ig_prod_servers</text>
<!-- LUN -->
<rect x="393" y="224" width="174" height="28" rx="5" fill="#0d1117" stroke="#3fb950" stroke-width="1"/>
<text x="480" y="243" text-anchor="middle" fill="#3fb950" font-size="10" font-family="monospace">LUN: san_lun_01 (50GB) ID=0</text>
<!-- Arrow from network to ONTAP -->
<line x1="320" y1="160" x2="375" y2="160" stroke="#39d3c3" stroke-width="2" marker-end="url(#arr6)"/>
<!-- Volume note -->
<text x="480" y="325" text-anchor="middle" fill="#8b949e" font-size="11" font-family="sans-serif">LUN ID is the key identifier visible on the server side</text>
<text x="480" y="343" text-anchor="middle" fill="#6e7681" font-size="10" font-family="sans-serif">Server sees N-drive (or /dev/sdb on Linux) — formats with its native filesystem</text>
</svg>
<div class="diagram-caption">Complete iSCSI SAN architecture: servers connect via iSCSI LIFs → iGroup controls access → LUN is the block device</div>
</div>
</section>
<!-- ═══ SECTION 7 ═══ -->
<section class="section" id="s7">
<div class="section-header">
<div class="section-icon icon-purple">🎯</div>
<div class="section-title-wrap">
<div class="section-num">SECTION 07</div>
<h2>Interview Q&A — Scenario Based</h2>
</div>
</div>
<div class="quiz-card">
<div class="quiz-q">Q1. You have four physical ports per controller. A client needs NFS (192.168.10.x) and iSCSI SAN (10.50.10.x) from the same cluster. How do you architect the LIF and port design?</div>
<button class="quiz-btn" onclick="this.nextElementSibling.style.display='block';this.style.display='none'">Reveal Answer</button>
<div class="quiz-a">Dedicate two ports (e.g. e0a, e0b) to NAS: create an ifgrp for redundancy, assign it to a NAS broadcast domain, configure NFS LIFs with service policy <code>default-data-files</code>. Dedicate the remaining two ports (e0c, e0d) to iSCSI: assign them to a separate broadcast domain and configure iSCSI LIFs with service policy <code>default-data-blocks</code>, data-protocol <code>iscsi</code>. Physical separation ensures iSCSI traffic stays on its dedicated VLAN and NAS protocols are never mixed with iSCSI LIFs — both a technical requirement and a clean operational practice.</div>
</div>
<div class="quiz-card">
<div class="quiz-q">Q2. After a port failure and automatic LIF failover, the LIF does not return to its home port once the port recovers. What is the likely cause and how do you fix it?</div>
<button class="quiz-btn" onclick="this.nextElementSibling.style.display='block';this.style.display='none'">Reveal Answer</button>
<div class="quiz-a">The LIF is missing the <code>-auto-revert true</code> flag. By default, LIFs stay on the failover port even after the home port recovers. Immediate fix: <code>network interface revert -vserver * -lif *</code>. Permanent fix: <code>network interface modify -vserver svm_prod -lif data_lif_01 -auto-revert true</code>. Apply this to all data LIFs as a standard post-deployment task.</div>
</div>
<div class="quiz-card">
<div class="quiz-q">Q3. A Windows server team requests 200 GB of iSCSI storage. Walk through the complete provisioning steps — what do you deliver to the server team at the end?</div>
<button class="quiz-btn" onclick="this.nextElementSibling.style.display='block';this.style.display='none'">Reveal Answer</button>
<div class="quiz-a">1) Validate iSCSI license. 2) Confirm iSCSI LIFs exist and are enabled on dedicated ports. 3) Obtain server IQN from the server team. 4) Create a 205 GB volume (snapshot policy: none, 0% snapshot reserve). 5) Create a 200 GB thick LUN (ostype: windows, space-reserve: enabled). 6) Create an iGroup (protocol: iscsi, ostype: windows, add server IQN). 7) Map LUN to iGroup (LUN ID: 0). 8) Deliver to server team: the iSCSI LIF IP addresses (for discovery portal) + the lun mapping show output (shows LUN ID). Server team handles: add IPs to iSCSI initiator → connect → rescan → bring online → initialize → format → use.</div>
</div>
<div class="quiz-card">
<div class="quiz-q">Q4. A developer wants to share a single 100 GB LUN between two application servers for a read/write workload. The servers are standalone. Is this safe?</div>
<button class="quiz-btn" onclick="this.nextElementSibling.style.display='block';this.style.display='none'">Reveal Answer</button>
<div class="quiz-a">No — this will cause data corruption. SAN operates at block level with no inherent coordination between hosts. Both servers write to the same raw disk blocks simultaneously, causing filesystem corruption and data loss. The correct options are: (a) provision two separate LUNs — one per server, or (b) cluster the servers (Windows Server Failover Cluster with SCSI-3 persistent reservations enabled), which enforces write coordination via a quorum mechanism. In a true cluster, shared LUN access is safe and intentional.</div>
</div>
<div class="quiz-card">
<div class="quiz-q">Q5. What is the difference between an ifgrp and a VLAN in ONTAP, and when would you use both together?</div>
<button class="quiz-btn" onclick="this.nextElementSibling.style.display='block';this.style.display='none'">Reveal Answer</button>
<div class="quiz-a">An <strong>ifgrp</strong> solves a hardware problem: it combines physical ports for bandwidth aggregation and link-level redundancy. A <strong>VLAN</strong> solves a network problem: it creates logical isolation to carry multiple subnets over a single physical path. You use both together when you need redundant bandwidth AND multi-subnet support — e.g., create a 2-port LACP ifgrp (a0a), then add VLAN 10 and VLAN 20 sub-ports on top of it. Configure LIFs from different subnets on each VLAN port. Result: resilient bonded uplink that carries multiple isolated network segments.</div>
</div>
<div class="quiz-card">
<div class="quiz-q">Q6. The server team reports the LUN is not visible after you completed configuration. What is your structured troubleshooting approach?</div>
<button class="quiz-btn" onclick="this.nextElementSibling.style.display='block';this.style.display='none'">Reveal Answer</button>
<div class="quiz-a">Check layer by layer: <br>1) <code>vserver iscsi initiator show</code> — is the server IQN visible? If not: iSCSI session is not active. Check firewall, port 3260, correct LIF IPs in host's discovery portal.<br>2) <code>igroup show</code> — is the server IQN in the correct iGroup?<br>3) <code>lun mapping show</code> — is the LUN mapped to the correct iGroup?<br>4) <code>lun show</code> — is the LUN online and in a mapped state?<br>5) On the server: has a disk rescan been performed? Is the disk showing as offline? Does the LUN ID in properties match the one in lun mapping show?<br>This top-down approach isolates whether the issue is network connectivity, ONTAP configuration, or host-side disk management.</div>
</div>
</section>
<!-- ═══ AUTHOR ═══ -->
<section class="section" id="author">
<div class="author-card">
<div class="author-avatar">👨💻</div>
<div class="author-name">Mohammed Abdul</div>
<div class="author-title">Data Protection Architect · 10+ Years Experience</div>
<p class="author-bio">Mohammed Abdul is a Data Protection Architect with more than 10 years of experience in Hybrid Cloud, having worked with global clients across various industries. With extensive expertise in enterprise backup, recovery, and storage solutions, Mohammed specializes in designing and implementing robust data protection strategies for organizations of all sizes.</p>
<div class="tech-badges">
<span class="tech-badge">AWS</span>
<span class="tech-badge">Azure</span>
<span class="tech-badge">GCP</span>
<span class="tech-badge">NetApp ONTAP</span>
<span class="tech-badge">Commvault</span>
<span class="tech-badge">Veeam</span>
<span class="tech-badge">NetBackup</span>
</div>
<a class="contact-link" href="mailto:abdul.md.20000102@gmail.com">✉️ abdul.md.20000102@gmail.com</a>
<div class="callout warning" style="margin-top:24px;margin-bottom:0">
<div class="callout-icon">📌</div>
<div class="callout-content">