aboutsummaryrefslogtreecommitdiff
path: root/nl_NL.ISO8859-1/books/handbook/vinum/chapter.xml
blob: c9dca54014ba27c9bd4f3ac8c0f7f1bfd5a7ae9c (plain) (blame)
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
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
<!--
     De Vinum Volume Manager
     Door Greg Lehey (grog at lemis dot com)

     Toegevoegd aan het Handboek door Hiten Pandya <hmp@FreeBSD.org>
     en Tom Rhodes <trhodes@FreeBSD.org>

     The Dutch FreeBSD Documentation Project

     $FreeBSD$

     %SOURCE%	en_US.ISO8859-1/books/handbook/vinum/chapter.sgml
     %SRCID%	39544
-->

<chapter id="vinum-vinum">
  <chapterinfo>
    <authorgroup>
      <author>
	<firstname>Greg</firstname>
	<surname>Lehey</surname>
	<contrib>Geschreven door </contrib>
      </author>
    </authorgroup>
    <authorgroup>
      <author>
	<firstname>Erwin</firstname>
	<surname>Kooi</surname>
	<contrib>Vertaald door </contrib>
      </author>
    </authorgroup>
  </chapterinfo>

  <title>De VINUM volumebeheerder</title>

  <sect1 id="vinum-synopsis">
    <title>Overzicht</title>

    <para>Welke harde schijven er ook gebruikt worden, er zijn altijd
      mogelijke problemen:</para>

    <itemizedlist>
      <listitem>
	<para>Ze kunnen te klein zijn.</para>
      </listitem>

      <listitem>
	<para>Ze kunnen te traag zijn.</para>
      </listitem>

      <listitem>
	<para>Ze kunnen te onbetrouwbaar zijn.</para>
      </listitem>
    </itemizedlist>

    <para>Er zijn verschillende oplossingen voor deze problemen
      voorgesteld en geïmplementeerd.  Eén manier waarop
      gebruikers zich wapenen tegen een aantal van deze problemen is
      door meerdere en soms ook redundante schijven te gebruiken.  Naast
      ondersteuning voor verschillende kaarten en controllers die
      hardware-RAID ondersteunen, bevat het &os; basissysteem ook de
      Vinum Volume Manager, een
      <quote>blokapparaatstuurprogramma</quote> waarmee virtuele
      schijven gemaakt kunnen worden.  <emphasis>Vinum</emphasis> is een
      zogenaamde <emphasis>Volume Manager</emphasis>, een stuurprogramma
      voor virtuële schijven dat deze drie problemen in beschouwing
      neemt.  Vinum biedt meer flexibiliteit, prestaties en
      betrouwbaarheid dan traditionele schijfopslag en er kan RAID-0,
      RAID-1 en RAID-5 mee gemaakt worden of een combinatie van deze
      RAID-niveaus.</para>

    <para>In dit hoofdstuk wordt een overzicht gegeven van de mogelijke
      problemen die traditionele schijfopslag met zich meebrengt en de
      Vinum Volume Manager wordt geïntroduceerd.</para>

    <note>
      <para>Vanaf &os;&nbsp;5, is Vinum herschreven om in de
	GEOM-architectuur (<xref linkend="GEOM"/>) te passen, met behoud
	van de originele ideëen, terminologie, en metagegevens die
	op de schijf staan.  Deze herschrijving wordt
	<emphasis>gvinum</emphasis> (voor <emphasis>GEOM
	vinum</emphasis>) genoemd.  De volgende tekst refereert aan
	<emphasis>Vinum</emphasis> als een abstracte naam, onafhankelijk
	van de implementatievariant.  Alle commando-aanroepen dienen nu
	met het commando <command>gvinum</command> gedaan te worden, en
	de naam van de kernelmodule is veranderd van
	<filename>vinum.ko</filename> naar
	<filename>geom_vinum.ko</filename>, en alle apparaatknooppunten
	bevinden zich in <filename class="directory">/dev/gvinum</filename> in
	plaats van <filename class="directory">/dev/vinum</filename>.  Sinds
	&os;&nbsp;6 is de oude implementatie van Vinum niet meer beschikbaar in
	de broncode.</para>
    </note>
  </sect1>

  <sect1 id="vinum-intro">
    <title>Schijfgrootte</title>

    <indexterm><primary>Vinum</primary></indexterm>

    <indexterm>
      <primary>RAID</primary>

      <secondary>software</secondary>
    </indexterm>

    <para>De capaciteit van schijven wordt groter, maar ook de vraag
      naar capaciteit neemt toe.  Vaak is het gewenste bestandssysteem
      groter dan de op dat moment beschikbare schijven.  Hoewel dit
      probleem niet meer zo actueel als het tien jaar geleden was,
      bestaat het nog steeds.  In sommige systemen is dit opgelost door
      een virtuele harde schijf te maken die de gegevens op meerdere
      fysieke harde schijven kan opslaan.</para>
  </sect1>

  <sect1 id="vinum-access-bottlenecks">
    <title>Snelheid van toegang</title>

    <para>Moderne systemen hebben vaak simultaan toegang tot gegevens
      nodig.  FTP en webservers kunnen bijvoorbeeld duizenden simultane
      sessies onderhouden en hebben vaak meerdere 100 Mbit/s
      verbindingen met de rest van de wereld.  De benodigde
      gegevensdoorvoer is dan groter dan de meeste schijven kunnen
      leveren.</para>

    <para>Huidige schijven kunnen gegevens sequentieel overdragen met
      ongeveer 70 MB/s, maar deze snelheid heeft geen waarde in een
      omgeving waar onafhankelijke processen toegang tot de schijf
      hebben.  In zo'n situatie is het interessanter om vanuit het
      standpunt van de schijfstuurprogramma te kijken: de belangrijkste
      parameter is dan de belasting die een bepaalde gegevensoverdracht
      op het stuurprogramma plaatst.  Met andere woorden: wat is het
      tijdsbeslag van een gegevensoverdracht op te schijf?</para>

    <para>Bij elke gegevensoverdracht moet de schijf eerst zijn kop
      positioneren, wachten tot de eerste sector onder de kop doorkomt
      en vervolgens de overdracht starten.  Deze acties duren bijzonder
      kort.  Het heeft geen enkele zin om ze te onderbreken.</para>

    <para><anchor id="vinum-latency"/>Neem een overdracht van ongeveer
      10 kB: de huidige generatie high-performance schijven kan de kop
      in 3.5 ms plaatsen.  De snelste schijven draaien met 15.000
      toeren per minuut, dus de gemiddelde rotatie vertraging (een
      halve omwenteling) bedraagt 2 ms.  Met 70&nbsp;MB/s de overdracht
      zelf duurt ongeveer 150 &mu;s, bijna niets vergeleken met de tijd
      die verloren is gegaan aan het positioneren.  In zulke gevallen
      daalt de gegevensoverdracht naar iets meer dan 1 MB/s en is dus
      duidelijk afhankelijk van de grootte van de over te dragen
      gegevens.</para>

    <para>De traditionele en logische oplossing voor dit probleem is
      <quote>meer schijven</quote>: in plaats van één
      grote schijf, meerdere kleine schijven met een zelfde totale
      opslagcapaciteit.  Iedere schijf is in staat om onafhankelijk de
      kop te plaatsen en de gegevens over te dragen, dus de effectieve
      doorvoer neemt toe met een factor bijna gelijk aan het aantal
      schijven.</para>

    <para>De exacte verbetering van de doorvoer is natuurlijk kleiner
      dan het aantal schijven, want hoewel iedere schijf in staat is om
      parallel de gegevens over te dragen, er is geen garantie dat de
      gegevens gelijk over de schijven verdeeld is.  De belasting op de
      ene schijf zal dan ook groter zijn dan op de andere schijf.</para>

    <indexterm>
      <primary>aaneenschakelen</primary>

      <secondary>schijven aaneenschakelen</secondary>
    </indexterm>

    <indexterm>
      <primary>Vinum</primary>

      <secondary>aaneenschakelen</secondary>
    </indexterm>

    <indexterm><primary>RAID</primary></indexterm>

    <para>Een gelijke belasting van de schijven is in grote mate
      afhankelijk van de manier waarop gegevens over de schijven zijn
      verdeeld.  In het volgende stuk is de opslag van een virtuele
      schijf voor te stellen als een verzameling sectoren die met een
      nummer aangesproken kan worden, net als bladzijden in een boek.
      De meest voor de hand liggende methode om een virtuele schijf
      te maken is het achter elkaar plakken van de fysieke schijven.
      Een virtueel boek zou dan opgebouwd zijn uit verschillende achter
      elkaar zittende fysieke hoofdstukken.  Deze methode heet
      <emphasis>aaneenschakelen</emphasis>
      (<quote>concatenation</quote>) en heeft het voordeel dat schijven
      verschillend van grootte kunnen zijn.  Dit werkt prima als
      toegang tot de gegevens gelijk verdeeld is over de hele
      gegevensverzameling.  Als die toegang beperkt is tot een klein
      deel van de gegevensverzameling, is de snelheidsverbetering een
      stuk kleiner.  <xref linkend="vinum-concat"/> laat de manier zien
      hoe aaneengeschakelde schijven hun gegevens opslaan.</para>

    <para>
      <figure id="vinum-concat">
	<title>Aaneengeschakeld georganiseerd</title>

	<graphic fileref="vinum/vinum-concat"/>
      </figure></para>

    <indexterm>
      <primary>verdelen</primary>

      <secondary>schijven stripen</secondary>
    </indexterm>

    <indexterm>
      <primary>Vinum</primary>

      <secondary>verdelen</secondary>
    </indexterm>

    <para>Een andere methode is het verdelen van de totale opslag van
      de virtuele schijf in kleinere stukjes van gelijke grootte en ze
      achter elkaar op verschillende fysieke schijven op te slaan.
      Bijvoorbeeld: de eerste 256 sectoren worden op schijf 1
      opgeslagen, de tweede 256 sectoren op schijf 2 enzovoort, tot de
      laatste schijf is gebuikt, waarna weer bij schijf 1 verder wordt
      gegaan, net zolang tot de schijven vol zijn.  Deze methode heet
      <emphasis>verdelen</emphasis> (<quote>striping</quote>) of
      <acronym>RAID-0</acronym>.

      <footnote>
	<para><acronym>RAID</acronym> staat voor <emphasis>Redundant
	    Array of Inexpensive Disks</emphasis> (Redundante Reeks van
	  Goedkope Schijven) en biedt verschillende vormen van
	  fouttolerantie.  Hoewel die laatste term wat misleidend is:
	  het biedt namelijk geen redundantie.</para></footnote>.

      Bij RAID-0 kost het iets meer moeite om de gegevens te vinden en
      het kan extra I/O belasting met zich meebrengen als gegevens zijn
      verdeeld over verschillende fysieke schijven.  Het kan echter ook
      zorgen voor een constantere belasting van die schijven.
      <xref linkend="vinum-striped"/> geeft weer hoe RAID-0 schijven hun
      gegevens opslaan.</para>

    <para>
      <figure id="vinum-striped">
	<title>Verdeeld georganiseerd</title>

	<graphic fileref="vinum/vinum-striped"/>
      </figure></para>
  </sect1>

  <sect1 id="vinum-data-integrity">
    <title>Betrouwbaarheid van gegevens</title>

    <para>Het laatste probleem met de huidige schijven is dat ze
      onbetrouwbaar zijn.  Hoewel de betrouwbaarheid de laatste jaren
      enorm is toegenomen, blijven schijven het vitale onderdeel van
      een server dat waarschijnlijk als eerste kapot gaat.  Als dat
      gebeurt kan het catastrofale gevolgen hebben: het vervangen van
      de schijf en het terugplaatsen van de gegevens kan dagen
      kosten.</para>

    <indexterm>
      <primary>spiegelen</primary>

      <secondary>schijven spiegelen</secondary>
    </indexterm>

    <indexterm>
      <primary>Vinum</primary>

      <secondary>spiegelen</secondary>
    </indexterm>

    <indexterm><primary>RAID-1</primary></indexterm>

    <para>De traditionele manier om dit te voorkomen is
      <emphasis>spiegelen</emphasis> (<quote>mirroring</quote>): het
      hebben van een kopie van de gegevens op een andere fysieke schijf.
      Sinds de uitvinding van RAID niveaus staat dit bekend als
      RAID-1.  Een schrijfactie naar de virtuele schijf gebeurt op
      beide fysieke schijven.  Een leesactie hoeft slechts vanaf
      één te gebeuren.  Op deze manier kan de virtuele
      schijf dus blijven werken als één van de twee
      fysieke schijven kapot is.</para>

    <para>RAID-1 heeft twee problemen:</para>

    <orderedlist>
      <listitem>
	<para>Prijs.  Er is twee keer zoveel schijfruimte nodig als bij
	  een niet-redundante schijf.</para>
      </listitem>

      <listitem>
	<para>Prestatie.  Een schrijfactie moet op twee schijven
	  gebeuren en kost dus twee keer zoveel bandbreedte.  Een
	  leesactie hoeft maar op één schijf te gebeuren
	  en heeft hier dus geen last van.</para>
      </listitem>
    </orderedlist>

    <indexterm>
      <primary>RAID-5</primary>
    </indexterm>

    <para>Een andere manier is <emphasis>pariteit</emphasis>,
      uitgevoerd in <acronym>RAID</acronym> niveaus 2, 3, 4 en 5.
      Van deze vier is <acronym>RAID-5</acronym> het meest interessant.
      In Vinum is het geïmplementeerd als een variant van een
      verdeelde organisatie waarbij één blok van elk deel
      is gereserveerd voor de pariteit van één van de andere
      blokken.  Voor Vinum is een <acronym>RAID-5</acronym> samenstelling
      (<quote>plex</quote>) dan ook gelijk aan een verdeelde
      samenstelling, met als verschil dat het een pariteitblok bevat in
      ieder deel.  Zoals voorgeschreven door <acronym>RAID-5</acronym>
      wisselt de locatie van dit pariteitblok van het ene deel naar het
      andere.  De nummers in de gegevensblokken geven de relatieve
      bloknummers aan.</para>

    <para>
      <figure id="vinum-raid5-org">
	<title>RAID-5 georganiseerd</title>

	<graphic fileref="vinum/vinum-raid5-org"/>
      </figure></para>

    <para>Vergeleken met spiegelen heeft <acronym>RAID-5</acronym> het
      voordeel dat er beduidend minder opslagcapaciteit nodig is.
      Lezen gebeurt op dezelfde manier als bij een verdeelde
      organisatie, maar schrijven kost beduidend meer tijd, ongeveer
      25% van de leesprestaties meer.  Als één schijf
      uitvalt, kan de reeks doorwerken in een <emphasis>verslechterde
	staat</emphasis> (<quote>degraded mode</quote>): gegevens van
      een functionerende schijf kunnen zonder problemen gelezen worden,
      maar gegevens van de defecte schijf moeten eerst worden
      samengesteld uit de pariteit van de overeenkomende blokken van de
      resterende schijven.</para>
  </sect1>

  <sect1 id="vinum-objects">
    <title>Vinum objecten</title>

    <para>Om deze problemen op te lossen, hanteert vinum een
      hiërarchie met vier niveaus van objecten:</para>

    <itemizedlist>
      <listitem>
	<para>Het meest zichtbare object is de virtuele schijf.  Dit
	  object wordt <emphasis>volume</emphasis> genoemd.  Op een
	  paar kleine details na, hebben volumes dezelfde
	  eigenschappen als een &unix; schijf.  Het belangrijkste
	  verschil is dat er geen beperking aan de grootte van de
	  schijf is.</para>
      </listitem>

      <listitem>
	<para>Volumes zijn opgebouwd uit
	  <emphasis>samenstellingen</emphasis>, die elk de totale
	  opslagcapaciteit van het volume hebben.  Dit niveau in de
	  hiërarchie biedt daarom redundantie.  Een samenstelling
	  is goed voor te stellen als een individuele schijf in een
	  <acronym>RAID-1</acronym> systeem.  Iedere schijf bevat
	  dezelfde gegevens.</para>
      </listitem>

      <listitem>
	<para>Omdat Vinum bestaat binnen het &unix; opslagsysteem, moet
	  het mogelijk zijn om &unix; partities te gebruiken als
	  bouwstenen voor samenstellingen die uit meerdere schijven
	  bestaan.  Maar het blijkt dat dit te inflexibel is: &unix;
	  schijven hebben een beperkt aantal partities.  In plaats
	  daarvan verdeelt Vinum een &unix; partitie (de schijf) in
	  aaneengesloten stukken die <emphasis>subschijven</emphasis>
	  worden genoemd.  Deze subschijven worden vervolgens als
	  bouwstenen voor de samenstelling gebruikt.</para>
      </listitem>

      <listitem>
	<para>Subschijven bestaan op Vinum
	  <emphasis>schijven</emphasis>, op dit moment &unix;
	  partities.  Een Vinum schijf kan een oneindig aantal
	  subschijven bevatten.  Met uitzondering van een klein stukje
	  aan het begin van de schijf, dat wordt gebruikt om informatie
	  over de instellingen en de toestand op te slaan, is de gehele
	  schijf beschikbaar voor de opslag van gegevens.</para>
      </listitem>
    </itemizedlist>

    <para>In de volgende paragrafen wordt beschreven hoe deze objecten
      de functionaliteit van Vinum leveren.</para>

    <sect2>
      <title>Volumegrootte overwegingen</title>

      <para>Een samenstelling kan meerdere subschijven bevatten die
	uitgespreid zijn over alle schijven in de Vinum instelling.
	Dat houdt in dat de grootte van een individuele schijf geen
	limiet is voor de samenstelling en dus niet voor het
	volume.</para>
    </sect2>

    <sect2>
      <title>Redundante gegevensopslag</title>

      <para>Vinum implementeert <acronym>RAID-0</acronym> door meerdere
	samenstellingen aan een volume te koppelen.  Elke samenstelling
	representeert hierbij de gegevens in het volume.  Een volume kan
	tussen de één en acht samenstellingen
	bevatten.</para>

      <para>Hoewel een samenstelling de totale gegevens van een volume
	voorstelt, is het mogelijk dat delen van deze voorstelling
	missen, door ontwerp (door geen subschijf voor delen van de
	samenstelling te definiëren) of per ongeluk (door een
	defecte schijf).  Zo lang tenminste één
	samenstelling de gegevens voor het gehele volume kan leveren, is
	het volume volledig bruikbaar.</para>
    </sect2>

    <sect2>
      <title>Prestaties</title>

      <para>Vinum implementeert aaneenschakelen en spiegelen op het
	niveau van de samenstelling:</para>

      <itemizedlist>
	<listitem>
	  <para>Een aaneengeschakelde samenstelling gebruikt de
	    adresruimte van elke subschijf achter elkaar.</para>
	</listitem>

	<listitem>
	  <para>Een verdeelde samenstelling spreiden de gegevens over
	    iedere subschijf.  De subschijven moeten daarvoor allemaal
	    dezelfde grootte hebben en er moeten tenminste twee
	    subschijven zijn om onderscheid te kunnen maken met een
	    aaneengeschakelde samenstelling.</para>
	</listitem>
      </itemizedlist>
    </sect2>

    <sect2>
      <title>Welke samenstelling?</title>

      <para>De versie van Vinum die met &os;&nbsp;&rel.current; wordt
	meegeleverd, kent twee soorten samenstellingen:</para>

      <itemizedlist>
	<listitem>
	  <para>Aaneengeschakelde samenstellingen zijn het meest
	    flexibel: ze kunnen een oneindig aantal subschijven
	    bevatten die verschillend van lengte mogen zijn.  De
	    samenstelling kan uitgebreid worden door subschijven toe te
	    voegen.  Ze kosten minder <acronym>CPU</acronym> tijd dan
	    verdeelde samenstellingen, hoewel het verschil van de
	    <acronym>CPU</acronym> belasting niet meetbaar is.  Aan de
	    andere kant, ze zijn het meest kwetsbaar voor
	    <quote>hot-spots</quote>, waar één schijf
	    heel intensief gebruikt wordt en anderen ongebruikt
	    blijven.</para>
	</listitem>

	<listitem>
	  <para>Het grootste voordeel van verdeelde samenstellingen
	    (<acronym>RAID-0</acronym>) is dat ze geen
	    <quote>hot-spots</quote> hebben.  Door het kiezen van een
	    optimale deelgrootte (veelal 256 kB) kan de belasting op de
	    fysieke schijven gelijk getrokken worden.  De nadelen van
	    deze aanpak zijn (minuscuul) complexere code en beperkingen
	    aan de subschijven: ze moeten allemaal van gelijke grootte
	    zijn en het uitbreiden van een samenstelling met extra
	    subschijven is zo gecompliceerd, dat de huidige versie van
	    Vinum dit niet ondersteunt.  Vinum voegt een extra,
	    triviale, beperking toe: een verdeelde samenstelling moet
	    tenminste twee subschijven hebben, omdat die anders niet
	    onderscheiden kan worden van een aaneengeschakelde
	    samenstelling.</para>
	</listitem>
      </itemizedlist>

      <para>In <xref linkend="vinum-comparison"/> worden de voor- en
	nadelen van elke samenstelling samengevat.</para>

      <table id="vinum-comparison" frame="none">
	<title>Vinum samenstellingen</title>

	<tgroup cols="5">
	  <thead>
	    <row>
	      <entry>Samenstellingtype</entry>

	      <entry>Minimaal aantal subschijven</entry>

	      <entry>Subschijven toevoegen</entry>

	      <entry>Gelijke grootte</entry>

	      <entry>Toepassing</entry>
	    </row>
	  </thead>

	  <tbody>
	    <row>
	      <entry>aaneengeschakeld</entry>

	      <entry>1</entry>

	      <entry>ja</entry>

	      <entry>nee</entry>

	      <entry>Veel gegevensopslag met maximale flexibiliteit en
		gemiddelde performance.</entry>
	    </row>

	    <row>
	      <entry>verdeeld</entry>

	      <entry>2</entry>

	      <entry>nee</entry>

	      <entry>ja</entry>

	      <entry>Hoge prestaties, ook bij veel gelijktijdige
		toegang.</entry>
	    </row>
	  </tbody>
	</tgroup>
      </table>
    </sect2>
  </sect1>

  <sect1 id="vinum-examples">
    <title>Voorbeelden</title>

    <para>Vinum houdt een <emphasis>instellingendatabase</emphasis>
      bij waarin beschreven staat welke objecten bekend zijn in het
      systeem.  Bij het instellen vult de gebruiker deze database uit
      één of meer instellingenbestanden met behulp van
      het hulpprogramma &man.gvinum.8;.  Vinum bewaart een kopie van de
      database op iedere slice (die Vinum <emphasis>apparaat</emphasis>
      noemt) die door Vinum wordt beheerd.  Deze database wordt na
      iedere statuswijziging bijgewerkt, zodat een na een herstart
      accuraat de toestand van ieder Vinum object wordt weergegeven.</para>

    <sect2>
      <title>Het instellingenbestand</title>

      <para>Het instellingenbestand beschrijft de individuele vinum
	objecten.  De definitie van een eenvoudig volume kan er zo
	uitzien:</para>

      <programlisting>drive a device /dev/da3h
    volume myvol
      plex org concat
        sd length 512m drive a</programlisting>

      <para>Dit bestand beschrijft vier Vinum objecten:</para>

      <itemizedlist>
	<listitem>
	  <para>De <emphasis>drive</emphasis> regel beschrijft een
	    partitie (<emphasis>drive</emphasis>) en de relatieve
	    positie ten opzichte van de onderliggende hardware.  Het
	    heeft de symbolische naam <emphasis>a</emphasis>.  Deze
	    scheiding van de symbolische naam van de schijf maakt het
	    mogelijk om schijven te verplaatsen van de ene locatie naar
	    de andere, zonder verwarring te veroorzaken.</para>
	</listitem>

	<listitem>
	  <para>De <emphasis>volume</emphasis> regel beschrijft een
	    volume.  Het enige benodigde attribuut is de naam:
	    <emphasis>myvol</emphasis>.</para>
	</listitem>

	<listitem>
	  <para>De <emphasis>plex</emphasis> regel beschrijft een
	    samenstelling.  Het enige benodigde attribuut is de
	    organisatie, in dit geval <emphasis>concat</emphasis>.  Er
	    is geen naam nodig: het systeem genereert automatisch een
	    naam door <emphasis>.p</emphasis><emphasis>x</emphasis> aan
	    de volumenaam toe te voegen, waarbij <emphasis>x</emphasis>
	    het nummer van de samenstelling in het volume is.  De naam
	    van deze samenstelling wordt dus
	    <emphasis>myvol.p0</emphasis>.</para>
	</listitem>

	<listitem>
	  <para>De <emphasis>sd</emphasis> regel beschrijft een
	    subschijf.  De minimale specificaties zijn de naam van een
	    schijf waar de subschijf kan worden opgeslagen en de lengte
	    van de subschijf.  Net als bij een samenstelling is er geen
	    naam nodig: het systeem genereert automatisch een naam door
	    <emphasis>.s</emphasis><emphasis>x</emphasis> aan de
	    samenstellingnaam toe te voegen, waarbij
	    <emphasis>x</emphasis> het nummer van de subschijf is.  De
	    naam van deze subschijf is dus
	    <emphasis>myvol.p0.s0</emphasis>.</para>
	</listitem>
      </itemizedlist>

      <para>Na het verwerken van dit bestand ziet de uitvoer van
	&man.gvinum.8; er als volgt uit:</para>

      <programlisting width="97">
      &prompt.root; gvinum -&gt; <userinput>create config1</userinput>
      Configuration summary
      Drives:       1 (4 configured)
      Volumes:       1 (4 configured)
      Plexes:       1 (8 configured)
      Subdisks:      1 (16 configured)

       D a                  State: up       Device /dev/da3h       Avail: 2061/2573 MB (80%)

       V myvol              State: up       Plexes:      1  Size:       512 MB

       P myvol.p0          C State: up       Subdisks:    1  Size:       512 MB

       S myvol.p0.s0         State: up       PO:        0 B Size:       512 MB</programlisting>

      <para>Deze uitvoer geeft de korte uitvoer van &man.gvinum.8; weer.
	Het is grafisch weergegeven in
	<xref linkend="vinum-simple-vol"/>.</para>

      <para>
	<figure id="vinum-simple-vol">
	  <title>Een eenvoudig Vinum volume</title>

	  <graphic fileref="vinum/vinum-simple-vol"/>
	</figure></para>

      <para>Deze en de volgende figuren stellen een volume voor dat
	samenstellingen bevat die weer de subschijven bevatten.  In dit
	triviale voorbeeld bevat het volume een samenstelling en deze
	samenstelling bevat een subschijf.</para>

      <para>Dit speciale volume heeft geen voordeel boven een gewone
	schijf partitie.  Het bevat één samenstelling, dus
	het is niet redundant.  De samenstelling bevat
	één subschijf, dus er is geen verschil in de
	plaats van de gegevens met een conventionele schijfpartitie.  In
	de volgende paragrafen worden meer interessante instellingen
	getoond.</para>
    </sect2>

    <sect2>
      <title>Verbeterde betrouwbaarheid: spiegelen</title>

      <para>De betrouwbaarheid van een volume wordt vergroot door
	spiegelen.  Bij het opzetten van een gespiegeld volume is het
	van belang dat subschijven van iedere samenstelling op een
	andere schijf staan, zodat een defecte schijf niet beide
	samenstellingen beïnvloedt.  De volgende instelling maakt
	een gespiegeld volume:</para>

      <programlisting>drive b device /dev/da4h
       volume mirror
      plex org concat
       sd length 512m drive a
         plex org concat
           sd length 512m drive b</programlisting>

      <para>In dit voorbeeld was het niet nodig om schijf
	<emphasis>a</emphasis> opnieuw te definiëren, omdat Vinum
	alle objecten bijhoudt in de instellingendatabase.  Na het
	verwerken van deze definitie, ziet de instelling er als volgt
	uit:</para>

      <programlisting width="97">
        Drives:        2 (4 configured)
        Volumes:        2 (4 configured)
        Plexes:        3 (8 configured)
        Subdisks:      3 (16 configured)

        D a                    State: up        Device /dev/da3h        Avail: 1549/2573 MB (60%)
        D b                    State: up        Device /dev/da4h        Avail: 2061/2573 MB (80%)

    V myvol              State: up        Plexes:      1  Size:        512 MB
    V mirror             State: up        Plexes:      2  Size:        512 MB

    P myvol.p0         C State: up        Subdisks:    1  Size:        512 MB
    P mirror.p0        C State: up        Subdisks:    1  Size:        512 MB
    P mirror.p1        C State: initializing     Subdisks:     1 Size:        512 MB

    S myvol.p0.s0        State: up        PO:        0 B  Size:        512 MB
    S mirror.p0.s0        State: up        PO:        0 B  Size:        512 MB
    S mirror.p1.s0        State: empty    PO:        0 B  Size:        512 MB</programlisting>

      <para>Het is grafisch weergegeven in
	<xref linkend="vinum-mirrored-vol"/>.</para>

      <para>
	<figure id="vinum-mirrored-vol">
	  <title>Een gespiegeld Vinum volume</title>

	  <graphic fileref="vinum/vinum-mirrored-vol"/>
	</figure></para>

      <para>In dit voorbeeld bevat iedere samenstelling de volledige 512
	MB van de opslagcapaciteit.  Net als in het vorige voorbeeld
	bevat iedere samenstelling slechts één
	subschijf.</para>
    </sect2>

    <sect2>
      <title>Verbeterde prestatie</title>

      <para>Het gespiegelde volume in het vorige voorbeeld is beter
	bestand tegen hardware fouten dan een niet-gespiegeld volume,
	maar de prestaties zijn lager: iedere schrijfactie naar het
	volume moet op beide schijven worden uitgevoerd, waardoor een
	groter deel van de bandbreedte van de schijf nodig is.  Als
	prestaties een belangrijke rol spelen, moet er een andere
	benadering gekozen worden: in plaats van spiegelen worden de
	gegevens verdeeld over zoveel mogelijk schijven.  De volgende
	instelling laat een volume zien waarbij een samenstelling
	over vier schijven verdeeld is:</para>

      <programlisting>drive c device /dev/da5h
      drive d device /dev/da6h
      volume stripe
      plex org striped 512k
        sd length 128m drive a
        sd length 128m drive b
        sd length 128m drive c
        sd length 128m drive d</programlisting>

      <para>Zoals eerder al te zien was, is het niet nodig om schijven
	die al bekend zijn bij Vinum opnieuw te definiëren.  Na
	het verwerken van deze definitie, ziet de instelling er zo
	uit:</para>

      <programlisting width="92">
      Drives:             4 (4 configured)
      Volumes:        3 (4 configured)
      Plexes:             4 (8 configured)
      Subdisks:      7 (16 configured)

   D a                    State: up        Device /dev/da3h        Avail: 1421/2573 MB (55%)
   D b                    State: up        Device /dev/da4h        Avail: 1933/2573 MB (75%)
   D c                    State: up        Device /dev/da5h        Avail: 2445/2573 MB (95%)
   D d                    State: up        Device /dev/da6h        Avail: 2445/2573 MB (95%)

   V myvol                State: up        Plexes:      1  Size:        512 MB
   V mirror               State: up        Plexes:      2  Size:        512 MB
   V striped              State: up        Plexes:      1  Size:        512 MB

   P myvol.p0           C State: up        Subdisks:    1  Size:        512 MB
   P mirror.p0          C State: up        Subdisks:    1  Size:        512 MB
   P mirror.p1          C State: initializing     Subdisks:     1 Size:        512 MB
   P striped.p1           State: up        Subdisks:    1  Size:        512 MB

   S myvol.p0.s0          State: up        PO:        0 B  Size:        512 MB
   S mirror.p0.s0         State: up        PO:        0 B  Size:        512 MB
   S mirror.p1.s0         State: empty     PO:        0 B  Size:        512 MB
   S striped.p0.s0        State: up        PO:        0 B  Size:        128 MB
   S striped.p0.s1        State: up        PO:      512 kB Size:        128 MB
   S striped.p0.s2        State: up        PO:     1024 kB Size:        128 MB
   S striped.p0.s3        State: up        PO:     1536 kB Size:        128 MB</programlisting>

      <para>
	<figure id="vinum-striped-vol">
	  <title>Een verdeeld Vinum volume</title>

	  <graphic fileref="vinum/vinum-striped-vol"/>
	</figure></para>

      <para>Dit volume wordt weergegeven in
	<xref linkend="vinum-striped-vol"/>.  De grijstinten geven de
	positie binnen de samenstelling aan: de lichtste strepen komen
	het eerst, de donkerste het laatst.</para>
    </sect2>

    <sect2>
      <title>Betrouwbaarheid en prestaties</title>

      <para><anchor id="vinum-resilience"/>Met voldoende hardware is het
	mogelijk om een volume te bouwen met zowel verbeterde
	betrouwbaarheid als verbeterde prestaties ten opzichte van een
	standaard &unix; partitie.  De volgende instelling is een
	voorbeeld van zo'n volume:</para>

      <programlisting>volume raid10
      plex org striped 512k
        sd length 102480k drive a
        sd length 102480k drive b
        sd length 102480k drive c
        sd length 102480k drive d
        sd length 102480k drive e
      plex org striped 512k
        sd length 102480k drive c
        sd length 102480k drive d
        sd length 102480k drive e
        sd length 102480k drive a
        sd length 102480k drive b</programlisting>

      <para>De subschijven van de tweede samenstelling zijn twee
	schijven verschoven ten opzichte van die van de eerste
	samenstelling.  Dit zorgt ervoor dat een schrijfactie niet naar
	dezelfde schijven gaat, zelfs niet als die schrijfactie over
	twee schijven plaatsvindt.</para>

      <para><xref linkend="vinum-mirrored-vol"/> laat deze instelling
	zien in grafische vorm.</para>

      <para>
	<figure id="vinum-raid10-vol">
	  <title>Een gespiegeld en verdeeld Vinum volume</title>

	  <graphic fileref="vinum/vinum-raid10-vol"/>
	</figure></para>
    </sect2>
  </sect1>

  <sect1 id="vinum-object-naming">
    <title>Objectnamen</title>

    <para>Zoals eerder in dit hoofdstuk beschreven staat, kent Vinum
      standaardnamen toe aan samenstellingen en subschijven.  Er mag
      echter een andere naam aan gegeven worden.  Een andere naamgeving
      wordt niet aangeraden: ervaring met de VERITAS volumebeheerder,
      die een willekeurige object benaming toestaat, heeft laten zien
      dat deze flexibiliteit geen beduidend voordeel heeft, terwijl het
      de kans op verwarring vergroot.</para>

    <para>Namen mogen bestaan uit alle karakters, behalve de spatie,
      maar het wordt aanbevolen om alleen letters, cijfers en het
      liggende streepje te gebruiken.  De namen van de volumes,
      samenstellingen en subschijven kunnen 64 tekens lang zijn en de
      namen van schijven kunnen 32 tekens lang zijn.</para>

    <para>Vinum objecten worden apparaatknooppunten toegekend in de
      hiërarchie <filename class="directory">/dev/gvinum</filename>.  Met
      de instellingen uit de vorige paragraaf creërt Vinum de volgende
      apparaatknooppunten:</para>

    <itemizedlist>
      <listitem>
	<para>Karakterapparaatingangen voor elk volume.  Dit zijn de
	  primaire apparaten die door Vinum gebruikt worden.  De
	  bovenstaande configuratie zou dus deze apparaten bevatten:
	  <filename class="devicefile">/dev/gvinum/myvol</filename>,
	  <filename class="devicefile">/dev/gvinum/mirror</filename>,
	  <filename class="devicefile">/dev/gvinum/striped</filename>,
	  <filename class="devicefile">/dev/gvinum/raid5</filename> en
	  <filename class="devicefile">/dev/gvinum/raid10</filename>.</para>
      </listitem>

      <listitem>
	<para>Alle volumes krijgen ingangen direct onder
	  <filename class="directory">/dev/gvinum/</filename>.</para>
      </listitem>

      <listitem>
	<para>De mappen
	  <filename class="directory">/dev/gvinum/plex</filename>, en
	  <filename class="directory">/dev/gvinum/sd</filename>, welke
	  respectievelijk apparaatknooppunten voor elke plex en voor elke
	  subschijf bevatten.</para>
      </listitem>
    </itemizedlist>

    <para>Dit is een volgend voorbeeld:</para>

    <programlisting>drive drive1 device /dev/sd1h
        drive drive2 device /dev/sd2h
        drive drive3 device /dev/sd3h
        drive drive4 device /dev/sd4h
    volume s64 setupstate
      plex org striped 64k
        sd length 100m drive drive1
        sd length 100m drive drive2
        sd length 100m drive drive3
        sd length 100m drive drive4</programlisting>

    <para>Na verwerking van dit bestand maakt &man.gvinum.8; de volgende
      structuur aan in <filename
	class="directory">/dev/gvinum</filename>:</para>

    <programlisting>drwxr-xr-x  2 root  wheel      512 Apr 13 16:46 plex
        crwxr-xr--  1 root  wheel  91,   2 Apr 13 16:46 s64
        drwxr-xr-x  2 root  wheel      512 Apr 13 16:46 sd


      /dev/vinum/plex:
  total 0
  crwxr-xr--  1 root  wheel  25, 0x10000002 Apr 13 16:46 s64.p0

      /dev/vinum/sd:
  total 0
  crwxr-xr--  1 root  wheel  91, 0x20000002 Apr 13 16:46 s64.p0.s0
  crwxr-xr--  1 root  wheel  91, 0x20100002 Apr 13 16:46 s64.p0.s1
  crwxr-xr--  1 root  wheel  91, 0x20200002 Apr 13 16:46 s64.p0.s2
  crwxr-xr--  1 root  wheel  91, 0x20300002 Apr 13 16:46 s64.p0.s3</programlisting>

    <para>Hoewel het wordt aangeraden om samenstellingen en subschijven
      geen naam mee te geven, moeten Vinum schijven een naam hebben.
      Hierdoor kan een schijf naar een andere locatie verplaatst worden
      terwijl hij nog steeds automatisch herkend wordt.  Schijfnamen
      mogen maximaal 32 tekens lang zijn.</para>

    <sect2>
      <title>Bestandssystemen maken</title>

      <para>Volumes lijken voor het systeem identiek aan schijven, met
	één uitzondering: in tegenstelling tot &unix;
	schijven partitioneert Vinum het volume niet en het bevat dus
	geen partitietabel.  Daarom was het nodig een paar
	schijfhulpprogramma's te veranderen, met name &man.newfs.8;, dat
	voorheen probeerde om de laatste letter van een Vinum
	volumenaam als een partitie te zien.  Bijvoorbeeld: een schijf
	kan een naam hebben als <filename
	  class="devicefile">/dev/ad0a</filename> of <filename
	  class="devicefile">/dev/da2h</filename>.  Deze namen stellen
	respectievelijk de eerste partitie (<devicename>a</devicename>)
	op de eerste (0) IDE schijf (<devicename>ad</devicename>) en de
	achtste partitie (<devicename>h</devicename>) op de derde (2)
	SCSI schijf (<devicename>da</devicename>) voor.  Een Vinum
	volume kan daarentegen <filename
	  class="devicefile">/dev/gvinum/concat</filename>
	heten, een naam die geen enkele relatie met een partitienaam
	heeft.</para>

      <para>Gebruik &man.newfs.8; om een bestandssysteem op dit volume
	aan te maken:</para>

      <screen>&prompt.root; <userinput>newfs /dev/gvinum/concat</userinput></screen>
    </sect2>
  </sect1>

  <sect1 id="vinum-config">
    <title>Vinum instellen</title>

    <para>De <filename>GENERIC</filename> kernel bevat geen Vinum.  Het
      is mogelijk een kernel te bouwen waar Vinum in zit, maar dit
      wordt niet aangeraden.  De standaard manier om Vinum te starten
      is als kernelmodule (<acronym>kld</acronym>).  Het is zelfs niet
      nodig om &man.kldload.8; te gebruiken voor Vinum.  Als
      &man.gvinum.8; wordt gestart en de module is niet geladen, dan
      gebeurt dit alsnog automatisch.</para>

    <sect2>
      <title>Opstarten</title>

      <para>Vinum slaat de instellingeninformatie op de schijfslices op
	in ongeveer dezelfde vorm als de instellingenbestanden.  Bij
	het lezen van de instellingendatabase herkent Vinum een aantal
	sleutelwoorden die niet zijn toegestaan in
	instellingenbestanden.  Een schijfinstelling kan bijvoorbeeld
	de volgende tekst bevatten:</para>

      <programlisting width="119">volume myvol state up
volume bigraid state down
plex name myvol.p0 state up org concat vol myvol
plex name myvol.p1 state up org concat vol myvol
plex name myvol.p2 state init org striped 512b vol myvol
plex name bigraid.p0 state initializing org raid5 512b vol bigraid
sd name myvol.p0.s0 drive a plex myvol.p0 state up len 1048576b driveoffset 265b plexoffset 0b
sd name myvol.p0.s1 drive b plex myvol.p0 state up len 1048576b driveoffset 265b plexoffset 1048576b
sd name myvol.p1.s0 drive c plex myvol.p1 state up len 1048576b driveoffset 265b plexoffset 0b
sd name myvol.p1.s1 drive d plex myvol.p1 state up len 1048576b driveoffset 265b plexoffset 1048576b
sd name myvol.p2.s0 drive a plex myvol.p2 state init len 524288b driveoffset 1048841b plexoffset 0b
sd name myvol.p2.s1 drive b plex myvol.p2 state init len 524288b driveoffset 1048841b plexoffset 524288b
sd name myvol.p2.s2 drive c plex myvol.p2 state init len 524288b driveoffset 1048841b plexoffset 1048576b
sd name myvol.p2.s3 drive d plex myvol.p2 state init len 524288b driveoffset 1048841b plexoffset 1572864b
sd name bigraid.p0.s0 drive a plex bigraid.p0 state initializing len 4194304b driveoff set 1573129b plexoffset 0b
sd name bigraid.p0.s1 drive b plex bigraid.p0 state initializing len 4194304b driveoff set 1573129b plexoffset 4194304b
sd name bigraid.p0.s2 drive c plex bigraid.p0 state initializing len 4194304b driveoff set 1573129b plexoffset 8388608b
sd name bigraid.p0.s3 drive d plex bigraid.p0 state initializing len 4194304b driveoff set 1573129b plexoffset 12582912b
sd name bigraid.p0.s4 drive e plex bigraid.p0 state initializing len 4194304b driveoff set 1573129b plexoffset 16777216b</programlisting>

      <para>Duidelijke verschillen zijn de aanwezigheid van expliciete
	locatie informatie en namen (beide zijn toegestaan, maar worden
	afgeraden) en informatie over de toestand (die niet beschikbaar
	is voor de gebruiker).  Vinum slaat geen informatie over
	schijven op in de instellingen: het vindt de schijven door de
	ingestelde schijven te scannen naar partities met een
	vinum label.  Hierdoor kan Vinum zelfs schijven detecteren als
	ze aan een andere &unix; schijf worden toegekend.</para>

      <sect3 id="vinum-rc-startup">
	<title>Automatisch opstarten</title>

	<para><emphasis>Gvinum</emphasis> start altijd automatisch op
	  wanneer de kernelmodule eenmaal is geladen, via
	  &man.loader.conf.5;.  Voeg
	  <literal>geom_vinum_load="YES"</literal> toe aan
	  <filename>/boot/loader.conf</filename> om de module
	  <emphasis>GVinum</emphasis> tijdens het opstarten te
	  laden.</para>

	<para>Als Vinum met <command>gvinum start</command> wordt
	  gestart, leest Vinum de instellingendatabase van
	  één van de Vinum schijven.  Normaal gesproken
	  bevat iedere schijf een identieke kopie van de
	  instellingendatabase.  Het maakt dus niet uit welke schijf
	  gelezen wordt.  Na een crash moet Vinum echter bepalen welke
	  schijf het laatst is bijgewerkt en de instellingen van die
	  schijf gebruiken.  Als het nodig is worden de instellingen
	  van de oudere schijven daarna bijgewerkt, in volgorde van
	  leeftijd.</para>
      </sect3>
    </sect2>
  </sect1>

  <sect1 id="vinum-root">
    <title>Het rootbestandssysteem op Vinum</title>

    <para>Bij een machine die een volledig gespiegeld bestandssysteem
      heeft, is het wenselijk ook het rootbestandssysteem te spiegelen.
      Het bouwen van zo'n instelling is niet zo rechttoe-rechtaan als
      bij een ander bestandssysteem omdat:</para>

    <itemizedlist>
      <listitem>
	<para>Het rootbestandssysteem al heel snel beschikbaar moet zijn
	  tijdens het opstartproces, dus de Vinum infrastructuur moet
	  dan al beschikbaar zijn.</para>
      </listitem>

      <listitem>
	<para>Het volume met het rootbestandssysteem bevat ook de
	  bootstrap en de kernel, die gelezen moeten worden door de
	  eigen systeemprogramma's (bijvoorbeeld de BIOS op PC's), die
	  meestal ingesteld kunnen worden om Vinum te gebruiken.</para>
      </listitem>
    </itemizedlist>

    <para>In de volgende paragrafen wordt de term
      <quote>rootvolume</quote> gebruikt voor het Vinum volume dat het
      rootbestandssysteem bevat.  Het is waarschijnlijk een goed idee om
      de naam <literal>root</literal> te gebruiken voor dit volume, maar
      dit is niet technisch noodzakelijk.  Alle commandovoorbeelden in
      de volgende stukken gaan echter uit van deze naam.</para>

    <sect2>
      <title>Vinum op tijd starten voor het rootbestandssysteem</title>

      <para>Om dit te bereiken, moeten een aantal stappen worden
	doorlopen:</para>

      <itemizedlist>
	<listitem>
	  <para>Vinum moet beschikbaar zijn voor de kernel tijdens
	    het opstarten.  De methode zoals beschreven in
	    <xref linkend="vinum-rc-startup"/> is dus niet geschikt en
	    de <literal>start_vinum</literal> parameter mag zelfs
	    <emphasis>niet</emphasis> aanwezig zijn als de volgende
	    opzet wordt gebruikt.  De eerste optie is Vinum statisch
	    in de kernel te compileren, zodat het altijd beschikbaar
	    is.  Maar die is vaak niet wenselijk.  Er is nog een
	    mogelijkheid door <filename>/boot/loader</filename>
	    (<xref linkend="boot-loader"/>) de Vinum kernel module te
	    laten laden, voordat de kernel gestart wordt.  Dit wordt
	    gedaan door de volgende regel in
	    <filename>/boot/loader.conf</filename> op te nemen:</para>

	  <programlisting>gvinum_load="YES"</programlisting>
	</listitem>

	<listitem>
	  <para>Voor <emphasis>Gvinum</emphasis> wordt alles
	    automatisch opgestart nadat de kernelmodule eenmaal is
	    geladen, dus is alleen de procedure die hierboven is
	    beschreven nodig.</para>
	</listitem>
      </itemizedlist>
    </sect2>

    <sect2>
      <title>Een Vinum rootvolume beschikbaar maken voor
	bootstrap</title>

      <para>Omdat de huidige &os; bootstrap maar 7,5 KB code bevat en
	al belast is met het lezen van bestanden (zoals
	<filename>/boot/loader</filename>) van het UFS bestandssysteem,
	is het bijna onmogelijk om het ook te leren hoe Vinum
	informatie gelezen moet worden en deze dan te gebruiken om de
	elementen van het bootvolume samen te stellen.  Er zijn daarom
	een paar trucs nodig om de bootstrapcode wijs te maken dat er
	een standaard <literal>"a"</literal> partitie aanwezig is met
	het rootbestandssysteem.</para>

      <para>Om dit mogelijk te maken, moet het rootvolume aan de
	volgende eisen voldoen:</para>

      <itemizedlist>
	<listitem>
	  <para>Het rootvolume mag niet verdeeld of RAID-5 zijn.</para>
	</listitem>

	<listitem>
	  <para>Het rootvolume mag niet meer dan één
	    aaneengeschakelde subschijf per samenstelling
	    bevatten.</para>
	</listitem>
      </itemizedlist>

      <para>Het is mogelijk en wenselijk om meer dan één
	samenstelling te hebben, ieder met een replica van het
	rootbestandssysteem.  Het bootstrapproces gebruikt wel maar
	één van deze replica's om de bootstrap en alle
	andere bestanden te vinden, tot het moment dat de kernel het
	rootbestandssysteem laadt.  Iedere subschijf binnen deze
	samenstellingen heeft dus zijn eigen <literal>"a"</literal>
	partitievoorstelling nodig om dit apparaat opstartbaar te maken.
	Het is niet verplicht dat iedere voorgestelde
	<literal>"a"</literal> partitie op dezelfde offset is geplaatst
	binnen het apparaat, vergeleken met andere apparaten die
	samenstellingen van het rootvolume bevatten.  Het is wel een
	goed idee om op die manier Vinum volumes te maken, zodat de
	resulterende gespiegelde apparaten symmetrisch zijn.  Dit om
	verwarring te voorkomen.</para>

      <para>Om deze <literal>"a"</literal> partities voor ieder
	apparaat dat een deel van het rootvolume bevat te maken, moet
	het volgende worden gedaan:</para>

      <procedure>
	<step>
	  <para>De locatie (offset vanaf het begin van het apparaat) en
	    de grootte van de subschijf die onderdeel is van het
	    rootvolume moet als volgt bekeken worden:</para>

	  <screen>&prompt.root; <userinput>gvinum l -rv root</userinput></screen>

	  <note><para>De Vinum offsets en groottes worden aangegeven in
	    bytes.  Ze moeten door 512 worden gedeeld om de bloknummers
	    te krijgen die in <command>bsdlabel</command> moeten
	    worden gebruikt.</para></note>
	</step>

	<step>
	  <para>Voor elk apparaat dat deelneemt aan het
	    rootbestandssysteem moet het onderstaande command
	    uitgevoerd worden:</para>

	  <screen>&prompt.root; <userinput>bsdlabel -e <replaceable>apparaatnaam</replaceable></userinput></screen>

	  <para><replaceable>apparaatnaam</replaceable> moet of de naam
	    van een schijf (zoals <devicename>da0</devicename>) voor
	    schijven zonder slice-tabel zijn (ook wel: fdisk), of de
	    naam van de slice zijn (zoals
	    <devicename>ad0s1</devicename>).</para>

	  <para>Als er al een <literal>"a"</literal> partitie op het
	    apparaat aanwezig is (waarschijnlijk met een pre-Vinum
	    rootbestandssysteem), moet die eerst worden hernoemd,
	    zodat het wel toegankelijk blijft (voor de zekerheid), maar
	    niet langer gebruikt wordt om het systeem van op te
	    starten.  Actieve partities (zoals een rootbestandssysteem
	    dat op dit moment aangekoppeld is) kan geen andere naam
	    gegeven worden.  Dit moet dus gebeuren als het systeem vanaf
	    een <quote>Fixit</quote> medium opgestart is of in twee
	    stappen, waar (in een gespiegelde situatie) de schijf waar
	    niet van opgestart is als eerste wordt aangepast.</para>

	  <para>Daarna moet de offset van de Vinum partitie op dit
	    apparaat (als het bestaat) opgeteld worden bij de offset
	    van de rootvolume subschijf op dit apparaat.  De
	    resulterende waarde wordt de <literal>"offset"</literal>
	    waarde voor de nieuwe <literal>"a"</literal> partitie.  De
	    <literal>"size"</literal> waarde voor deze partitie kan
	    worden gehaald uit bovenstaande berekening.  De
	    <literal>"fstype"</literal> wordt
	    <literal>4.2BSD</literal>.  De <literal>"fsize"</literal>,
	    <literal>"bsize"</literal> en <literal>"cpg"</literal>
	    waardes moeten zo goed mogelijk worden gekozen om een
	    daadwerkelijk bestandssysteem na te bootsen, hoewel ze
	    vrij onbelangrijk zijn in deze context.</para>

	  <para>Op deze manier wordt een nieuwe <literal>"a"</literal>
	    partitie gemaakt dat de Vinum partitie op dit apparaat
	    overlapt.  Het <command>bsdlabel</command> staat deze
	    overlap alleen toe als de Vinum partitie gemarkeerd is met
	    het bestandssysteemtype <literal>"vinum"</literal>.</para>
	</step>

	<step>
	  <para>Dat is het!  Er bestaat nu een nep
	    <literal>"a"</literal> partitie op ieder apparaat dat een
	    replica van het rootvolume heeft.  Het is aan te bevelen
	    om de resultaten nogmaals te verifiëren met iets
	    als:</para>

	  <screen>&prompt.root; <userinput>fsck -n /dev/<replaceable>devnaam</replaceable>a</userinput></screen>
	</step>
      </procedure>

      <note>
	<para>Alle bestanden die controle informatie bevatten
	  moeten relatief zijn ten opzichte van het
	  rootbestandssysteem in het Vinum volume dat, bij het
	  creëren van een Vinum volume, niet overeen hoeft te komen
	  met het rootbestandssysteem dat op dit moment in gebruik is.
	  Dit geldt in het bijzonder voor
	  <filename>/etc/fstab</filename> en
	  <filename>/boot/loader.conf</filename>.</para>
      </note>

      <para>Bij de volgende herstart zou de bootstrap de juiste
	controle informatie moeten vinden in het nieuwe, op Vinum
	gebaseerde, rootbestandssysteem en moeten starten.  Aan het
	einde van het kernel initialisatie proces, nadat alle apparaten
	aangemeld zijn, geeft het volgende bericht aan dat het opzetten
	gelukt is:</para>

      <screen>Mounting root from ufs:/dev/gvinum/root</screen>
    </sect2>

    <sect2>
      <title>Een op Vinum gebaseerde rootinstallatie</title>

      <para>Nadat het Vinum rootvolume is opgezet, geeft
	<command>gvinum l -rv root</command> een volgend
	resultaat:</para>

      <screen>...
Subdisk root.p0.s0:
                Size:        125829120 bytes (120 MB)
                State: up
                Plex root.p0 at offset 0 (0 B)
                Drive disk0 (/dev/da0h) at offset 135680 (132 kB)

Subdisk root.p1.s0:
                Size:        125829120 bytes (120 MB)
                State: up
                Plex root.p1 at offset 0 (0 B)
                Drive disk1 (/dev/da1h) at offset 135680 (132 kB)</screen>

      <para>De interessante waarden zijn <literal>135680</literal> voor
	de offset (relatief ten opzichte van de partitie
	<filename class="devicefile">/dev/da0h</filename>).  Dit vertaalt zich
	naar 265 schijfblokken van 512 bytes in termen van
	<command>bsdlabel</command>.
	Zo is de grootte van dit rootvolume 245760 blokken van 512 bytes.
	<filename class="devicefile">/dev/da1h</filename>, dat de tweede
	replica van dit rootvolume bevat, is symmetrische opgezet.</para>

      <para>Het bsdlabel voor deze apparaten kan er zo uitzien:</para>

      <screen>...
8 partitions:
#       size   offset   fstype   [fsize bsize bps/cpg]
  a:   245760     281   4.2BSD     2048 16384    0   # (Cyl.    0*- 15*)
  c: 71771688       0   unused       0    0        # (Cyl.    0 - 4467*)
  h: 71771672      16    vinum                     # (Cyl.    0*- 4467*)</screen>

      <para>Hieruit blijkt dat de <literal>"size"</literal> parameter
	voor de nep <literal>"a"</literal> partitie overeenkomt met
	de waarde als hierboven beschreven en dat de
	<literal>"offset"</literal> parameter de som is van de offset
	binnen de Vinum partitie <literal>"h"</literal> en de offset
	van deze partitie binnen het apparaat (of de slice).  Dit is
	een normale opzet om problemen te voorkomen zoals in <xref
	  linkend="vinum-root-panic"/> beschreven is.  Verder blijkt
	dat de hele <literal>"a"</literal> partitie volledig binnen de
	<literal>"h"</literal> partitie valt die alle Vinum gegevens
	voor dit apparaat bevat.</para>

      <para>In het bovenstaande voorbeeld is de volledige schijf voor
	Vinum gereserveerd en er is geen restant van de pre-Vinum
	rootpartitie, omdat dit een nieuwe schijf is die vanaf het begin
	af aan bedoeld was als onderdeel van een Vinum instelling.</para>
    </sect2>

    <sect2>
      <title>Problemen oplossen</title>

      <para>Als er iets fout gaat moet er een manier zijn om dat te
	herstellen.  De volgende lijst bevat een paar bekende valkuilen
	en oplossingen.</para>

      <sect3>
	<title>Systeem bootstrap laadt, maar systeem start niet
	  door</title>

	<para>Als om wat voor reden dan ook het systeem niet doorgaat
	  met opstarten, kan de bootstrap worden onderbroken door de
	  <keycap>spatie</keycap> toets in te drukken tijdens de 10
	  seconden waarschuwing.  Dan kunnen de loader variabelen
	  (zoals <literal>vinum.autostart</literal>) bekeken worden
	  met behulp van <command>show</command> en aangepast worden
	  met <command>set</command> of
	  <command>unset</command>.</para>

	<para>Als het enige probleem was dat de Vinum kernelmodule
	  nog niet in de lijst van modules staat die automatisch
	  geladen wordt, dan zal <command>load geom_vinum</command>
	  helpen.</para>

	<para>Als alles in orde is, kan het opstartproces doorgestart
	  worden met <command>boot -as</command>.  De opties
	  <option>-as</option> geven de kernel aan om het
	  rootbestandssysteem te vragen (<option>-a</option>),
	  en het opstartproces te stoppen in single-user mode
	  (<option>-s</option>), waarbij het rootbestandssysteem als
	  alleen-lezen aangekoppeld wordt.  Op die manier is er geen
	  risico op gegevensinconsistentie tussen de samenstellingen,
	  zelfs niet als er maar één samenstelling van
	  een multi-samenstellingen volume aangekoppeld is.</para>

	<para>Op de prompt, waar om het rootbestandssysteem gevraagd
	  wordt, kan ieder apparaat dat een valide rootbestandssysteem
	  bevat worden opgegeven.  Als <filename>/etc/fstab</filename>
	  goed is opgezet, is iets als
	  <literal>ufs:/dev/gvinum/root</literal> te zien.  Een typische
	  andere keuze kan <literal>ufs:da0d</literal> zijn, dat een
	  hypothetische partitie is die het pre-Vinum
	  rootbestandssysteem bevat.  Als één van de alias
	  <literal>"a"</literal> partities ingevuld wordt die
	  eigenlijk een referentie naar de subschijf van het Vinum
	  rootapparaat zijn, dan wordt in een gespiegelde opzet maar
	  éé kant van het gespiegelde volume aangekoppeld.
	  Als dit bestandssysteem later als lezen/schrijven
	  aangekoppeld wordt, moet(en) de andere samenstelling(en) van
	  het rootvolume verwijderd worden, omdat deze samenstellingen
	  anders inconsistente gegevens bevatten.</para>
      </sect3>

      <sect3>
	<title>Alleen primaire bootstrap laadt</title>

	<para>Als <filename>/boot/loader</filename> niet start, maar
	  de primaire bootstrap laadt wel (zichtbaar door een enkel
	  minteken in de linker bovenhoek van het scherm, direct na de
	  start van het opstartproces), kan worden geprobeerd het
	  primaire opstartproces te onderbreken door op de
	  <keycap>spatie</keycap> toets te drukken.  Dit zorgt ervoor
	  dat het opstartproces stopt bij de tweede fase (zie ook
	  <xref linkend="boot-boot1"/>).  Hier kan worden geprobeerd
	  vanaf een andere partitie te starten, bijvoorbeeld van de
	  partitie waar het vorige rootbestandssysteem op stond, dat
	  nu van de <literal>"a"</literal> verplaatst is.</para>
      </sect3>

      <sect3 id="vinum-root-panic">
	<title>Niets start, paniek van bootstrap</title>

	<para>Dit gebeurt als de bootstrap is vernietigd door de Vinum
	  installatie.  Helaas laat Vinum op dit moment slechts 4 KB
	  vrij aan het begin van zijn partitie voordat de Vinum volume
	  identificatie geschreven wordt.  De stage 1 en 2 bootstraps
	  en de bsdlabel-informatie hebben ongeveer 8 KB nodig.  Dus
	  als de Vinum partitie op offset 0 van de slice van de schijf
	  begint die als opstartbaar was bedoeld, zal deze Vinum
	  informatie de bootstrap vernielen.</para>

	<para>Als bovenstaande situatie is omzeild, bijvoorbeeld door
	  te starten vanaf een <quote>Fixit</quote> medium, en de
	  bootstrap opnieuw is aangemaakt met
	  <command>bsdlabel -B</command> zoals beschreven in
	  <xref linkend="boot-boot1"/>, overschrijft de nieuwe bootstrap
	  de Vinum identificatie en kan Vinum de Vinum schijven niet
	  langer vinden.  Hoewel geen instellingsgegevens van Vinum of
	  gegevens in de Vinum volumes overschreven wordt en alle
	  gegevens hersteld kunnen worden door precies dezelfde
	  instellingsgegevens van Vinum opnieuw in te vullen, is dit
	  een lastige situatie om te herstellen.  Het zou nodig zijn om
	  de complete Vinum partitie tenminste 4&nbsp;KB te
	  verplaatsen, om te voorkomen dat de Vinum identificatie en de
	  bootstrap met elkaar botsen.</para>
      </sect3>
    </sect2>
  </sect1>
</chapter>