Even niets...
[ Voor 3% gewijzigd door Midas.e op 14-01-2013 17:34 ]
Dat heb ik hier ook als het gaat om compressie en sync.
Mijn grote boze data filesystem heeft sync en compressie uit. Lekker belangrijk als er een keer een film stuk is, dan download ik hem wel opnieuw.
Maar een filesystem waar ik backups van een andere machine op bewaar heeft juist compressie en sync aan staan. Dit zodat de backups veel kleiner zijn.
(Filesystem is 40GB groot, maar on disk 20GB vanwege compressie
Even niets...
Ja hoor, niets aan de hand. Alleen het handmatig updaten wil niet echt lekker lopen, maar dat ligt meer aan mij dan aan ZoL denk ikB2 schreef op maandag 14 januari 2013 @ 08:32:
[...]
Werkt ZFS bij jou ook goed samen met SystemD? Dus mounten van de pool bij het booten e.d?
GEOM: zvol/TANK/SF1: the secondary GPT header is not in the last LBA
Bij inspectie zag ik echter ook :
GEOM: ada2: the secondary GPT table is corrupt or invalid.
Dit is 1 van de 2 SSD die in gebruik zijn. voor log en cache.
Enig idee hoe ik dit simpel kan rechttrekken?
Oplossen lijkt me vrij simpel. Verwijder de ZIL en L2ARC uit je pool.
Daarna even opnieuw formatteren met GPT en de TRIM entire surface optie aanvinken in ZFSguru.
Daarna weer toevoegen aan de pool.
Maar ik er wel graag achter willen komen hoe het zo gekomen is... Het zijn niet zomaar meldingen die ik normaal vind...
Even niets...
Kon natuurlijk niet wachten en had dit net reeds precies zo uitgevoerd (alleen de ADA2 disk).FireDrunk schreef op maandag 14 januari 2013 @ 20:05:
Oplossen lijkt me vrij simpel. Verwijder de ZIL en L2ARC uit je pool.
Daarna even opnieuw formatteren met GPT en de TRIM entire surface optie aanvinken in ZFSguru.
Daarna weer toevoegen aan de pool.
Wat ongelofelijk simpel trouwens. Je klikt je net zo lang suf tot je de devices offffline hebt en kunt ze dan verwijderen.
Helaas met een reboot kwam ik ze toch weer tegen/ohwnee het is weg.
Het logging gedeelte vind ik wat lastig uitleesbaar zonder time-stamp onder het kernel-tab.
Allright, hierbij de sysctl resultatenFireDrunk schreef op maandag 14 januari 2013 @ 09:27:
vfs.zfs.arc_min Minimum ARC (Adaptive Replacement Cache) memory allocated
vfs.zfs.arc_max Maximum ARC (Adaptive Replacement Cache) memory allocated
vfs.zfs.arc_meta_limit ARC memory allocated for metadata such as directory index
vfs.zfs.vdev.min_pending Minimum queue depth on virtual devices
vfs.zfs.vdev.max_pending Maximum queue depth on virtual devices
Heb je een ZIL, L2ARC?
Benchmarks is eigenlijk wat je zelf denkt nodig te hebben. Je vertelde dat je alleen blu-ray's op je array bewaard. Dan is het het beste om dat gedrag na te bootsen.
Probeer het anders eens met dd:
dd if=/dev/zero of=[arraynaam/filesystem]/temp/data.000 bs=1M count=102400
Dit schrijft 100GB naar de file [array]/temp/data.000
dd of=/dev/null if=[arraynaam/filesystem]/temp/data.000 bs=16M
Dit leest de file weer in.
vfs.zfs.arc_min: 849534464 vfs.zfs.arc_max: 6796275712 vfs.zfs.arc_meta_limit: 1699068928 vfs.zfs.vdev.min_pending: 4 vfs.zfs.vdev.max_pending: 10
en de benchmarks...
[root@movieserver] /# dd if=/dev/zero of=mnt/movieserver/temp/data.000 bs=1M count=102400 102400+0 records in 102400+0 records out 107374182400 bytes transferred in 560.523088 secs (191560677 bytes/sec) [root@movieserver] /# dd of=dev/null if=mnt/movieserver/temp/data.000 bs=16M 6400+0 records in 6400+0 records out 107374182400 bytes transferred in 340.535274 secs (315310015 bytes/sec)
en de Freenas reporting tijdens het draaien van de benchmark (schrijven rond 20:00, lezen rond 20:10)

Wel even opmerken dat bij deze bench het geheugengebruik blijkbaar rond de 6GB zit maar bij het spelen van een Blu Ray ISO flatlinet die gewoon op 8GB.
[ Voor 17% gewijzigd door Waking_The_Dead op 14-01-2013 21:17 ]
Geen probleem; jouw client OS doet de GPT backup metdata dus niet in de laatste LBA opslaan. Of je hebt een keer de ZVOL vergroot, dat kan ook. Dit hoort geen probleem te zijn.Lekkerbek schreef op maandag 14 januari 2013 @ 19:01:
Tijdens de boot kwam ik dit tegen op een iSCSI volume:
GEOM: zvol/TANK/SF1: the secondary GPT header is not in the last LBA
Hier is je backup GPT table niet aanwezig, corrupt of op een andere plek zoals gebruikt door een ander OS.Bij inspectie zag ik echter ook :
GEOM: ada2: the secondary GPT table is corrupt or invalid.
Dit is 1 van de 2 SSD die in gebruik zijn. voor log en cache.
Je kunt doen op de root command line: gpart recover ada2
Zolang je niet beide kopiën corrumpeert is er opzich geen probleem.
Zo, dat is best wel wat.FireDrunk schreef op maandag 14 januari 2013 @ 18:04:
(Filesystem is 40GB groot, maar on disk 20GB vanwege compressie)
Ik heb op mijn normale filesystem LZJB-compressie, en op mijn backup-filesystem GZIP-6-compressie.
Dedup uit want dat had in alle gevallen nogal negatieve uitwerking op de performance.
Ik backup echter ook incremental, dus het zal ook niet veel opleveren. De gedachte erachter is dat de client al minder hoeft te versturen naar de server, dus netto een hogere performance dan dat je een volledige kopie naar de server stuurt (die het dan dedupt)
Oeh, grafiekjes!
@CiPHER: Misschien ook wat voor een volgende release van ZFSGuru?
[ Voor 18% gewijzigd door Compizfox op 14-01-2013 21:42 ]
Gewoon een heel grote verzameling snoertjes
Interessant, had inderdaad het volume vergroot waarover ik nog een vraagje wil stellen:Verwijderd schreef op maandag 14 januari 2013 @ 20:58:
[...]
Geen probleem; jouw client OS doet de GPT backup metdata dus niet in de laatste LBA opslaan. Of je hebt een keer de ZVOL vergroot, dat kan ook. Dit hoort geen probleem te zijn.
[...]
Hier is je backup GPT table niet aanwezig, corrupt of op een andere plek zoals gebruikt door een ander OS.
Je kunt doen op de root command line: gpart recover ada2
Zolang je niet beide kopiën corrumpeert is er opzich geen probleem.
Van 6 naar 8 T vergroot, om te kijken of dat makkelijk gaat... en jawel, je extend het net zo makkelijk in de windows client. Echter onder vollumes-tab van zfsguru staat nog steeds 5.88T (total space) terwijl size nu op 8 T staat.
Heb ik iets fout gedaan?
Je CPU zit duidelijk aan zijn dak... Een utilization van > 150% en een load van > 6 is niet mis.Waking_The_Dead schreef op maandag 14 januari 2013 @ 20:36:
[...]
Allright, hierbij de sysctl resultaten
vfs.zfs.arc_min: 849534464 vfs.zfs.arc_max: 6796275712 vfs.zfs.arc_meta_limit: 1699068928 vfs.zfs.vdev.min_pending: 4 vfs.zfs.vdev.max_pending: 10
en de benchmarks...
[root@movieserver] /# dd if=/dev/zero of=mnt/movieserver/temp/data.000 bs=1M count=102400 102400+0 records in 102400+0 records out 107374182400 bytes transferred in 560.523088 secs (191560677 bytes/sec) [root@movieserver] /# dd of=dev/null if=mnt/movieserver/temp/data.000 bs=16M 6400+0 records in 6400+0 records out 107374182400 bytes transferred in 340.535274 secs (315310015 bytes/sec)
en de Freenas reporting tijdens het draaien van de benchmark (schrijven rond 20:00, lezen rond 20:10)
[afbeelding]
Wel even opmerken dat bij deze bench het geheugengebruik blijkbaar rond de 6GB zit maar bij het spelen van een Blu Ray ISO flatlinet die gewoon op 8GB.
Ohja, brazos... Duidelijk
Een load van 6 op een brazos betekend: Dat het ding met zijn tong op zijn schoenen loopt...
[ Voor 4% gewijzigd door FireDrunk op 15-01-2013 08:20 ]
Even niets...
Huh? Dat begrijp ik even niet. Hoe kan de CPU nu zo zwaar belast zijn? Die moet toch niets doen?FireDrunk schreef op dinsdag 15 januari 2013 @ 08:19:
[...]
Je CPU zit duidelijk aan zijn dak... Een utilization van > 150% en een load van > 6 is niet mis.
Ohja, brazos... Duidelijk
Een load van 6 op een brazos betekend: Dat het ding met zijn tong op zijn schoenen loopt...
Even niets...
Uhm... ik vrees dat je iets specifieker moet zijn. Waar vind ik dat?FireDrunk schreef op dinsdag 15 januari 2013 @ 08:47:
Toon je filesystem overview eens, met alle ARC en Compressie settings enzo.
Daar klik je het betreffende filesystem aan, en kan je iets naar beneden een hoop settings zien.
Even niets...
Nope, Freenas.FireDrunk schreef op dinsdag 15 januari 2013 @ 10:33:
ZFSguru toch? Dan zit het in de webinterface onder filesystems.
Daar klik je het betreffende filesystem aan, en kan je iets naar beneden een hoop settings zien.
Zit dat ergens in die sysctl output?
zfs list -v op de console kan ook.
Even niets...
Ik kan nu niet aan mijn server, maar compressie en dedup staan zo goed als zeker af. Heeft ook niet zoveel zin voor oplag van ISO's denk ik zo.FireDrunk schreef op dinsdag 15 januari 2013 @ 10:53:
Uh, geen idee... Het gaat mij vooral om compressie / dedup.
zfs list -v op de console kan ook.
Dan zie je welke processen zoveel CPU in beslag nemen.
Even niets...
Dedup is het zeker al niet. Blijkbaar is dit maar beschikbaar is vanaf Freenas 8.3 en ik draai 8.0.4.FireDrunk schreef op dinsdag 15 januari 2013 @ 11:03:
Klopt, mar het verklaart wel een hoop CPU gebruik. Misschien is het verstandig om eens met top te gluren.
Dan zie je welke processen zoveel CPU in beslag nemen.
Nu had ik hier ook nog een vraagje over. Kan ik zonder problemen naar een hogere ZFS versie gaan of houdt dat risico's mbt dataverlies in?
Versie 5000 is voor Solaris en IllumOS wel beschikbaar maar dat is niet op elk platform hetzelfde, en niet verstandig om te gebruiken.
Even niets...
Even ter vergelijking; ipv een Brazos haalt mijn AMD x2 250 ook al 100% CPU met lezen of schrijven naar de ZFS array. Daarbij haalt hij ongeveer 300 MB/sec. De doorvoer is ook hier gelimiteerd door de processor en al het gereken aan checksums. Met gzip-9 compressie zak ik naar een 40-60 MB/sec.
Verwijderd
Waarom zeg je dit? En het is *niet* beschikbaar op Solaris (oracle) maar wel op illumos based distro's.FireDrunk schreef op dinsdag 15 januari 2013 @ 11:28:
Je kan wel omhoog gaan, maar niet verder dan 5/28, Nas4Free ondersteund deze nog gewoon.
Versie 5000 is voor Solaris en IllumOS wel beschikbaar maar dat is niet op elk platform hetzelfde, en niet verstandig om te gebruiken.
En hierboven: wat is er mis met 300MB/s read en 200MB/s write voor een Brazos ZFS NAS? Toch mooi?
Is het onderstaande een beetje een acceptabele performance voor een virtuele ZFS-storage (op ESXi5.1)? 4GB intern + 2 vCPU (non-shared) op Core-i5:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| dd if=/dev/zero of=out.tmp bs=1M count=12000
12000+0 records in
12000+0 records out
12582912000 bytes (13 GB) copied, 83.9095 seconds, 150 MB/s
dd if=out.tmp of=/dev/null bs=1M
12000+0 records in
12000+0 records out
12582912000 bytes (13 GB) copied, 47.3776 seconds, 266 MB/s
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
c1t1d0 ONLINE 0 0 0
c1t2d0 ONLINE 0 0 0
c1t3d0 ONLINE 0 0 0
c1t4d0 ONLINE 0 0 0
errors: No known data errors |
Schijven zijn 4xWD10EARS
Denon AVR-X2800H, Quadral Amun Mk.III, Technics SL-7, DIY PhonoPre, AT-152LP / 4.225kW Heckert Solar / SMA 3.0-1AV-41 / Kia e-Niro 64kWh First Edition
Mijn pool setup is als hieronder. Ik heb 6x Hitatchi Travelstar 5K1000.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| pool: tank
state: ONLINE
scan: scrub repaired 0 in 3h9m with 0 errors on Sat Jan 12 20:43:02 2013
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
raidz2-0 ONLINE 0 0 0
ata-HGST_HTS541010A9E680_JB100013J4J15B ONLINE 0 0 0
ata-HGST_HTS541010A9E680_JB100013J4HGNB ONLINE 0 0 0
ata-HGST_HTS541010A9E680_JB100013J2RP1A ONLINE 0 0 0
ata-HGST_HTS541010A9E680_JB100013J3TXGB ONLINE 0 0 0
ata-HGST_HTS541010A9E680_JB100013J3ST5B ONLINE 0 0 0
ata-HGST_HTS541010A9E680_JB100013J422JB ONLINE 0 0 0
cache
usb-SanDisk_Cruzer_Fit_4C532000050913100011-0:0 ONLINE 0 0 0
errors: No known data errors |
Wirehead schreef op dinsdag 15 januari 2013 @ 21:46:
Gents,
Is het onderstaande een beetje een acceptabele performance voor een virtuele ZFS-storage (op ESXi5.1)? 4GB intern + 2 vCPU (non-shared) op Core-i5:
code:
1 2 3 4 dd if=/dev/zero of=out.tmp bs=1M count=12000 12000+0 records in 12000+0 records out 12582912000 bytes (13 GB) copied, 83.9095 seconds, 150 MB/s
1
2
3
4
| dd if=/dev/zero of=out.tmp bs=1M count=12000 12000+0 records in 12000+0 records out 12582912000 bytes transferred in 13.010569 secs (967130024 bytes/sec) |
Hehe, bijna 1 GB/s, compressie ftw!
Dat is trouwens ook op ESXi 5.1, 8 GB RAM toegewezen, en 4 cores van een AMD FX-8120.
Heb ik trouwens een andere dd dan jij? Aangezien die van jou de snelheid in MB/s weergeeft en die van mij in bytes/sec
[ Voor 5% gewijzigd door Compizfox op 16-01-2013 00:27 ]
Gewoon een heel grote verzameling snoertjes
Ja, met compressie haal ik dat ook welCompizfox schreef op woensdag 16 januari 2013 @ 00:20:
[...]
Hehe, bijna 1 GB/s, compressie ftw!
Dat is trouwens ook op ESXi 5.1, 8 GB RAM toegewezen, en 4 cores van een AMD FX-8120.
offtopic:
Heb ik trouwens een andere dd dan jij? Aangezien die van jou de snelheid in MB/s weergeeft en die van mij in bytes/sec
De dd in de Nexenta Community Edition
Kan de trage write liggen aan het feit dat de set aangemaakt is met ASHIFT=9 ipv 12 (WD EARS presenteert 512b sectors ipv 4K die hij eigenlijk intern gebruikt..) - zou toch geen zo'n issue mogen geven op een sequentiële bench?
Denon AVR-X2800H, Quadral Amun Mk.III, Technics SL-7, DIY PhonoPre, AT-152LP / 4.225kW Heckert Solar / SMA 3.0-1AV-41 / Kia e-Niro 64kWh First Edition
Absoluut. Wat niet mooi is, is dat video afspelen aan grofweg 4MB/s niet lukt zonder haperen.Verwijderd schreef op dinsdag 15 januari 2013 @ 18:54:
En BSD.![]()
En hierboven: wat is er mis met 300MB/s read en 200MB/s write voor een Brazos ZFS NAS? Toch mooi?
Ik heb gisteren geen tijd meer gehad om statistieken op te meten tijdens het afspelen van een Blu Ray ISO. Dat zal ik vanavond eens doen. Want het lezen van een 100GB bestand vertoont toch wel gans anders gedrag dan het uitlezen van een gemounte ISO.
Ik zou graag wat statistieken zien, tijdens je ISO, misschien zijn je reads wel zover uit elkaar, dat je schijven in spindown gaan tijdens het kijken
Even niets...
Dat heb ik ook onder FreeBSD en Linux.Wirehead schreef op woensdag 16 januari 2013 @ 06:45:
[...]
offtopic:
De dd in de Nexenta Community Editiondit ivm native VMXNET3 support (10Gb/sec NIC's intern)
Gewoon een heel grote verzameling snoertjes
Even niets...
Op die manier kan ik het ookCompizfox schreef op woensdag 16 januari 2013 @ 00:20:code:
1 2 3 4 dd if=/dev/zero of=out.tmp bs=1M count=12000 12000+0 records in 12000+0 records out 12582912000 bytes transferred in 13.010569 secs (967130024 bytes/sec)
Hehe, bijna 1 GB/s, compressie ftw!
1
2
3
4
| $ dd if=/dev/zero of=out.tmp bs=1M count=120000 120000+0 records in 120000+0 records out 125829120000 bytes (126 GB) copied, 28.8825 s, 4.4 GB/s |
EDIT: Lezen is nog leuker:
1
2
3
4
| $ dd if=out.tmp of=/dev/zero bs=1M 120000+0 records in 120000+0 records out 125829120000 bytes (126 GB) copied, 13.7641 s, 9.1 GB/s |
[ Voor 12% gewijzigd door Xudonax op 16-01-2013 20:26 ]
Gewoon een heel grote verzameling snoertjes
Waar ik nu trouwens last van heb in Samba is dat na het kopieëren, het erg lang duurt om een file te 'finishen'.
Na elke file die ik schijf blijft de voortgangsbalk een tijdje (~5 seconden) op 100% staan voordat hij gesloten wordt. In die tijd kan ik hem ook niet cancellen.
Dit is trouwens gewoon in Windows 7 als client.
Heb ik iets verneukt in m'n Samba-config of zo?
[ Voor 79% gewijzigd door Compizfox op 16-01-2013 23:35 ]
Gewoon een heel grote verzameling snoertjes
1
2
3
4
5
| $ pv -perta film.mkv | dd of=/dev/null bs=1M 0:00:54 [ 226MiB/s] [ 226MiB/s] [================================================================================>] 100% 0+24630 records in 0+24630 records out 12913207037 bytes (13 GB) copied, 54.4266 s, 237 MB/s |
Als ie nog bezig is, zie je rechts naast de progress balk ook nog de ETA
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
| #!/usr/bin/env -iS perl # # $Id: arc_summary.pl,v 388:e27800740aa2 2011-07-08 02:53:29Z jhell $ # # Copyright (c) 2008 Ben Rockwood <benr@cuddletech.com>, # Copyright (c) 2010 Martin Matuska <mm@FreeBSD.org>, # Copyright (c) 2010-2011 Jason J. Hellenthal <jhell@DataIX.net>, # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # If you are having troubles when using this script from cron(8) please try # adjusting your PATH before reporting problems. # # /usr/bin & /sbin # # Binaries used are: # # dc(1), kldstat(8), sed(1), sysctl(8) & vmstat(8) # # Binaries that I am working on phasing out are: # # dc(1) & sed(1) use strict; use Getopt::Std; use Switch 'Perl5', 'Perl6'; my $usetunable = 1; # Change to 0 to disable sysctl MIB spill. my $show_sysctl_descriptions = 0; # Change to 1 (or use the -d flag) to show sysctl descriptions. my $alternate_sysctl_layout = 0; # Change to 1 (or use the -a flag) for alternate output. sub div1 { print "\n"; my $i = 1; my $l = 18; while ( $i <= $l ) { printf("%s", "----"); $i++; } print "\n"; } sub div2 { div1; print "\n"; } sub fBytes { my $kbytes = (2**10); my $mbytes = (2**20); my $gbytes = (2**30); my $tbytes = (2**40); my $pbytes = (2**50); my $ebytes = (2**60); my $zbytes = (2**70); my $ybytes = (2**80); my $Bytes = $_[0] || 0; defined($Bytes) or $Bytes = 0; my $Decimal = $_[1] || 2; defined($Decimal) or $Decimal = 2; if ($Bytes >= $ybytes) { return sprintf('%0.' . $Decimal . 'f', ($Bytes / $ybytes)) . "\tYiB"; } elsif ($Bytes >= $zbytes) { return sprintf('%0.' . $Decimal . 'f', ($Bytes / $zbytes)) . "\tZiB"; } elsif ($Bytes >= $ebytes) { return sprintf('%0.' . $Decimal . 'f', ($Bytes / $ebytes)) . "\tEiB"; } elsif ($Bytes >= $pbytes) { return sprintf('%0.' . $Decimal . 'f', ($Bytes / $pbytes)) . "\tPiB"; } elsif ($Bytes >= $tbytes) { return sprintf('%0.' . $Decimal . 'f', ($Bytes / $tbytes)) . "\tTiB"; } elsif ($Bytes >= $gbytes) { return sprintf('%0.' . $Decimal . 'f', ($Bytes / $gbytes)) . "\tGiB"; } elsif ($Bytes >= $mbytes) { return sprintf('%0.' . $Decimal . 'f', ($Bytes / $mbytes)) . "\tMiB"; } elsif ($Bytes >= $kbytes) { return sprintf( '%0.' . $Decimal . 'f', ($Bytes / $kbytes)) . "\tKiB"; } elsif ($Bytes == 0) { return sprintf('%d', 0 . "\tBytes"); } else { return sprintf('%d', $Bytes) . "\tBytes"; } } sub fHits { my $khits = (10**3); my $mhits = (10**6); my $bhits = (10**9); my $thits = (10**12); my $qhits = (10**15); my $Qhits = (10**18); my $shits = (10**21); my $Shits = (10**24); my $Hits = $_[0] || 0; defined($Hits) or $Hits = 0; my $Decimal = $_[1] || 2; defined($Decimal) or $Decimal = 2; if ($Hits >= $Shits) { return sprintf('%0.' . $Decimal . 'f', ($Hits / $Shits)) . "S"; } elsif ($Hits >= $shits) { return sprintf('%0.' . $Decimal . 'f', ($Hits / $shits)) . "s"; } elsif ($Hits >= $Qhits) { return sprintf('%0.' . $Decimal . 'f', ($Hits / $Qhits)) . "Q"; } elsif ($Hits >= $qhits) { return sprintf('%0.' . $Decimal . 'f', ($Hits / $qhits)) . "q"; } elsif ($Hits >= $thits) { return sprintf('%0.' . $Decimal . 'f', ($Hits / $thits)) . "t"; } elsif ($Hits >= $bhits) { return sprintf('%0.' . $Decimal . 'f', ($Hits / $bhits)) . "b"; } elsif ($Hits >= $mhits) { return sprintf('%0.' . $Decimal . 'f', ($Hits / $mhits)) . "m"; } elsif ($Hits >= $khits) { return sprintf('%0.' . $Decimal . 'f', ($Hits / $khits)) . "k"; } elsif ($Hits == 0) { return sprintf("%d", 0); } else { return sprintf("%d", $Hits); } } sub fPerc { my $lVal = $_[0] || 0; defined($lVal) or $lVal = 0; my $rVal = $_[1] || 0; defined($rVal) or $rVal = 0; my $Decimal = $_[2] || 2; defined($Decimal) or $Decimal = 2; if ($rVal > 0) { return sprintf('%0.' . $Decimal . 'f', 100*($lVal / $rVal)) . "%"; } else { return sprintf('%0.' . $Decimal . 'f', 100) . "%"; } } my @Kstats = qw( hw.pagesize hw.physmem kern.maxusers vm.kmem_map_free vm.kmem_map_size vm.kmem_size vm.kmem_size_max vm.kmem_size_min vm.kmem_size_scale vm.stats kstat.zfs vfs.zfs ); my $Kstat; my @Kstat_pull = `/sbin/sysctl -q @Kstats`; foreach my $kstat (@Kstat_pull) { chomp $kstat; if ($kstat =~ m/^([^:]+):\s+(.+)\s*$/s) { $Kstat->{$1} = $2; }; }; sub _system_memory { sub mem_rounded { my ($mem_size) = @_; my $chip_size = 1; my $chip_guess = ($mem_size / 8) - 1; while ($chip_guess != 0) { $chip_guess >>= 1; $chip_size <<= 1; } my $mem_round = (int($mem_size / $chip_size) + 1) * $chip_size; return $mem_round; } my $pagesize = $Kstat->{"hw.pagesize"}; my $mem_hw = &mem_rounded($Kstat->{"hw.physmem"}); my $mem_phys = $Kstat->{"hw.physmem"}; my $mem_all = $Kstat->{"vm.stats.vm.v_page_count"} * $pagesize; my $mem_wire = $Kstat->{"vm.stats.vm.v_wire_count"} * $pagesize; my $mem_active = $Kstat->{"vm.stats.vm.v_active_count"} * $pagesize; my $mem_inactive = $Kstat->{"vm.stats.vm.v_inactive_count"} * $pagesize; my $mem_cache = $Kstat->{"vm.stats.vm.v_cache_count"} * $pagesize; my $mem_free = $Kstat->{"vm.stats.vm.v_free_count"} * $pagesize; my $mem_gap_vm = $mem_all - ($mem_wire + $mem_active + $mem_inactive + $mem_cache + $mem_free); my $mem_total = $mem_hw; my $mem_avail = $mem_inactive + $mem_cache + $mem_free; my $mem_used = $mem_total - $mem_avail; print "System Memory:\n"; print "\n"; printf("\t%s\t%s Active,\t", fPerc($mem_active, $mem_all), fBytes($mem_active)); printf("%s\t%s Inact\n", fPerc($mem_inactive, $mem_all), fBytes($mem_inactive)); printf("\t%s\t%s Wired,\t", fPerc($mem_wire, $mem_all), fBytes($mem_wire)); printf("%s\t%s Cache\n", fPerc($mem_cache, $mem_all), fBytes($mem_cache)); printf("\t%s\t%s Free,\t", fPerc($mem_free, $mem_all), fBytes($mem_free)); printf("%s\t%s Gap\n", fPerc($mem_gap_vm, $mem_all), fBytes($mem_gap_vm)); print "\n"; printf("\tReal Installed:\t\t\t\t%s\n", fBytes($mem_hw)); printf("\tReal Available:\t\t\t%s\t%s\n", fPerc($mem_phys, $mem_hw), fBytes($mem_phys)); printf("\tReal Managed:\t\t\t%s\t%s\n", fPerc($mem_all, $mem_phys), fBytes($mem_all)); print "\n"; printf("\tLogical Total:\t\t\t\t%s\n", fBytes($mem_total)); printf("\tLogical Used:\t\t\t%s\t%s\n", fPerc($mem_used, $mem_total), fBytes($mem_used)); printf("\tLogical Free:\t\t\t%s\t%s\n", fPerc($mem_avail, $mem_total), fBytes($mem_avail)); print "\n"; my $ktext = `/sbin/kldstat |/usr/bin/awk \'BEGIN {print "16i 0";} NR>1 {print toupper(\$4) "+"} END {print "p"}\' |/usr/bin/dc`; my $kdata = `/usr/bin/vmstat -m |/usr/bin/sed -Ee '1s/.*/0/;s/.* ([0-9]+)K.*/\\1+/;\$s/\$/1024*p/' |/usr/bin/dc`; my $kmem = ($ktext + $kdata); my $kmem_map_size = $Kstat->{"vm.kmem_map_size"}; my $kmem_map_free = $Kstat->{"vm.kmem_map_free"}; my $kmem_map_total = ($kmem_map_size + $kmem_map_free); printf("Kernel Memory:\t\t\t\t\t%s\n", fBytes($kmem)); printf("\tData:\t\t\t\t%s\t%s\n", fPerc($kdata, $kmem), fBytes($kdata)); printf("\tText:\t\t\t\t%s\t%s\n\n", fPerc($ktext, $kmem), fBytes($ktext)); printf("Kernel Memory Map:\t\t\t\t%s\n", fBytes($kmem_map_total)); printf("\tSize:\t\t\t\t%s\t%s\n", fPerc($kmem_map_size, $kmem_map_total), fBytes($kmem_map_size)); printf("\tFree:\t\t\t\t%s\t%s\n", fPerc($kmem_map_free, $kmem_map_total), fBytes($kmem_map_free)); } my $daydate = localtime; chomp $daydate; div1; printf("ZFS Subsystem Report\t\t\t\t%s", $daydate); div2; sub _arc_summary { if (!$Kstat->{"vfs.zfs.version.spa"}) { return }; my $spa = $Kstat->{"vfs.zfs.version.spa"}; my $zpl = $Kstat->{"vfs.zfs.version.zpl"}; my $memory_throttle_count = $Kstat->{"kstat.zfs.misc.arcstats.memory_throttle_count"}; print "ARC Summary: "; if ($memory_throttle_count > 0) { print "(THROTTLED)\n"; } else { print "(HEALTHY)\n"; } printf("\tStorage pool Version:\t\t\t%d\n", $spa); printf("\tFilesystem Version:\t\t\t%d\n", $zpl); printf("\tMemory Throttle Count:\t\t\t%s\n", fHits($memory_throttle_count)); print "\n"; ### ARC Misc. ### my $deleted = $Kstat->{"kstat.zfs.misc.arcstats.deleted"}; my $evict_skip = $Kstat->{"kstat.zfs.misc.arcstats.evict_skip"}; my $mutex_miss = $Kstat->{"kstat.zfs.misc.arcstats.mutex_miss"}; my $recycle_miss = $Kstat->{"kstat.zfs.misc.arcstats.recycle_miss"}; print "ARC Misc:\n"; printf("\tDeleted:\t\t\t\t%s\n", fHits($deleted)); printf("\tRecycle Misses:\t\t\t\t%s\n", fHits($recycle_miss)); printf("\tMutex Misses:\t\t\t\t%s\n", fHits($mutex_miss)); printf("\tEvict Skips:\t\t\t\t%s\n", fHits($mutex_miss)); print "\n"; ### ARC Sizing ### my $arc_size = $Kstat->{"kstat.zfs.misc.arcstats.size"}; my $mru_size = $Kstat->{"kstat.zfs.misc.arcstats.p"}; my $target_max_size = $Kstat->{"kstat.zfs.misc.arcstats.c_max"}; my $target_min_size = $Kstat->{"kstat.zfs.misc.arcstats.c_min"}; my $target_size = $Kstat->{"kstat.zfs.misc.arcstats.c"}; my $target_size_ratio = ($target_max_size / $target_min_size); printf("ARC Size:\t\t\t\t%s\t%s\n", fPerc($arc_size, $target_max_size), fBytes($arc_size)); printf("\tTarget Size: (Adaptive)\t\t%s\t%s\n", fPerc($target_size, $target_max_size), fBytes($target_size)); printf("\tMin Size (Hard Limit):\t\t%s\t%s\n", fPerc($target_min_size, $target_max_size), fBytes($target_min_size)); printf("\tMax Size (High Water):\t\t%d:1\t%s\n", $target_size_ratio, fBytes($target_max_size)); print "\nARC Size Breakdown:\n"; if ($arc_size > $target_size) { my $mfu_size = ($arc_size - $mru_size); printf("\tRecently Used Cache Size:\t%s\t%s\n", fPerc($mru_size, $arc_size), fBytes($mru_size)); printf("\tFrequently Used Cache Size:\t%s\t%s\n", fPerc($mfu_size, $arc_size), fBytes($mfu_size)); } if ($arc_size < $target_size) { my $mfu_size = ($target_size - $mru_size); printf("\tRecently Used Cache Size:\t%s\t%s\n", fPerc($mru_size, $target_size), fBytes($mru_size)); printf("\tFrequently Used Cache Size:\t%s\t%s\n", fPerc($mfu_size, $target_size), fBytes($mfu_size)); } print "\n"; ### ARC Hash Breakdown ### my $hash_chain_max = $Kstat->{"kstat.zfs.misc.arcstats.hash_chain_max"}; my $hash_chains = $Kstat->{"kstat.zfs.misc.arcstats.hash_chains"}; my $hash_collisions = $Kstat->{"kstat.zfs.misc.arcstats.hash_collisions"}; my $hash_elements = $Kstat->{"kstat.zfs.misc.arcstats.hash_elements"}; my $hash_elements_max = $Kstat->{"kstat.zfs.misc.arcstats.hash_elements_max"}; print "ARC Hash Breakdown:\n"; printf("\tElements Max:\t\t\t\t%s\n", fHits($hash_elements_max)); printf("\tElements Current:\t\t%s\t%s\n", fPerc($hash_elements, $hash_elements_max), fHits($hash_elements)); printf("\tCollisions:\t\t\t\t%s\n", fHits($hash_collisions)); printf("\tChain Max:\t\t\t\t%s\n", fHits($hash_chain_max)); printf("\tChains:\t\t\t\t\t%s\n", fHits($hash_chains)); } sub _arc_efficiency { if (!$Kstat->{"vfs.zfs.version.spa"}) { return }; my $arc_hits = $Kstat->{"kstat.zfs.misc.arcstats.hits"}; my $arc_misses = $Kstat->{"kstat.zfs.misc.arcstats.misses"}; my $demand_data_hits = $Kstat->{"kstat.zfs.misc.arcstats.demand_data_hits"}; my $demand_data_misses = $Kstat->{"kstat.zfs.misc.arcstats.demand_data_misses"}; my $demand_metadata_hits = $Kstat->{"kstat.zfs.misc.arcstats.demand_metadata_hits"}; my $demand_metadata_misses = $Kstat->{"kstat.zfs.misc.arcstats.demand_metadata_misses"}; my $mfu_ghost_hits = $Kstat->{"kstat.zfs.misc.arcstats.mfu_ghost_hits"}; my $mfu_hits = $Kstat->{"kstat.zfs.misc.arcstats.mfu_hits"}; my $mru_ghost_hits = $Kstat->{"kstat.zfs.misc.arcstats.mru_ghost_hits"}; my $mru_hits = $Kstat->{"kstat.zfs.misc.arcstats.mru_hits"}; my $prefetch_data_hits = $Kstat->{"kstat.zfs.misc.arcstats.prefetch_data_hits"}; my $prefetch_data_misses = $Kstat->{"kstat.zfs.misc.arcstats.prefetch_data_misses"}; my $prefetch_metadata_hits = $Kstat->{"kstat.zfs.misc.arcstats.prefetch_metadata_hits"}; my $prefetch_metadata_misses = $Kstat->{"kstat.zfs.misc.arcstats.prefetch_metadata_misses"}; my $anon_hits = $arc_hits - ($mfu_hits + $mru_hits + $mfu_ghost_hits + $mru_ghost_hits); my $arc_accesses_total = ($arc_hits + $arc_misses); my $demand_data_total = ($demand_data_hits + $demand_data_misses); my $prefetch_data_total = ($prefetch_data_hits + $prefetch_data_misses); my $real_hits = ($mfu_hits + $mru_hits); printf("ARC Efficiency:\t\t\t\t\t%s\n", fHits($arc_accesses_total)); printf("\tCache Hit Ratio:\t\t%s\t%s\n", fPerc($arc_hits, $arc_accesses_total), fHits($arc_hits)); printf("\tCache Miss Ratio:\t\t%s\t%s\n", fPerc($arc_misses, $arc_accesses_total), fHits($arc_misses)); printf("\tActual Hit Ratio:\t\t%s\t%s\n", fPerc($real_hits, $arc_accesses_total), fHits($real_hits)); print "\n"; printf("\tData Demand Efficiency:\t\t%s\t%s\n", fPerc($demand_data_hits, $demand_data_total), fHits($demand_data_total)); if ($prefetch_data_total > 0){ printf("\tData Prefetch Efficiency:\t%s\t%s\n", fPerc($prefetch_data_hits, $prefetch_data_total), fHits($prefetch_data_total)); } print "\n"; print "\tCACHE HITS BY CACHE LIST:\n"; if ( $anon_hits > 0 ){ printf("\t Anonymously Used:\t\t%s\t%s\n", fPerc($anon_hits, $arc_hits), fHits($anon_hits)); } printf("\t Most Recently Used:\t\t%s\t%s\n", fPerc($mru_hits, $arc_hits), fHits($mru_hits)); printf("\t Most Frequently Used:\t\t%s\t%s\n", fPerc($mfu_hits, $arc_hits), fHits($mfu_hits)); printf("\t Most Recently Used Ghost:\t%s\t%s\n", fPerc($mru_ghost_hits, $arc_hits), fHits($mru_ghost_hits)); printf("\t Most Frequently Used Ghost:\t%s\t%s\n", fPerc($mfu_ghost_hits, $arc_hits), fHits($mfu_ghost_hits)); print "\n\tCACHE HITS BY DATA TYPE:\n"; printf("\t Demand Data:\t\t\t%s\t%s\n", fPerc($demand_data_hits, $arc_hits), fHits($demand_data_hits)); printf("\t Prefetch Data:\t\t%s\t%s\n", fPerc($prefetch_data_hits, $arc_hits), fHits($prefetch_data_hits)); printf("\t Demand Metadata:\t\t%s\t%s\n", fPerc($demand_metadata_hits, $arc_hits), fHits($demand_metadata_hits)); printf("\t Prefetch Metadata:\t\t%s\t%s\n", fPerc($prefetch_metadata_hits, $arc_hits), fHits($prefetch_metadata_hits)); print "\n\tCACHE MISSES BY DATA TYPE:\n"; printf("\t Demand Data:\t\t\t%s\t%s\n", fPerc($demand_data_misses, $arc_misses), fHits($demand_data_misses)); printf("\t Prefetch Data:\t\t%s\t%s\n", fPerc($prefetch_data_misses, $arc_misses), fHits($prefetch_data_misses)); printf("\t Demand Metadata:\t\t%s\t%s\n", fPerc($demand_metadata_misses, $arc_misses), fHits($demand_metadata_misses)); printf("\t Prefetch Metadata:\t\t%s\t%s\n", fPerc($prefetch_metadata_misses, $arc_misses), fHits($prefetch_metadata_misses)); } sub _l2arc_summary { if (!$Kstat->{"vfs.zfs.version.spa"}) { return }; my $l2_abort_lowmem = $Kstat->{"kstat.zfs.misc.arcstats.l2_abort_lowmem"}; my $l2_cksum_bad = $Kstat->{"kstat.zfs.misc.arcstats.l2_cksum_bad"}; my $l2_evict_lock_retry = $Kstat->{"kstat.zfs.misc.arcstats.l2_evict_lock_retry"}; my $l2_evict_reading = $Kstat->{"kstat.zfs.misc.arcstats.l2_evict_reading"}; my $l2_feeds = $Kstat->{"kstat.zfs.misc.arcstats.l2_feeds"}; my $l2_free_on_write = $Kstat->{"kstat.zfs.misc.arcstats.l2_free_on_write"}; my $l2_hdr_size = $Kstat->{"kstat.zfs.misc.arcstats.l2_hdr_size"}; my $l2_hits = $Kstat->{"kstat.zfs.misc.arcstats.l2_hits"}; my $l2_io_error = $Kstat->{"kstat.zfs.misc.arcstats.l2_io_error"}; my $l2_misses = $Kstat->{"kstat.zfs.misc.arcstats.l2_misses"}; my $l2_rw_clash = $Kstat->{"kstat.zfs.misc.arcstats.l2_rw_clash"}; my $l2_size = $Kstat->{"kstat.zfs.misc.arcstats.l2_size"}; my $l2_write_buffer_bytes_scanned = $Kstat->{"kstat.zfs.misc.arcstats.l2_write_buffer_bytes_scanned"}; my $l2_write_buffer_iter = $Kstat->{"kstat.zfs.misc.arcstats.l2_write_buffer_iter"}; my $l2_write_buffer_list_iter = $Kstat->{"kstat.zfs.misc.arcstats.l2_write_buffer_list_iter"}; my $l2_write_buffer_list_null_iter = $Kstat->{"kstat.zfs.misc.arcstats.l2_write_buffer_list_null_iter"}; my $l2_write_bytes = $Kstat->{"kstat.zfs.misc.arcstats.l2_write_bytes"}; my $l2_write_full = $Kstat->{"kstat.zfs.misc.arcstats.l2_write_full"}; my $l2_write_in_l2 = $Kstat->{"kstat.zfs.misc.arcstats.l2_write_in_l2"}; my $l2_write_io_in_progress = $Kstat->{"kstat.zfs.misc.arcstats.l2_write_io_in_progress"}; my $l2_write_not_cacheable = $Kstat->{"kstat.zfs.misc.arcstats.l2_write_not_cacheable"}; my $l2_write_passed_headroom = $Kstat->{"kstat.zfs.misc.arcstats.l2_write_passed_headroom"}; my $l2_write_pios = $Kstat->{"kstat.zfs.misc.arcstats.l2_write_pios"}; my $l2_write_spa_mismatch = $Kstat->{"kstat.zfs.misc.arcstats.l2_write_spa_mismatch"}; my $l2_write_trylock_fail = $Kstat->{"kstat.zfs.misc.arcstats.l2_write_trylock_fail"}; my $l2_writes_done = $Kstat->{"kstat.zfs.misc.arcstats.l2_writes_done"}; my $l2_writes_error = $Kstat->{"kstat.zfs.misc.arcstats.l2_writes_error"}; my $l2_writes_hdr_miss = $Kstat->{"kstat.zfs.misc.arcstats.l2_writes_hdr_miss"}; my $l2_writes_sent = $Kstat->{"kstat.zfs.misc.arcstats.l2_writes_sent"}; my $l2_access_total = ($l2_hits + $l2_misses); my $l2_health_count = ($l2_writes_error + $l2_cksum_bad + $l2_io_error); if ($l2_size > 0 && $l2_access_total > 0) { print "L2 ARC Summary: "; if ($l2_health_count > 0) { print "(DEGRADED)\n"; } else { print "(HEALTHY)\n"; } printf("\tPassed Headroom:\t\t\t%s\n", fHits($l2_write_passed_headroom)); printf("\tTried Lock Failures:\t\t\t%s\n", fHits($l2_write_trylock_fail)); printf("\tIO In Progress:\t\t\t\t%s\n", fHits($l2_write_io_in_progress)); printf("\tLow Memory Aborts:\t\t\t%s\n", fHits($l2_abort_lowmem)); printf("\tFree on Write:\t\t\t\t%s\n", fHits($l2_free_on_write)); printf("\tWrites While Full:\t\t\t%s\n", fHits($l2_write_full)); printf("\tR/W Clashes:\t\t\t\t%s\n", fHits($l2_rw_clash)); printf("\tBad Checksums:\t\t\t\t%s\n", fHits($l2_cksum_bad)); printf("\tIO Errors:\t\t\t\t%s\n", fHits($l2_io_error)); printf("\tSPA Mismatch:\t\t\t\t%s\n", fHits($l2_write_spa_mismatch)); print "\n"; printf("L2 ARC Size: (Adaptive)\t\t\t\t%s\n", fBytes($l2_size)); printf("\tHeader Size:\t\t\t%s\t%s\n", fPerc($l2_hdr_size, $l2_size), fBytes($l2_hdr_size)); print "\n"; if (($l2_evict_lock_retry + $l2_evict_reading) > 0) { print "L2 ARC Evicts:\n"; printf("\tLock Retries:\t\t\t\t%s\n", fHits($l2_evict_lock_retry)); printf("\tUpon Reading:\t\t\t\t%s\n", fHits($l2_evict_reading)); print "\n"; } printf("L2 ARC Breakdown:\t\t\t\t%s\n", fHits($l2_access_total)); printf("\tHit Ratio:\t\t\t%s\t%s\n", fPerc($l2_hits, $l2_access_total), fHits($l2_hits)); printf("\tMiss Ratio:\t\t\t%s\t%s\n", fPerc($l2_misses, $l2_access_total), fHits($l2_misses)); printf("\tFeeds:\t\t\t\t\t%s\n", fHits($l2_feeds)); print "\n"; print "L2 ARC Buffer:\n"; printf("\tBytes Scanned:\t\t\t\t%s\n", fBytes($l2_write_buffer_bytes_scanned)); printf("\tBuffer Iterations:\t\t\t%s\n", fHits($l2_write_buffer_iter)); printf("\tList Iterations:\t\t\t%s\n", fHits($l2_write_buffer_list_iter)); printf("\tNULL List Iterations:\t\t\t%s\n", fHits($l2_write_buffer_list_null_iter)); print "\n"; print "L2 ARC Writes:\n"; if ($l2_writes_done != $l2_writes_sent) { printf("\tWrites Sent: (%s)\t\t\t\t%s\n", "FAULTED", fHits($l2_writes_sent)); printf("\t Done Ratio:\t\t\t%s\t%s\n", fPerc($l2_writes_done, $l2_writes_sent), fHits($l2_writes_done)); printf("\t Error Ratio:\t\t\t%s\t%s\n", fPerc($l2_writes_error, $l2_writes_sent), fHits($l2_writes_error)); } else { printf("\tWrites Sent:\t\t\t%s\t%s\n", fPerc(100), fHits($l2_writes_sent)); } } } sub _dmu_summary { if (!$Kstat->{"vfs.zfs.version.spa"}) { return }; my $zfetch_bogus_streams = $Kstat->{"kstat.zfs.misc.zfetchstats.bogus_streams"}; my $zfetch_colinear_hits = $Kstat->{"kstat.zfs.misc.zfetchstats.colinear_hits"}; my $zfetch_colinear_misses = $Kstat->{"kstat.zfs.misc.zfetchstats.colinear_misses"}; my $zfetch_hits = $Kstat->{"kstat.zfs.misc.zfetchstats.hits"}; my $zfetch_misses = $Kstat->{"kstat.zfs.misc.zfetchstats.misses"}; my $zfetch_reclaim_failures = $Kstat->{"kstat.zfs.misc.zfetchstats.reclaim_failures"}; my $zfetch_reclaim_successes = $Kstat->{"kstat.zfs.misc.zfetchstats.reclaim_successes"}; my $zfetch_streams_noresets = $Kstat->{"kstat.zfs.misc.zfetchstats.streams_noresets"}; my $zfetch_streams_resets = $Kstat->{"kstat.zfs.misc.zfetchstats.streams_resets"}; my $zfetch_stride_hits = $Kstat->{"kstat.zfs.misc.zfetchstats.stride_hits"}; my $zfetch_stride_misses = $Kstat->{"kstat.zfs.misc.zfetchstats.stride_misses"}; my $zfetch_access_total = ($zfetch_hits + $zfetch_misses); my $zfetch_colinear_total = ($zfetch_colinear_hits + $zfetch_colinear_misses); my $zfetch_health_count = ($zfetch_bogus_streams); my $zfetch_reclaim_total = ($zfetch_reclaim_successes + $zfetch_reclaim_failures); my $zfetch_streams_total = ($zfetch_streams_resets + $zfetch_streams_noresets + $zfetch_bogus_streams); my $zfetch_stride_total = ($zfetch_stride_hits + $zfetch_stride_misses); if ($zfetch_access_total > 0) { print "File-Level Prefetch: "; if ($zfetch_health_count > 0) { print "(DEGRADED)\n\n"; } else { print "(HEALTHY)\n\n"; } printf("DMU Efficiency:\t\t\t\t\t%s\n", fHits($zfetch_access_total)); printf("\tHit Ratio:\t\t\t%s\t%s\n", fPerc($zfetch_hits, $zfetch_access_total), fHits($zfetch_hits)); printf("\tMiss Ratio:\t\t\t%s\t%s\n", fPerc($zfetch_misses, $zfetch_access_total), fHits($zfetch_misses)); print "\n"; printf("\tColinear:\t\t\t\t%s\n", fHits($zfetch_colinear_total)); printf("\t Hit Ratio:\t\t\t%s\t%s\n", fPerc($zfetch_colinear_hits, $zfetch_colinear_total), fHits($zfetch_colinear_hits)); printf("\t Miss Ratio:\t\t\t%s\t%s\n", fPerc($zfetch_colinear_misses, $zfetch_colinear_total), fHits($zfetch_colinear_misses)); print "\n"; printf("\tStride:\t\t\t\t\t%s\n", fHits($zfetch_stride_total)); printf("\t Hit Ratio:\t\t\t%s\t%s\n", fPerc($zfetch_stride_hits, $zfetch_stride_total), fHits($zfetch_stride_hits)); printf("\t Miss Ratio:\t\t\t%s\t%s\n", fPerc($zfetch_stride_misses, $zfetch_stride_total), fHits($zfetch_stride_misses)); print "\n"; if ($zfetch_health_count > 0) { printf("DMU Misc: (%s)\n", "FAULTED"); } else { print "DMU Misc:\n"; } printf("\tReclaim:\t\t\t\t%s\n", fHits($zfetch_reclaim_total)); printf("\t Successes:\t\t\t%s\t%s\n", fPerc($zfetch_reclaim_successes, $zfetch_reclaim_total), fHits($zfetch_reclaim_successes)); printf("\t Failures:\t\t\t%s\t%s\n", fPerc($zfetch_reclaim_failures, $zfetch_reclaim_total), fHits($zfetch_reclaim_failures)); printf("\n\tStreams:\t\t\t\t%s\n", fHits($zfetch_streams_total)); printf("\t +Resets:\t\t\t%s\t%s\n", fPerc($zfetch_streams_resets, $zfetch_streams_total), fHits($zfetch_streams_resets)); printf("\t -Resets:\t\t\t%s\t%s\n", fPerc($zfetch_streams_noresets, $zfetch_streams_total), fHits($zfetch_streams_noresets)); printf("\t Bogus:\t\t\t\t%s\n", fHits($zfetch_bogus_streams)); } } sub _vdev_summary { if (!$Kstat->{"vfs.zfs.version.spa"}) { return }; my $vdev_cache_delegations = $Kstat->{"kstat.zfs.misc.vdev_cache_stats.delegations"}; my $vdev_cache_misses = $Kstat->{"kstat.zfs.misc.vdev_cache_stats.misses"}; my $vdev_cache_hits = $Kstat->{"kstat.zfs.misc.vdev_cache_stats.hits"}; my $vdev_cache_total = ($vdev_cache_misses + $vdev_cache_hits + $vdev_cache_delegations); if ($vdev_cache_total > 0) { printf("VDEV Cache Summary:\t\t\t\t%s\n", fHits($vdev_cache_total)); printf("\tHit Ratio:\t\t\t%s\t%s\n", fPerc($vdev_cache_hits, $vdev_cache_total), fHits($vdev_cache_hits)); printf("\tMiss Ratio:\t\t\t%s\t%s\n", fPerc($vdev_cache_misses, $vdev_cache_total), fHits($vdev_cache_misses)); printf("\tDelegations:\t\t\t%s\t%s\n", fPerc($vdev_cache_delegations, $vdev_cache_total), fHits($vdev_cache_delegations)); } } sub _sysctl_summary { return unless $usetunable; my @Tunable = qw( kern.maxusers vm.kmem_size vm.kmem_size_scale vm.kmem_size_min vm.kmem_size_max vfs.zfs ); my %sysctl_descriptions; if ($show_sysctl_descriptions) { foreach my $tunable (`/sbin/sysctl -qde @Tunable`){ chomp $tunable; my ($name, $description) = split(/=/, $tunable, 2); $description = "Description unavailable" unless $description; $sysctl_descriptions{$name}=$description; } } my @tunable = `/sbin/sysctl -qe @Tunable`; print "ZFS Tunable (sysctl):\n"; foreach my $tunable (@tunable){ chomp($tunable); my ($name, $value) = split(/=/, $tunable, 2); my $format = $alternate_sysctl_layout ? "\t%s=%d\n" : "\t%-40s%d\n"; if ($show_sysctl_descriptions != 0){ printf("\t\# %s\n", $sysctl_descriptions{$name}); } printf($format, $name, $value); } } my @unSub = qw( _system_memory _arc_summary _arc_efficiency _l2arc_summary _dmu_summary _vdev_summary _sysctl_summary ); sub _call_all { my $page = 1; foreach my $unsub (@unSub) { eval $unsub && printf("\t\t\t\t\t\t\t\tPage: %2d", $page) && div2; ++$page; } printf("\t\t\t\t\t\t\t\tPage: %2d", --$page); div2; } my %opt; getopts("adp:", \%opt); if (%opt) { $alternate_sysctl_layout = 1 if $opt{a}; $show_sysctl_descriptions = 1 if $opt{d}; switch($opt{p}) { case 1 { eval $unSub[0]; div2; } case 2 { eval $unSub[1]; div2; } case 3 { eval $unSub[2]; div2; } case 4 { eval $unSub[3]; div2; } case 5 { eval $unSub[4]; div2; } case 6 { eval $unSub[5]; div2; } case 7 { eval $unSub[6]; div2; } else { _call_all; } } } else { _call_all; } __END__ |
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
| #!/usr/perl5/bin/perl -w # # Print out ZFS ARC Statistics exported via kstat(1) # For a definition of fields, or usage, use arctstat.pl -v # # This script is a fork of the original arcstat.pl (0.1) by # Neelakanth Nadgir, originally published on his Sun blog on # 09/18/2007 # http://blogs.sun.com/realneel/entry/zfs_arc_statistics # # This version aims to improve upon the original by adding features # and fixing bugs as needed. This version is maintained by # Mike Harsch and is hosted in a public open source repository: # http://github.com/mharsch/arcstat # # Comments, Questions, or Suggestions are always welcome. # Contact the maintainer at ( mike at harschsystems dot com ) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License, Version 1.0 only # (the "License"). You may not use this file except in compliance # with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Fields have a fixed width. Every interval, we fill the "v" # hash with its corresponding value (v[field]=value) using calculate(). # @hdr is the array of fields that needs to be printed, so we # just iterate over this array and print the values using our pretty printer. use strict; use POSIX qw(strftime); use Sun::Solaris::Kstat; use Getopt::Long; use IO::Handle; my %cols = (# HDR => [Size, Scale, Description] "time" =>[8, -1, "Time"], "hits" =>[4, 1000, "ARC reads per second"], "miss" =>[4, 1000, "ARC misses per second"], "read" =>[4, 1000, "Total ARC accesses per second"], "hit%" =>[4, 100, "ARC Hit percentage"], "miss%" =>[5, 100, "ARC miss percentage"], "dhit" =>[4, 1000, "Demand Data hits per second"], "dmis" =>[4, 1000, "Demand Data misses per second"], "dh%" =>[3, 100, "Demand Data hit percentage"], "dm%" =>[3, 100, "Demand Data miss percentage"], "phit" =>[4, 1000, "Prefetch hits per second"], "pmis" =>[4, 1000, "Prefetch misses per second"], "ph%" =>[3, 100, "Prefetch hits percentage"], "pm%" =>[3, 100, "Prefetch miss percentage"], "mhit" =>[4, 1000, "Metadata hits per second"], "mmis" =>[4, 1000, "Metadata misses per second"], "mread" =>[4, 1000, "Metadata accesses per second"], "mh%" =>[3, 100, "Metadata hit percentage"], "mm%" =>[3, 100, "Metadata miss percentage"], "arcsz" =>[5, 1024, "ARC Size"], "c" =>[4, 1024, "ARC Target Size"], "mfu" =>[4, 1000, "MFU List hits per second"], "mru" =>[4, 1000, "MRU List hits per second"], "mfug" =>[4, 1000, "MFU Ghost List hits per second"], "mrug" =>[4, 1000, "MRU Ghost List hits per second"], "eskip" =>[5, 1000, "evict_skip per second"], "mtxmis" =>[6, 1000, "mutex_miss per second"], "rmis" =>[4, 1000, "recycle_miss per second"], "dread" =>[5, 1000, "Demand data accesses per second"], "pread" =>[5, 1000, "Prefetch accesses per second"], "l2hits" =>[6, 1000, "L2ARC hits per second"], "l2miss" =>[6, 1000, "L2ARC misses per second"], "l2read" =>[6, 1000, "Total L2ARC accesses per second"], "l2hit%" =>[6, 100, "L2ARC access hit percentage"], "l2miss%" =>[7, 100, "L2ARC access miss percentage"], "l2size" =>[6, 1024, "Size of the L2ARC"], "l2bytes" =>[7, 1024, "bytes read per second from the L2ARC"], ); my %v=(); my @hdr = qw(time read miss miss% dmis dm% pmis pm% mmis mm% arcsz c); my @xhdr = qw(time mfu mru mfug mrug eskip mtxmis rmis dread pread read); my $int = 1; # Default interval is 1 second my $count = 1; # Default count is 1 my $hdr_intr = 20; # Print header every 20 lines of output my $opfile = ""; my $sep = " "; # Default separator is 2 spaces my $raw_output; my $version = "0.4"; my $l2exist = 0; my $cmd = "Usage: arcstat [-hvxr] [-f fields] [-o file] [-s string] " . "[interval [count]]\n"; my %cur; my %d; my $out; my $kstat = Sun::Solaris::Kstat->new(); STDOUT->autoflush; sub detailed_usage { print STDERR "$cmd\n"; print STDERR "Field definitions are as follows:\n"; foreach my $hdr (keys %cols) { print STDERR sprintf("%11s : %s\n", $hdr, $cols{$hdr}[2]); } exit(1); } sub usage { print STDERR "$cmd\n"; print STDERR "\t -h : Print this help message\n"; print STDERR "\t -v : List all possible field headers " . "and definitions\n"; print STDERR "\t -x : Print extended stats\n"; print STDERR "\t -r : Raw output mode (values not scaled)\n"; print STDERR "\t -f : Specify specific fields to print (see -v)\n"; print STDERR "\t -o : Redirect output to the specified file\n"; print STDERR "\t -s : Override default field separator with custom " . "character or string\n"; print STDERR "\nExamples:\n"; print STDERR "\tarcstat -o /tmp/a.log 2 10\n"; print STDERR "\tarcstat -s \",\" -o /tmp/a.log 2 10\n"; print STDERR "\tarcstat -v\n"; print STDERR "\tarcstat -f time,hit%,dh%,ph%,mh% 1\n"; exit(1); } sub init { my $desired_cols; my $xflag = ''; my $hflag = ''; my $vflag; my $res = GetOptions('x' => \$xflag, 'o=s' => \$opfile, 'help|h|?' => \$hflag, 'v' => \$vflag, 's=s' => \$sep, 'f=s' => \$desired_cols, 'r' => \$raw_output); $int = $ARGV[0] || $int; $count = $ARGV[1] || $count; if (defined $ARGV[0] && defined $ARGV[1]) { $int = $ARGV[0]; $count = $ARGV[1]; } elsif (defined $ARGV[0]) { $int = $ARGV[0]; $count = 0; } usage() if !$res or $hflag or ($xflag and $desired_cols); detailed_usage() if $vflag; @hdr = @xhdr if $xflag; #reset headers to xhdr # check if L2ARC exists snap_stats(); if (defined $cur{"l2_size"}) { $l2exist = 1; } if ($desired_cols) { @hdr = split(/[ ,]+/, $desired_cols); # Now check if they are valid fields my @invalid = (); my @incompat = (); foreach my $ele (@hdr) { if (not exists($cols{$ele})) { push(@invalid, $ele); } elsif (($l2exist == 0) && ($ele =~ /^l2/)) { printf("No L2ARC here\n", $ele); push(@incompat, $ele); } } if (scalar @invalid > 0) { print STDERR "Invalid column definition! -- " . "@invalid\n\n"; usage(); } if (scalar @incompat > 0) { print STDERR "Incompatible field specified -- " . "@incompat\n\n"; usage(); } } if ($opfile) { open($out, ">$opfile") ||die "Cannot open $opfile for writing"; $out->autoflush; select $out; } } # Capture kstat statistics. We maintain 3 hashes, prev, cur, and # d (delta). As their names imply they maintain the previous, current, # and delta (cur - prev) statistics. sub snap_stats { my %prev = %cur; if ($kstat->update()) { printf("<State Changed>\n"); } my $hashref_cur = $kstat->{"zfs"}{0}{"arcstats"}; %cur = %$hashref_cur; foreach my $key (keys %cur) { next if $key =~ /class/; if (defined $prev{$key}) { $d{$key} = $cur{$key} - $prev{$key}; } else { $d{$key} = $cur{$key}; } } } # Pretty print num. Arguments are width, scale, and num sub prettynum { my @suffix = (' ', 'K', 'M', 'G', 'T'); my $num = $_[2] || 0; my $scale = $_[1]; my $sz = $_[0]; my $index = 0; my $save = 0; if ($scale == -1) { #special case for date field return sprintf("%s", $num); } elsif (($num > 0) && ($num < 1)) { #rounding error. return 0 $num = 0; } while ($num > $scale and $index < 5) { $save = $num; $num = $num/$scale; $index++; } return sprintf("%*d", $sz, $num) if ($index == 0); if (($save / $scale) < 10) { return sprintf("%*.1f%s", $sz - 1, $num,$suffix[$index]); } else { return sprintf("%*d%s", $sz - 1, $num,$suffix[$index]); } } sub print_values { foreach my $col (@hdr) { if (not $raw_output) { printf("%s%s", prettynum($cols{$col}[0], $cols{$col}[1], $v{$col}), $sep); } else { printf("%d%s", $v{$col} || 0, $sep); } } printf("\n"); } sub print_header { if (not $raw_output) { foreach my $col (@hdr) { printf("%*s%s", $cols{$col}[0], $col, $sep); } } else { # Don't try to align headers in raw mode foreach my $col (@hdr) { printf("%s%s", $col, $sep); } } printf("\n"); } sub calculate { %v = (); if ($raw_output) { $v{"time"} = strftime("%s", localtime); } else { $v{"time"} = strftime("%H:%M:%S", localtime); } $v{"hits"} = $d{"hits"}/$int; $v{"miss"} = $d{"misses"}/$int; $v{"read"} = $v{"hits"} + $v{"miss"}; $v{"hit%"} = 100 * ($v{"hits"} / $v{"read"}) if $v{"read"} > 0; $v{"miss%"} = 100 - $v{"hit%"} if $v{"read"} > 0; $v{"dhit"} = ($d{"demand_data_hits"} + $d{"demand_metadata_hits"})/$int; $v{"dmis"} = ($d{"demand_data_misses"} + $d{"demand_metadata_misses"})/$int; $v{"dread"} = $v{"dhit"} + $v{"dmis"}; $v{"dh%"} = 100 * ($v{"dhit"} / $v{"dread"}) if $v{"dread"} > 0; $v{"dm%"} = 100 - $v{"dh%"} if $v{"dread"} > 0; $v{"phit"} = ($d{"prefetch_data_hits"} + $d{"prefetch_metadata_hits"})/$int; $v{"pmis"} = ($d{"prefetch_data_misses"} + $d{"prefetch_metadata_misses"})/$int; $v{"pread"} = $v{"phit"} + $v{"pmis"}; $v{"ph%"} = 100 * ($v{"phit"} / $v{"pread"}) if $v{"pread"} > 0; $v{"pm%"} = 100 - $v{"ph%"} if $v{"pread"} > 0; $v{"mhit"} = ($d{"prefetch_metadata_hits"} + $d{"demand_metadata_hits"})/$int; $v{"mmis"} = ($d{"prefetch_metadata_misses"} + $d{"demand_metadata_misses"})/$int; $v{"mread"} = $v{"mhit"} + $v{"mmis"}; $v{"mh%"} = 100 * ($v{"mhit"} / $v{"mread"}) if $v{"mread"} > 0; $v{"mm%"} = 100 - $v{"mh%"} if $v{"mread"} > 0; $v{"arcsz"} = $cur{"size"}; $v{"c"} = $cur{"c"}; $v{"mfu"} = $d{"mfu_hits"}/$int; $v{"mru"} = $d{"mru_hits"}/$int; $v{"mrug"} = $d{"mru_ghost_hits"}/$int; $v{"mfug"} = $d{"mfu_ghost_hits"}/$int; $v{"eskip"} = $d{"evict_skip"}/$int; $v{"rmiss"} = $d{"recycle_miss"}/$int; $v{"mtxmis"} = $d{"mutex_miss"}/$int; if ($l2exist) { $v{"l2hits"} = $d{"l2_hits"}/$int; $v{"l2miss"} = $d{"l2_misses"}/$int; $v{"l2read"} = $v{"l2hits"} + $v{"l2miss"}; $v{"l2hit%"} = 100 * ($v{"l2hits"} / $v{"l2read"}) if $v{"l2read"} > 0; $v{"l2miss%"} = 100 - $v{"l2hit%"} if $v{"l2read"} > 0; $v{"l2size"} = $cur{"l2_size"}; $v{"l2bytes"} = $d{"l2_read_bytes"}/$int; } } sub main { my $i = 0; my $count_flag = 0; init(); if ($count > 0) { $count_flag = 1; } while (1) { print_header() if ($i == 0); snap_stats(); calculate(); print_values(); last if ($count_flag == 1 && $count-- <= 1); $i = (($i == $hdr_intr) && (not $raw_output)) ? 0 : $i+1; sleep($int); } close($out) if defined $out; } &main; |
Maar ik krijg volgende fouten bij het eerste script:
[root@zfsguru /home/ssh]# ./arc_summary.pl Can't locate Switch.pm in @INC (@INC contains: /usr/local/lib/perl5/5.14.2/BSDPAN /usr/local/lib/perl5/site_perl/5.14.2/mach /usr/local/lib/perl5/site_perl/5.14.2 /usr/local/lib/perl5/5.14.2/mach /usr/local/lib/perl5/5.14.2 .) at ./arc_summary.pl line 47. BEGIN failed--compilation aborted at ./arc_summary.pl line 47.
en volgende fouten bij het tweede:
[root@zfsguru /home/ssh]# ./arcstat.pl su: ./arcstat.pl: /usr/perl5/bin/perl: bad interpreter: No such file or directory
De 2e foutmelding is simpel op te lossen: kopieer de eerste regel van het eerste script over de 1e regel van het 2e script heen...HyperBart schreef op donderdag 17 januari 2013 @ 13:16:
Ik had graag (ter experiment) volgende scripts eens de output van willen zien:
...
Maar ik krijg volgende fouten bij het eerste script:
[root@zfsguru /home/ssh]# ./arc_summary.pl Can't locate Switch.pm in @INC (@INC contains: /usr/local/lib/perl5/5.14.2/BSDPAN /usr/local/lib/perl5/site_perl/5.14.2/mach /usr/local/lib/perl5/site_perl/5.14.2 /usr/local/lib/perl5/5.14.2/mach /usr/local/lib/perl5/5.14.2 .) at ./arc_summary.pl line 47. BEGIN failed--compilation aborted at ./arc_summary.pl line 47.
en volgende fouten bij het tweede:
[root@zfsguru /home/ssh]# ./arcstat.pl su: ./arcstat.pl: /usr/perl5/bin/perl: bad interpreter: No such file or directory
De 1e foutmelding is wat lastiger:
Switch is voor zover ik kan zien deprecated... en vervangen door given/when.
Het is echter nog te installeren via CPAN waarschijnlijk door iets als
cpan -i Switch
op de commandline uit te voeren
[ Voor 97% gewijzigd door servies op 17-01-2013 13:48 ]
find /usr/ports/ | grep zfs | grep stats, dan vind je hem wel.
Even niets...
http://constantin.glez.de.../zfs-dedupe-or-not-dedupe
Hij is al eens eerder genoemd maar ik denk niet dat veel mensen op deze link hebben geklikt en als je met zfs bezig gaat denk ik dat er toch wel wat mensen geld kunnen besparen hiermee, als ze bijvoorbeeld de ruimte voor backups gaan gebruiken, of foto archief waarin je natuurlijk je origineel en aangepaste foto's wil bewaren.
Let wel op, gebruik huidige prijzen en niet de enterprise prijzen die daar worden gebruikt. En natuurlijk moet je het voor je eigen dataset uitrekenen.
post eerder in dit topic waarin deze link is vermeld en zowiezo een goede post.
wjn in "Het grote ZFS topic"
Ik heb mijn oude ZFSGuru pool geimporteerd, maar zonder het l2arc device, dat is in deze machine toevallig de bootssd geworden, dus die kan ik ook niet meer terugplaatsen. Wel heb ik nog lege ruimte op de ssd om dit te gaan gebruiken voor l2arc.
Maar hoe krijg ik nou de oude l2arc ssd uit de pool?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| [root@j181180 by-id]# zpool status data
pool: data
state: ONLINE
status: One or more devices has experienced an unrecoverable error. An
attempt was made to correct the error. Applications are unaffected.
action: Determine if the device needs to be replaced, and clear the errors
using 'zpool clear' or replace the device with 'zpool replace'.
see: http://zfsonlinux.org/msg/ZFS-8000-9P
scan: resilvered 60K in 0h0m with 0 errors on Thu Jan 17 19:59:19 2013
config:
NAME STATE READ WRITE CKSUM
data ONLINE 0 0 0
raidz2-0 ONLINE 0 0 0
ata-WDC_WD20EARX-00PASB0_WD-WCAZAF638030 ONLINE 0 0 0
ata-WDC_WD20EARX-00MMMB0_WD-WCAWZ2666090 ONLINE 0 0 0
ata-WDC_WD20EARX-22PASB0_WD-WCAZAA154961 ONLINE 0 0 0
ata-WDC_WD20EARX-00PASB0_WD-WCAZAF637757 ONLINE 0 0 2
cache
cache UNAVAIL 0 0 0 |
Ik kan niet een zpool remove of zpool offline doen, omdat de device naam er niet bij staat.
Jan 15 17:17:03 freenas sshd[6767]: Invalid user staff from 200.29.132.82
Jan 15 17:17:03 freenas sshd[6767]: Failed password for invalid user staff from 200.29.132.82 port 49468 ssh2
Jan 15 17:17:07 freenas sshd[6773]: Invalid user sales from 200.29.132.82
Jan 15 17:17:07 freenas sshd[6773]: Failed password for invalid user sales from 200.29.132.82 port 60030 ssh2
Jan 15 17:17:10 freenas sshd[6775]: Invalid user recruit from 200.29.132.82
Jan 15 17:17:10 freenas sshd[6775]: Failed password for invalid user recruit from 200.29.132.82 port 43986 ssh2
Jan 15 17:17:13 freenas sshd[6777]: Invalid user alias from 200.29.132.82
Jan 15 17:17:13 freenas sshd[6777]: Failed password for invalid user alias from 200.29.132.82 port 55017 ssh2
Jan 15 17:17:19 freenas sshd[6779]: Invalid user office from 200.29.132.82
Jan 15 17:17:19 freenas sshd[6779]: Failed password for invalid user office from 200.29.132.82 port 37222 ssh2
Jan 15 17:17:25 freenas sshd[6781]: Invalid user samba from 200.29.132.82
Jan 15 17:17:25 freenas sshd[6781]: Failed password for invalid user samba from 200.29.132.82 port 60867 ssh2
Jan 15 17:17:29 freenas sshd[6783]: Invalid user tomcat from 200.29.132.82
Jan 15 17:17:29 freenas sshd[6783]: Failed password for invalid user tomcat from 200.29.132.82 port 54881 ssh2
Jan 15 17:17:32 freenas sshd[6785]: Invalid user webadmin from 200.29.132.82
Jan 15 17:17:32 freenas sshd[6785]: Failed password for invalid user webadmin from 200.29.132.82 port 38671 ssh2
Jan 15 17:17:35 freenas sshd[6787]: Invalid user spam from 200.29.132.82
Jan 15 17:17:35 freenas sshd[6787]: Failed password for invalid user spam from 200.29.132.82 port 50646 ssh2
Jan 15 17:17:42 freenas sshd[6789]: Invalid user virus from 200.29.132.82
Jan 15 17:17:42 freenas sshd[6789]: Failed password for invalid user virus from 200.29.132.82 port 34787 ssh2
Jan 15 17:17:46 freenas sshd[6791]: Invalid user cyrus from 200.29.132.82
Jan 15 17:17:46 freenas sshd[6791]: Failed password for invalid user cyrus from 200.29.132.82 port 35993 ssh2
Jan 15 17:17:49 freenas sshd[6793]: Invalid user oracle from 200.29.132.82
Jan 15 17:17:49 freenas sshd[6793]: Failed password for invalid user oracle from 200.29.132.82 port 46866 ssh2
Jan 15 17:17:54 freenas sshd[6795]: Invalid user michael from 200.29.132.82
Jan 15 17:17:54 freenas sshd[6795]: Failed password for invalid user michael from 200.29.132.82 port 57309 ssh2
Jan 15 17:17:57 freenas sshd[6797]: Failed password for ftp from 200.29.132.82 port 51003 ssh2
Jan 15 17:18:01 freenas sshd[6799]: Invalid user test from 200.29.132.82
Jan 15 17:18:01 freenas sshd[6799]: Failed password for invalid user test from 200.29.132.82 port 34529 ssh2
Jan 15 17:18:05 freenas sshd[6803]: Invalid user webmaster from 200.29.132.82
Jan 15 17:18:05 freenas sshd[6803]: Failed password for invalid user webmaster from 200.29.132.82 port 50396 ssh2
Jan 15 17:18:08 freenas sshd[6809]: Invalid user postmaster from 200.29.132.82
Jan 15 17:18:08 freenas sshd[6809]: Failed password for invalid user postmaster from 200.29.132.82 port 36421 ssh2
Jan 15 17:18:14 freenas sshd[6811]: Invalid user postfix from 200.29.132.82
Jan 15 17:18:14 freenas sshd[6811]: Failed password for invalid user postfix from 200.29.132.82 port 48902 ssh2
Jan 15 17:18:20 freenas sshd[6813]: Invalid user postgres from 200.29.132.82
Jan 15 17:18:20 freenas sshd[6813]: Failed password for invalid user postgres from 200.29.132.82 port 43476 ssh2
Jan 15 17:18:23 freenas sshd[6815]: Invalid user paul from 200.29.132.82
Jan 15 17:18:23 freenas sshd[6815]: Failed password for invalid user paul from 200.29.132.82 port 38228 ssh2
Jan 15 17:18:28 freenas sshd[6817]: Failed password for root from 200.29.132.82 port 50884 ssh2
Jan 15 17:18:31 freenas sshd[6820]: Invalid user staff from 200.29.132.82
Jan 15 17:18:31 freenas sshd[6820]: Failed password for invalid user staff from 200.29.132.82 port 39490 ssh2
Jan 15 17:18:32 freenas sshd[6821]: Invalid user guest from 200.29.132.82
Jan 15 17:18:32 freenas sshd[6821]: Failed password for invalid user guest from 200.29.132.82 port 40383 ssh2
Jan 15 17:18:35 freenas sshd[6824]: Invalid user sales from 200.29.132.82
Jan 15 17:18:35 freenas sshd[6824]: Failed password for invalid user sales from 200.29.132.82 port 51077 ssh2
Jan 15 17:18:36 freenas sshd[6826]: Invalid user admin from 200.29.132.82
Jan 15 17:18:36 freenas sshd[6826]: Failed password for invalid user admin from 200.29.132.82 port 57284 ssh2
Jan 15 17:18:38 freenas sshd[6829]: Invalid user recruit from 200.29.132.82
Jan 15 17:18:38 freenas sshd[6829]: Failed password for invalid user recruit from 200.29.132.82 port 39335 ssh2
Jan 15 17:18:40 freenas sshd[6831]: Invalid user linux from 200.29.132.82
Jan 15 17:18:40 freenas sshd[6831]: Failed password for invalid user linux from 200.29.132.82 port 44120 ssh2
Jan 15 17:18:41 freenas sshd[6833]: Invalid user alias from 200.29.132.82
Jan 15 17:18:41 freenas sshd[6833]: Failed password for invalid user alias from 200.29.132.82 port 52024 ssh2
Jan 15 17:18:43 freenas sshd[6835]: Invalid user user from 200.29.132.82
Jan 15 17:18:43 freenas sshd[6835]: Failed password for invalid user user from 200.29.132.82 port 58626 ssh2
Jan 15 17:18:44 freenas sshd[6837]: Invalid user office from 200.29.132.82
Jan 15 17:18:44 freenas sshd[6837]: Failed password for invalid user office from 200.29.132.82 port 34177 ssh2
Jan 15 17:18:46 freenas sshd[6839]: Invalid user david from 200.29.132.82
Jan 15 17:18:46 freenas sshd[6839]: Failed password for invalid user david from 200.29.132.82 port 43282 ssh2
Jan 15 17:18:46 freenas sshd[6840]: Invalid user staff from 200.29.132.82
Jan 15 17:18:46 freenas sshd[6840]: Failed password for invalid user staff from 200.29.132.82 port 43358 ssh2
Zelfs die port heb ik maar een tijdje gesloten. Wat is hier aan de hand? brute force attack om mijn server over te nemen? Tis maar een home server.
Edit en nee, ik ken niemand uit Chili.
[ Voor 74% gewijzigd door Trunksmd op 17-01-2013 21:28 ]
Waarschijnlijk gewoon een geautomatiseerde scan. Wat je kan doen is in /etc/ssh/sshd_config de poort aanpassen en het volgende toevoegen:Trunksmd schreef op donderdag 17 januari 2013 @ 21:25:
Een klein stukje van mijn security log van de afgelopen dagen. Alleen de ssh poort staat naar buiten open:
...
Zelfs die port heb ik maar een tijdje gesloten. Wat is hier aan de hand? brute force attack om mijn server over te nemen? Tis maar een home server.
Edit en nee, ik ken niemand uit Chili.
AllowUsers trunksmd
Daarnaast kan je ook nog /etc/security/access.conf aanpassen, iptables script schrijven (firewall) en denyhosts of fail2ban installeren.
Edit: oh, ik zie dat het freenas is, dan moet je pf of ipfw gebruiken i.p.v. iptables
[ Voor 5% gewijzigd door onox op 17-01-2013 21:51 ]
Lekker fail2ban installeren, dan is het over het algemeen snel afgelopen
Gewoon een heel grote verzameling snoertjes
In de TS lees ik dat dit enkel voor tragere writes zorgt, klopt dit?
Met name een indicatie van 4 WDC Red 3TB in RAID-Z wat betreft sequential read/write zou ik erg interessant vinden
Nee, dat is de onjuiste syntax. Probleem is volgens mij dat de device naam niet bekend is.Xudonax schreef op donderdag 17 januari 2013 @ 21:00:
zpool data remove cache heeft er ook geen zin in?
[ Voor 12% gewijzigd door B2 op 17-01-2013 23:45 ]
Verwijderd
Je kunt proberen deze te achter halen door de vdev labels te lezen of spa_t van die pool te bekijken (eveneens met zdb).B2 schreef op donderdag 17 januari 2013 @ 23:43:
[...]
Nee, dat is de onjuiste syntax. Probleem is volgens mij dat de device naam niet bekend is.
zdb -C <pool> zou je hiermee verder kunnen helpen.
Ik kom in een grafisch scherm met het logo en de press any key vraag.
Er hangt een usb keybord en muis aan het systeem, maar er gebeurd een hele tijd niets, en dan kom ik terug in text mode met een per seconde oplopende timeout melding.
Het is een xeon e3-1265L v2 processor dus intel video via de cpu.
Op de zfs guru news pagina lees ik dat er een versie moet gaan komen met intel KMS support, is dit mijn probleem ?
De foutmelding na dat het grafische scherm timeout heeft:
(Probe258:mps1:0:3:0): INQUIRY. CDB: 12 0 0 0 24 0 lenght 36 SMID <oplopend nummer> terminated ioc 804b scsi 0 state c xfer 0
Dat <oplopende nummer> start op 1 en als de regel refresehd naar 2 etc. Interval ongeveer 1 sec.
[ Voor 23% gewijzigd door jacovn op 18-01-2013 17:37 . Reden: Error beschrijving toegevoegd ]
8x330 NO12.5°, 8x330 ZW12.5°, 8x350 ZW60°, 8x325 NO10°, SE8K, P500. 6x410 ZW10° Enphase
Ik crosspost een stukje van deze post vanuit het DIY NAS topic. Sorry hiervoor, ik realiseerde me achteraf dat deze vraag hier veel beter past.
Ik ben aan het nadenken om mijn storage op een slimme manier opnieuw op te zetten. Ik heb daarvoor de volgende upgradeset in mijn hoofd. De doelstelling is om te virtualiseren. Helaas wordt BSD niet ondersteund door Hyper-V, dus als ik ZFS wil, dan moet ik ESX gebruiken.
| # | Product | Prijs | Subtotaal |
| 1 | Intel Core i5 3330 Boxed | € 158,40 | € 158,40 |
| 1 | Supermicro X9SCM-F | € 176,70 | € 176,70 |
| 1 | Kingston KVR1066D3Q8R7SK2/16G | € 108,90 | € 108,90 |
| 1 | IBM ServeRAID M1015 SAS/SATA Controller for System x | € 118,58 | € 118,58 |
| 1 | Oude Intel X25-M 160GB | € 0 | € 0 |
| Bekijk collectie Importeer producten | Totaal | € 562,58 | |
Met de huidige setup heb ik zo nu en dan weleens last van een bestand dat corrupt is geraakt. Het zou een plus zijn als dit te ondervangen is met ZFS. Ik ben helaas niet in de mogelijkheid om een tweede dedicated systeem hiervoor te plaatsen, en aan de andere kant zit ik voor o.a. Active Directory vast aan Windows.
Zijn er hier mensen die op een enkel systeem ZFS(guru) en Windows virtualiseren tegelijk? Wat kan ik qua performance verwachten, als ik de datastore via iSCSI aan windows wil aanbieden? Is dit een reele optie, of moet ik dit uit mijn hoofd zetten?
Lenovo W520 - i7 2720QM - 8GB DDR3 1333Mhz - 1080p - Nvidia 1000M - 9 cell accu
Gewoon een heel grote verzameling snoertjes
Het gebruikte moederbord onderteund enkel ECC UDIMM en geen regged ECC, deze module van Kingston is bijv. een optie.fonsoy schreef op vrijdag 18 januari 2013 @ 11:26:
Beste Tweakers,
Ik crosspost een stukje van deze post vanuit het DIY NAS topic. Sorry hiervoor, ik realiseerde me achteraf dat deze vraag hier veel beter past.
Ik ben aan het nadenken om mijn storage op een slimme manier opnieuw op te zetten. Ik heb daarvoor de volgende upgradeset in mijn hoofd. De doelstelling is om te virtualiseren. Helaas wordt BSD niet ondersteund door Hyper-V, dus als ik ZFS wil, dan moet ik ESX gebruiken.
# Product Prijs Subtotaal 1 Intel Core i5 3330 Boxed € 158,40 € 158,40 1 Supermicro X9SCM-F € 176,70 € 176,70 1 Kingston KVR1066D3Q8R7SK2/16G € 108,90 € 108,90 1 IBM ServeRAID M1015 SAS/SATA Controller for System x € 118,58 € 118,58 1 Oude Intel X25-M 160GB € 0 € 0 Bekijk collectie
Importeer productenTotaal € 562,58
ESXi bied jammer genoeg enkel ondersteuning voor FreeBSD 9.0. De meest recente ZFSguru is op basis van FreeBSD 9.1-004 en dat schijnt niet echt lekker te werken onder ESXi.Met de huidige setup heb ik zo nu en dan weleens last van een bestand dat corrupt is geraakt. Het zou een plus zijn als dit te ondervangen is met ZFS. Ik ben helaas niet in de mogelijkheid om een tweede dedicated systeem hiervoor te plaatsen, en aan de andere kant zit ik voor o.a. Active Directory vast aan Windows.
Zijn er hier mensen die op een enkel systeem ZFS(guru) en Windows virtualiseren tegelijk? Wat kan ik qua performance verwachten, als ik de datastore via iSCSI aan windows wil aanbieden? Is dit een reele optie, of moet ik dit uit mijn hoofd zetten?
Wat wel goed werkt is bijv. OpenIndiana/Nexenta, HyperBart heeft daar een blogje aan gespendeerd. Uit eigen ervaring kan ik zeggen dat OpenIndiana in combinatie met napp-it, goed werkt op ESXi en relatief makkelijk te installeren is. Op TechnoDrone's blog staat een uitgebreide howto/walkthrough met ook o.a info rondom het opzetten van NFS en iSCSI gedeelde storage.
Asrock Z77 Extreme6, Intel i7-3770K, Corsair H100i, 32 GB DDR-3, 256 GB Samsung SSD + 2 x 3TB SATA, GeForce GTX 660 Ti, Onboard NIC and sound, SyncMaster 24"&22" Wide, Samsung DVD fikkertje, Corsair 500R
Ik was in de veronderstelling dat dit experimenteel en af te raden was, in verband met een beperkte compatibiliteit. Dat is alweer een tijdje geleden, en de ontwikkelingen gaan snel.Compizfox schreef op vrijdag 18 januari 2013 @ 14:00:
Waarom zou het niet kunnen? Dat is toch juist het principe van virtualisatie?
Prettig te weten dat het geheugen niet compatibel is, dan ga ik die vervangen.Pantagruel schreef op vrijdag 18 januari 2013 @ 14:20:
[...]
Het gebruikte moederbord onderteund enkel ECC UDIMM en geen regged ECC, deze module van Kingston is bijv. een optie.
[...]
ESXi bied jammer genoeg enkel ondersteuning voor FreeBSD 9.0. De meest recente ZFSguru is op basis van FreeBSD 9.1-004 en dat schijnt niet echt lekker te werken onder ESXi.
[ .... ]
een uitgebreide howto/walkthrough met ook o.a info rondom het opzetten van NFS en iSCSI gedeelde storage.
Hartelijk dank voor deze nuttige reactie. Ik heb hem gebookmarked, en zal er op terugvallen bij het inrichten van de machine. Nu weet ik wat ik wilde weten
Lenovo W520 - i7 2720QM - 8GB DDR3 1333Mhz - 1080p - Nvidia 1000M - 9 cell accu
Hoe bedoel je dat?Pantagruel schreef op vrijdag 18 januari 2013 @ 14:20:
ESXi bied jammer genoeg enkel ondersteuning voor FreeBSD 9.0. De meest recente ZFSguru is op basis van FreeBSD 9.1-004 en dat schijnt niet echt lekker te werken onder ESXi.
Dat gaat enkel over physical RDM's hè, de rest werkt prima.
Gewoon een heel grote verzameling snoertjes
| # | Product | Prijs | Subtotaal |
| 1 | Intel Pentium G860 Boxed | € 55,95 | € 55,95 |
| 1 | Asrock H77 Pro4-M | € 67,50 | € 67,50 |
| 2 | Samsung Spinpoint F1 HD103UJ, 1TB | € 0,- | € 0,- |
| 1 | Fractal Design ARC MINI | € 73,83 | € 73,83 |
| 2 | Icydock MB994SP-4SB-1 | € 61,71 | € 123,42 |
| 1 | Corsair CMV16GX3M2A1333C9 | € 64,90 | € 64,90 |
| 1 | be quiet! Pure Power L7 300W | € 37,95 | € 37,95 |
| 4 | Crucial m4 CT128M4SSD2 128GB | € 93,99 | € 375,96 |
| 8 | Intel Ephraim X25-E SSDSA2SH032G101 32GB | € 0,- | € 0,- |
| Bekijk collectie Importeer producten | Totaal | € 799,51 | |
ZFS op de vier crucial's M4 en dd met 50GB random data in 1M blocksize doet nu het volgende (read/write/resilver per second):
raid0: 1.87GB/616MB/1.79GB raid10: 1.99GB/272MB/ 956MB raid5: 1.54GB/371MB/1.77GB raid6: 1.68GB/261MB/1.47GB
Zelfde verhaal maar met 8x Intel x25-e
raid0: 1.76G/1.15G/1.86G raid10: 1.71G/ 774M/ 966M raid5: 1.56G/ 568M/1.04G raid6: 1.58G/ 439M/1.42G
Ik heb gemerkt dat het kopieren op hetzelfde volume geen ideale test is maar wel een die een constante penalty geeft. De werkelijke write waardes liggen dus waarschijnlijk nog wat hoger.
[ Voor 11% gewijzigd door analog_ op 19-01-2013 08:22 ]
Door het gebrek aan physical RDM's heb ik geen smart informatie van mijn hardeschijven. En hoewel ik de services van de laatste ZFSguru erg prettig vind zit ik er sterk over te denken om weer te downgradenCompizfox schreef op zaterdag 19 januari 2013 @ 00:49:
[...]
Hoe bedoel je dat?
Dat gaat enkel over physical RDM's hè, de rest werkt prima.
Dus het statement dat "FreeBSD 9.1 niet lekker werkt op ESXi" klopt niet.
Ik draai nu momenteel FreeBSD 9.0 met gewoon de laatste versie van ZFSGuru. Helaas is 9.0 ook bijna EOL...
Gewoon een heel grote verzameling snoertjes
Even niets...
Als je stil blijft staan, komt de hoek wel naar jou toe.
9.1 is pas EOL op 31 december 2014Compizfox schreef op zaterdag 19 januari 2013 @ 14:31:
Dat weet ik, maar je kunt natuurlijk ook een HBA doorgeven.
Dus het statement dat "FreeBSD 9.1 niet lekker werkt op ESXi" klopt niet.
Ik draai nu momenteel FreeBSD 9.0 met gewoon de laatste versie van ZFSGuru. Helaas is 9.1 ook bijna EOL...
Wellicht dat FreeBSD 9.1 op ESXi 5.0/5.1 tegenwoordig beter werkt.Compizfox schreef op zaterdag 19 januari 2013 @ 14:31:
Dat weet ik, maar je kunt natuurlijk ook een HBA doorgeven.
Dus het statement dat "FreeBSD 9.1 niet lekker werkt op ESXi" klopt niet.
Ik draai nu momenteel FreeBSD 9.0 met gewoon de laatste versie van ZFSGuru. Helaas is 9.1 ook bijna EOL...
Destijds (zo'n 6 a 7 maanden geleden denk ik), werkte RDM'ed disks niet (verdwenen gewoonweg uit de ZFS pool). Daarnaast moest je aan het editen komen om een VM op basis van FreeBSD/ZFSguru op te laten starten als je een M1015 middels Vt-d had doorgegeven (MSI/MSI-X enabled/disabled). Aangezien mijn ZFS pool uit 10 disks bestond, waarvan 2 op de onboard SATA, zat ik vast aan 2 stuks RDM'ed disks. (de hele onboard SATA controller doorsluizen betekende t verlies van de ESXi datastore
FreeBSD 9.1 EoL, is ook nieuw voor me.
Asrock Z77 Extreme6, Intel i7-3770K, Corsair H100i, 32 GB DDR-3, 256 GB Samsung SSD + 2 x 3TB SATA, GeForce GTX 660 Ti, Onboard NIC and sound, SyncMaster 24"&22" Wide, Samsung DVD fikkertje, Corsair 500R
Ik heb momenteel exact hetzelfde probleem. Ik ga het proberen op te lossen door een tweede controller te plaatsen met 2 disks en 2 van mijn SSD's.Pantagruel schreef op zaterdag 19 januari 2013 @ 16:25:
[...]
Wellicht dat FreeBSD 9.1 op ESXi 5.0/5.1 tegenwoordig beter werkt.
Destijds (zo'n 6 a 7 maanden geleden denk ik), werkte RDM'ed disks niet (verdwenen gewoonweg uit de ZFS pool). Daarnaast moest je aan het editen komen om een VM op basis van FreeBSD/ZFSguru op te laten starten als je een M1015 middels Vt-d had doorgegeven (MSI/MSI-X enabled/disabled). Aangezien mijn ZFS pool uit 10 disks bestond, waarvan 2 op de onboard SATA, zat ik vast aan 2 stuks RDM'ed disks. (de hele onboard SATA controller doorsluizen betekende t verlies van de ESXi datastore)
FreeBSD 9.1 EoL, is ook nieuw voor me.
Er moet dus een derde SSD in voor ESXi.
Ik hoop dat mijn bord de 2e controller slikt, want 2* een M1015 slikte hij niet.
Ik heb nu een 1068 controller klaar liggen.
Even niets...
Sorry, ik bedoelde 9.0.FireDrunk schreef op zaterdag 19 januari 2013 @ 14:37:
9.1 EOL? Hoezo?
Gewoon een heel grote verzameling snoertjes
Iemand?sloth schreef op donderdag 17 januari 2013 @ 23:13:
Ik begrijp dat het bij 4K disks aangeraden wordt om een RAID-Z van 3,5 of 9 disks te maken. Hoe dramatisch voor de performance is het echter als je een RAID-Z bouwt met 4 hdd's?
In de TS lees ik dat dit enkel voor tragere writes zorgt, klopt dit?
Met name een indicatie van 4 WDC Red 3TB in RAID-Z wat betreft sequential read/write zou ik erg interessant vinden
zonder sector optimalisatie (ashift=9): maximale opslagruimte maar lagere write performance
met sector optimalisatie (ashift=12): maximale performance maar minder opslagruimte beschikbaar
Vooral dat laatste, minder opslagruimte beschikbaar als je bijvoorbeeld een 4-disk RAID-Z gaat optimaliseren (ashift=12) is veel minder bekend. De oorzaak is dat je met een breuk komt te zitten en die ruimte simpelweg als slack verloren gaat. Bij elke 128K/3= 42.66K gaat er dan het stukje tot 44K verloren. Ofwel 1.33K per 44K is slack, ofwel 3% opslagruimte minder.
Wat bedoel je met 2x M1015 slikte hij niet?.FireDrunk schreef op zaterdag 19 januari 2013 @ 17:20:
[...]
Ik heb momenteel exact hetzelfde probleem. Ik ga het proberen op te lossen door een tweede controller te plaatsen met 2 disks en 2 van mijn SSD's.
Er moet dus een derde SSD in voor ESXi.
Ik hoop dat mijn bord de 2e controller slikt, want 2* een M1015 slikte hij niet.
Ik heb nu een 1068 controller klaar liggen.
Wilde t moederbord niet werken met 2x M1015's erin, of wilde 2 stuks M1015 mbv Vt-d doorsluizen niet werken voor de VM?
(Ik heb eerlijk gezegd nooit getest of 2 stuks M1015 in combi met ESXi in de X9SCM-F wilde werken. Dit ook omdat t tweede exemplaar op dat moment in een andere server zat.)
[ Voor 12% gewijzigd door Pantagruel op 19-01-2013 20:10 ]
Asrock Z77 Extreme6, Intel i7-3770K, Corsair H100i, 32 GB DDR-3, 256 GB Samsung SSD + 2 x 3TB SATA, GeForce GTX 660 Ti, Onboard NIC and sound, SyncMaster 24"&22" Wide, Samsung DVD fikkertje, Corsair 500R
Even niets...
Je kon dit doen door tijdens het flashen van de firmware maar één paramter te geven, ipv twee parameters met twee files. De laatste daarvan was de option ROM file uit mijn hoofd.
[ Voor 20% gewijzigd door Verwijderd op 19-01-2013 21:01 ]
Even niets...
Juist daarom kun je soms BIOS-problemen vermijden. Mocht dit bij jou werken als je dit gaat testen, hoor ik dat natuurlijk graag! Kan ik in mijn ZFSguru FAQ zetten die ik aan het schrijven ben.
Kan ik mooi even ESXi mee testen
Even niets...
Nice, ESXi draait lekker vanaf ssd, mijn vm's komen vanaf een Intel 80 GB Postville.FireDrunk schreef op zondag 20 januari 2013 @ 10:48:
Nu backup aan het maken van mijn desktop, daarin word de 256GB Samsung 830 vervangen voor een 128GB 840 Pro, en dan kan de 830 naar mijn server.
Kan ik mooi even ESXi mee testen
Je bordje, is dat de Tyan uit t 10+ TB show-off topic (TYAN S5502)?
Asrock Z77 Extreme6, Intel i7-3770K, Corsair H100i, 32 GB DDR-3, 256 GB Samsung SSD + 2 x 3TB SATA, GeForce GTX 660 Ti, Onboard NIC and sound, SyncMaster 24"&22" Wide, Samsung DVD fikkertje, Corsair 500R
Heb nu een DQ77MK met een i5-3550.
Even niets...
Aha, leuk pro-sumer bordje (o.a AMT).FireDrunk schreef op zondag 20 januari 2013 @ 13:27:
Oh nee, ik ben allang weer op wat anders over
Heb nu een DQ77MK met een i5-3550.
De 2e M1015 wil waarschijnlijk helemaal niet werken in t tweede PCIe slot (x4 slot), op overclockers.com.au in t forum staat er kort iets over, maar geen oplossing helaas.
Asrock Z77 Extreme6, Intel i7-3770K, Corsair H100i, 32 GB DDR-3, 256 GB Samsung SSD + 2 x 3TB SATA, GeForce GTX 660 Ti, Onboard NIC and sound, SyncMaster 24"&22" Wide, Samsung DVD fikkertje, Corsair 500R

De data is niet super belangrijk, het meerendeel is films & series, raid-z2 is daarom niet echt nodig. Er zitten nu 6 1TB schijven in, die had ik nog liggen. Eventueel worden die later nog vervangen door 3TB exemplaren. Daarna komen er nog 5 2TB schijven in uit mijn huidige server.
Hoe zouden jullie de pools in richten? Ik gebruik nu mdadm voor een raid5 oplossing, waarbij het raid device op /srv is gemount en daaronder losse directories voor tv-x264, x264, mp3 e.d.
[ Voor 6% gewijzigd door B2 op 20-01-2013 14:50 ]
Probeer wel op te letten dat je voor RAID-Z1 2^n+1 schijven gebruikt om verspilde ruimte te voorkomen. Dus 3 (2^1+1), 5 (2^2+1), 9 (2^3+1) etc. Je zou voor 12 disks dus een bijvoorbeeld een pool kunnen aanmaken bestaande uit 2 sets van schijven, 3 en 9. Of voor 11 disks 5 en 3 en 3.
Lang verhaal kort: Maak 1 pool aan, met een volume per mapje.
EDIT: Leuk bakkie
Ik wil eerst die kut BIOS van het bord upgraden (schijnt een hoop ESXi ACPI shit op te lossen).Pantagruel schreef op zondag 20 januari 2013 @ 13:55:
[...]
Aha, leuk pro-sumer bordje (o.a AMT).
De 2e M1015 wil waarschijnlijk helemaal niet werken in t tweede PCIe slot (x4 slot), op overclockers.com.au in t forum staat er kort iets over, maar geen oplossing helaas.
Maar het ding weigert keihard om te updaten.
Iets met Intel Management Engine Firmware Update Failed.
Heb al geprobeerd het ding te resetten (De AMT/ME) maar dat helpt niets...
Ook in BIOS recovery mode werkt het niet...
Even niets...
Je verliest dus juist ruimte bij ashift=12 indien je geen optimale config draait (dus 8-disk RAID-Z ipv 9-disk RAID-Z). Dus afgezien van prestaties, als het om opslagruimte gaat kun je beter of ashift=9 houden of een optimale config kiezen, dan heb je minder opslagruimte verloren. Dit geldt absoluut ook voor grote bestanden!Contagion schreef op zondag 20 januari 2013 @ 15:10:
Is het voor ruimte zoals films de moeite om RAID-Z1 2^n+1 te gebruiken? Je verliest toch bijna niks bij grote files en ook bijna geen snelheid trouwens? Ik verlies volgens mij veel meer ruimte aan ashift=12 tov ashift=9.
Da's mooi prut, had t bordje op t oog voor een andere ESXi build. Maar wellicht dat het dan toch een ander bordje gaat worden.FireDrunk schreef op zondag 20 januari 2013 @ 15:15:
[...]
Ik wil eerst die kut BIOS van het bord upgraden (schijnt een hoop ESXi ACPI shit op te lossen).
Maar het ding weigert keihard om te updaten.
Iets met Intel Management Engine Firmware Update Failed.
Heb al geprobeerd het ding te resetten (De AMT/ME) maar dat helpt niets...
Ook in BIOS recovery mode werkt het niet...
Asrock Z77 Extreme6, Intel i7-3770K, Corsair H100i, 32 GB DDR-3, 256 GB Samsung SSD + 2 x 3TB SATA, GeForce GTX 660 Ti, Onboard NIC and sound, SyncMaster 24"&22" Wide, Samsung DVD fikkertje, Corsair 500R
Maar ja, zeker weten doe je het nooit...
YAY, toch gelukt, eindelijk het BIOS kunnen updaten met hulp van een Intel Engineer (Chat rules
M1015 werkt nu wel in het tweede slot, maar mijn LSI1068 werkt niet in welke van de 2 dan ook
Kaart is overigens niet kapot, zojuist nog even getest in een andere machine, waar hij prima werkt (AMD 955, Biostar 790GX bordje)
[ Voor 45% gewijzigd door FireDrunk op 21-01-2013 11:32 ]
Even niets...
Nope, zal grotendeels afhankelijk zijn van de voorraad bij de toeleveranciers.FireDrunk schreef op maandag 21 januari 2013 @ 10:14:
Ik heb momenteel BIOS 0049, borden die je nu koopt zullen zeer waarschijnlijk met een nieuwere BIOS uitgeleverd worden, waardoor het misschien niet meer nodig is om te upgraden.
Maar ja, zeker weten doe je het nooit...
^^ Nice!, laat ff weten of de problemen onder ESXi inderdaad verholpen zijn.
De reden om voor een DQ77MK te gaan is toch vooral het feit dat je AMT hebt (KVM over IP voor een budget prijs zal ik maar zeggen) en 2 nic's die het uit de doos doen onder ESXi 5.1.
[ Voor 24% gewijzigd door Pantagruel op 21-01-2013 11:39 ]
Asrock Z77 Extreme6, Intel i7-3770K, Corsair H100i, 32 GB DDR-3, 256 GB Samsung SSD + 2 x 3TB SATA, GeForce GTX 660 Ti, Onboard NIC and sound, SyncMaster 24"&22" Wide, Samsung DVD fikkertje, Corsair 500R
Even niets...
Waarom reageert de gui niet meer als ik een 3 TB hdd wil volschrijven met 0 ?
Ik had er maar 5 gestart, maar toen kreeg ik ook allemaal foutmeldingen op de console..
Ik wil 20 hdd's formateren, er moeten toch wel een aantal gelijk kunnen ?
Commando is via de gui:
/usr/local/www/zfsguru//scripts/zero_write.sh da0
Edit: ik zie met commando ps wel een dd taak die 21% cpu neemt, dat zal wel de taak zijn die de hdd vol aan het schrijven is. (3TB volschrijven kan wel een uurtje of 9 duren vrees ik)
[ Voor 88% gewijzigd door jacovn op 21-01-2013 14:35 ]
8x330 NO12.5°, 8x330 ZW12.5°, 8x350 ZW60°, 8x325 NO10°, SE8K, P500. 6x410 ZW10° Enphase
Heb 3 REALTEKs waarvan 2 naar ESXi lopen en 1aan het LAN voor beheer.
Nou wil ik die 3de ook graag voor iSCSI inzetten maar alleen voor specifiekecomputers niet alle iSCSI clients.
(van het zfsguru forum / is hier niet een NL op tweakers?)
So like creating portalgroup2 for the "other machine" and when creating another LogicalUnit99 with mapping: PortalGroup2 InitiatorGroup99
De vraagstelling is mij niet helemaal duidelijk wat je als OS gebruikt en wat de exacte bedoeling is.Lekkerbek schreef op maandag 21 januari 2013 @ 12:26:
Iemand een idee hoe ik meerdere netwerkkaarten met iscsi aan kan bieden?
Heb 3 REALTEKs waarvan 2 naar ESXi lopen en 1aan het LAN voor beheer.
Nou wil ik die 3de ook graag voor iSCSI inzetten maar alleen voor specifiekecomputers niet alle iSCSI clients.
(van het zfsguru forum / is hier niet een NL op tweakers?)
So like creating portalgroup2 for the "other machine" and when creating another LogicalUnit99 with mapping: PortalGroup2 InitiatorGroup99
Als je OpenSolaris, en derivaten als OpenIndiana/nexenta/etc, gebruikt zul je Oracle doc's er op na moeten slaan of wat blogs door moeten nemen, deze beschrijft in t kort hoe iSCSI tot 1 IP te beperken (OS 11 Xpress).
Of istgt t kan is een kwestie van het FreeBSD forum afschuimen/doorzoeken.
[ Voor 3% gewijzigd door Pantagruel op 21-01-2013 13:18 ]
Asrock Z77 Extreme6, Intel i7-3770K, Corsair H100i, 32 GB DDR-3, 256 GB Samsung SSD + 2 x 3TB SATA, GeForce GTX 660 Ti, Onboard NIC and sound, SyncMaster 24"&22" Wide, Samsung DVD fikkertje, Corsair 500R
Ach ... dom van mij.Pantagruel schreef op maandag 21 januari 2013 @ 13:16:
[...]
De vraagstelling is mij niet helemaal duidelijk wat je als OS gebruikt en wat de exacte bedoeling is.
Als je OpenSolaris, en derivaten als OpenIndiana/nexenta/etc, gebruikt zul je Oracle doc's er op na moeten slaan of wat blogs door moeten nemen, deze beschrijft in t kort hoe iSCSI tot 1 IP te beperken (OS 11 Xpress).
Of istgt t kan is een kwestie van het FreeBSD forum afschuimen/doorzoeken.
Ik gebruik ZFSguru als platform.
Het dingetje heeft 3 LAN poorten en 2 daarvan heb ik rechtstreeks verbonden met mijn ESX bak.
De 3de echter, wanneer ik die óók vermeld in de PortalGroup1 onder 192.168.0.IP dan vinden alle, zich op het LAN bevindende, machines deze ingang ook met hun LUN daaraan.
Ik wil dus 1 extra PortalGroup maken zoals:
[PortalGroup1]
Comment "You only really need one portal group"
Portal DA1 10.0.0.226:3260 (voor esx dus)
Portal DA2 10.0.1.226:3260 (voor esx dus)
[PortalGroup2]
Comment "You only really need one portal group"
Portal DA1 192.168.0.226:3260 (of moet die DA3 heten?)
Waaraan dan:
[InitiatorGroup9]
Comment "ZFSguru qconfig: gPXE"
InitiatorName "iqn.2012-10.name:gPXE"
Netmask 192.168.0.226/24
[LogicalUnit9]
TargetName gPXE
Mapping PortalGroup2 InitiatorGroup9
AuthGroup AuthGroup1
UnitType Disk
QueueDepth 32
LUN0 Storage /dev/zvol/TANK/gPXE 32GB
Kan verbinden...
Ik heb alleen geen idee of het bovenstaande werkt.
Gewoonweg uitproberen wellichtLekkerbek schreef op maandag 21 januari 2013 @ 14:14:
[...]
Ik gebruik ZFSguru als platform.
..snipz..
Ik heb alleen geen idee of het bovenstaande werkt.
Ik heb zelf destijds wel met istgt lopen stoeien, maar dat was om iSCSI over InifiniBand (IPoIB) aan de praat te krijgen en dat lukte uit eindelijk niet (over de Gbit nic werkte het wel). De IP kant van de IB HCA had zijn eigen IP en subnet dus was er geen noodzaak om de boel te scheiden, ook omdat je op de command line aan istgt opgeeft welk IP te gebruiken voor t target. Na wat geGoogle kwam ik de volgende blogpost Setting up an iSCSI target with ZFS support on Debian kFreeBSD tegen.
Laat je niet afschrikken door de vermelding van Debian want : "kFreeBSD, the FreeBSD powered Debian" .
In ieder geval ga ik zelf deze blogpost ook maar eens doornemen en zien of ik alsnog IPoIB tbv iSCSI aan de praat krijg op FreeBSD. Op dit moment ligt de IB hardware gedeeltelijk werkeloos te wezen nadat het eerder onder FreeBSD (en dus ZFSguru) niet wilde lukken (onder linux wel, maar ik krijg bij ZFSonLinux nog een erg 'beta' gevoel, dit ondanks dat het Lawrence Livermore National Laboratory zich over de code buigt). Onder OpenIndiana en SO 11 Xpress werkte IB wel, maar liep ik tegen een transferplafond aan, maar dat terzijde.
Asrock Z77 Extreme6, Intel i7-3770K, Corsair H100i, 32 GB DDR-3, 256 GB Samsung SSD + 2 x 3TB SATA, GeForce GTX 660 Ti, Onboard NIC and sound, SyncMaster 24"&22" Wide, Samsung DVD fikkertje, Corsair 500R
- ik heb nu een raid5 opstelling met mdam met 5 schijven van dezelfde grootte. en ik heb nog 2 schijven van andere grootte (maar wel gelijk aan elkaar) die ik in raid1 wil gaan zetten, met een ssd als bootschijf..
- ik wil naar: zfs raidz2 met 5-7 schijven (dus 0-2 schijven erbij), en een raid1 equvalent van zfs met de andere 2 schuiven.
Mijn vragen?
- Ik ben bijvoorbeeld bij Nas4Free (zag er in eerste instantie beter uit, minder gestript van freebsd) de virtualbox plugin wel tegengekomen; waarbij mijn vraag is; is het enigzins performend? kan het 1-2 vmmetjes aan die ik puur voor mezelf inricht.
- ik draai nu ook: boinc, crashplan, transmission, ssh, apache2. munin, cups, tomcat, nagios, virtualbox etc. Los van het feit of deze beschikbaar zijn (of iig in alternatieve vorm). Is het wel praktisch om dit erbij te willen draaien, of kan ik dan beter richting een andere oplossing gaan denken?
Met als grootste prio virtualbox, gezien ik de web omgeving wil kunnen terugdraaien in versies mocht het struikelen. Kan met ZFS ook geloof ik alleen dat is volgens mij niet een hele zuivere manier (verkeerde niveau... op os niveau iets snapshotten om binnen een applicatie een versie terug te draaien .. >.< )
Of moet ik richting freebsd gaan denken om dit fatsoenlijk en 'netjes' te krijgen?
Heb stiekem weinig zin in commandline zfs namelijk.
Specs:
Intel g530, 5x2tb, 2x1tb, 60gb ssd,8gb geheugen, voornamelijk backups is multi-user (denk 1-3, uitzonderlijk 4-5) de rest is vooral voor mezelf. de virtualbox is een mirror omgeving van mijn vps, en oook heb ik nog een xp-vmmetje die ik aan wil zetten als het even kan
ZFS Command line is wel het minste waar je je dan druk over hoeft te maken...
Even niets...
Ik snap dat toch niet helemaal. Ik begrijp dat je slack space hebt die je verliest omdat je de recordgrootte van 128 KB niet goed kan verdelen als je geen macht van 2 aan disks hebt. Daarnaast heb je dat metadata die bij een ashift=12 array ook minimaal 4096 bytes inneemt ipv 512, zelfs als die metadata slechts een fractie van die hoeveelheid data is. Gegeven bijv. een file van 1 GB heb je toch alleen dat je slack verliest aan het laatste record van die file? 1000 files van 1 GB geven dus veel minder slack dan 1000000 van 1 MB?Verwijderd schreef op zondag 20 januari 2013 @ 17:00:
[...]
Je verliest dus juist ruimte bij ashift=12 indien je geen optimale config draait (dus 8-disk RAID-Z ipv 9-disk RAID-Z). Dus afgezien van prestaties, als het om opslagruimte gaat kun je beter of ashift=9 houden of een optimale config kiezen, dan heb je minder opslagruimte verloren. Dit geldt absoluut ook voor grote bestanden!
Hoe zit het nou precies?
Voor het bouwen van een ZFS NAS en andere hardwarevragen kun je beter terecht in Het grote DIY RAID NAS topic deel 3, zodat we dit topic reserveren voor ZFS-specifieke vragen en discussies.