#!/usr/local/bin/perl # view_raid.cgi # Display information about a raid device require './raid-lib.pl'; &foreign_require("mount", "mount-lib.pl"); &foreign_require("lvm", "lvm-lib.pl"); &ReadParse(); print "Refresh: $config{'refresh'}\r\n" if ($config{'refresh'}); &ui_print_header(undef, $text{'view_title'}, ""); $conf = &get_raidtab(); $raid = $conf->[$in{'idx'}]; print "
\n"; print "\n"; print "\n"; print "\n"; print "
$text{'view_header'}
\n"; print "\n"; print "\n"; $lvl = &find_value('raid-level', $raid->{'members'}); print "\n"; print "\n"; @st = &device_status($raid->{'value'}); print "\n"; if ($raid->{'size'}) { print "\n"; print "\n"; } if ($raid->{'resync'}) { print "\n"; print "\n"; } $super = &find_value('persistent-superblock', $raid->{'members'}); print "\n"; print "\n"; if ($lvl eq '5') { $parity = &find_value('parity-algorithm', $raid->{'members'}); print "\n"; print "\n"; } $chunk = &find_value('chunk-size', $raid->{'members'}); print "\n"; print "\n"; if (ref($raid->{'errors'})) { for($i=0; $i<@{$raid->{'errors'}}; $i++) { if ($raid->{'errors'}->[$i] ne "U") { push(@badlist, $raid->{'devices'}->[$i]); } } if (@badlist) { print "\n"; print "\n"; } } if ($raid->{'state'}) { print "\n"; print "\n"; } if ($raid->{'rebuild'}) { print "\n"; print "\n"; } # Display partitions in RAID print "\n"; # Display spare partitions foreach $d (&find('device', $raid->{'members'})) { if (&find('spare-disk', $d->{'members'})) { local $name = &mount::device_name($d->{'value'}); $sp .= "$name
\n"; $rdisks .= "\n"; } print "
$text{'view_device'}$raid->{'value'}
$text{'view_level'}",$lvl eq 'linear' ? $text{'linear'} : $text{"raid$lvl"},"
$text{'view_status'} \n"; print $st[1] eq 'lvm' ? &text('view_lvm', "$st[0]") : $st[2] ? &text('view_mounted', "$st[0]") : @st ? &text('view_mount', "$st[0]") : $raid->{'active'} ? $text{'view_active'} : $text{'view_inactive'}; print "
$text{'view_size'}$raid->{'size'} blocks ", "(",&nice_size($raid->{'size'}*1024),")
$text{'view_resync'}$raid->{'resync'} \%
$text{'view_super'}",$super ? $text{'yes'} : $text{'no'},"
$text{'view_parity'}",$parity ? $parity : $text{'default'},"
$text{'view_chunk'}",$chunk ? "$chunk kB" : $text{'default'},"
$text{'view_errors'}", &text('view_bad', scalar(@badlist)), "
$text{'view_state'}$raid->{'state'}
$text{'view_rebuild'}$raid->{'rebuild'} \%
$text{'view_disks'} \n"; foreach $d (&find('device', $raid->{'members'})) { if (&find('raid-disk', $d->{'members'}) || &find('parity-disk', $d->{'members'})) { local $name = &mount::device_name($d->{'value'}); print $name,"\n"; if (!&indevlist($d->{'value'}, $raid->{'devices'}) && $raid->{'active'}) { print "$text{'view_down'}\n"; } print "
\n"; $rdisks .= "
$text{'view_spares'} \n"; print $sp,"
\n"; print "


\n"; print "\n"; if ($raid_mode eq "raidtools" && !$st[2]) { # Only classic raid tools can disable a RAID local $act = $raid->{'active'} ? "stop" : "start"; print "\n"; print "\n"; } if ($raid_mode eq "mdadm") { # Only MDADM can add or remove a device (so far) $disks = &find_free_partitions([ $raid->{'value'} ], 0, 1); if ($disks) { print "\n"; print "\n"; } if ($rdisks_count > 1) { print "\n"; print "\n"; } } if ($raid->{'active'} && !$st[2]) { # Show buttons for creating filesystems $fstype = $st[1] || "ext3"; print "\n"; print "\n"; } if (!@st) { # Show button for mounting filesystem print "\n"; print "\n"; # Show button for mounting as swap print "\n"; print "\n"; } if (!$st[2]) { print "\n"; print "\n"; } if ($st[2]) { print "\n"; } print "
",$text{'view_'.$act.'desc'},"
\n"; print "$text{'view_adddesc'}
\n"; print "$text{'view_removedesc'}
\n"; print "$text{'view_mkfsdesc'}
\n"; print "\n"; print "$text{'view_mountmsg'}
\n"; print "$text{'view_mountmsg2'}
$text{'view_deletedesc'}
$text{'view_cannot2'}
\n"; print "
\n"; &ui_print_footer("", $text{'index_return'}); # indevlist(device, &list) sub indevlist { local $d; foreach $d (@{$_[1]}) { return 1 if (&same_file($_[0], $d)); } return 0; }