#!/usr/bin/perl # view_raid.cgi # Display information about a raid device require './raid-lib.pl'; &foreign_require("mount"); &foreign_require("lvm"); &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 &ui_form_start("save_raid.cgi"); print &ui_hidden("idx", $in{'idx'}); print &ui_table_start($text{'view_header'}, undef, 2); # Device name print &ui_table_row($text{'view_device'}, "<tt>$raid->{'value'}</tt>"); # UUID $uuid = &find_value('array-uuid', $raid->{'members'}); print &ui_table_row($text{'view_uuid'}, $uuid); # RAID level $lvl = &find_value('raid-level', $raid->{'members'}); print &ui_table_row($text{'view_level'}, $lvl eq 'linear' ? $text{'linear'} : $text{"raid$lvl"}); # Current status @st = &device_status($raid->{'value'}); print &ui_table_row($text{'view_status'}, $st[1] eq 'lvm' ? &text('view_lvm', "<tt>$st[0]</tt>") : $st[1] eq 'iscsi' ? &text('view_iscsi', "<tt>$st[0]</tt>") : $st[2] ? &text('view_mounted', "<tt>$st[0]</tt>") : @st ? &text('view_mount', "<tt>$st[0]</tt>") : $raid->{'active'} ? $text{'view_active'} : $text{'view_inactive'}); if ($raid->{'size'}) { print &ui_table_row($text{'view_size'}, &text('view_blocks', $raid->{'size'})." ". "(".&nice_size($raid->{'size'}*1024).")"); } if ($raid->{'resync'}) { print &ui_table_row($text{'view_resync'}, $raid->{'resync'} eq 'delayed' ? $text{'view_delayed'} : "$raid->{'resync'} \%"); } # Superblock? $super = &find_value('persistent-superblock', $raid->{'members'}); print &ui_table_row($text{'view_super'}, $super ? $text{'yes'} : $text{'no'}); # Layout if (($lvl eq '5') || ($lvl eq '6') || ($lvl eq '10')) { $layout = &find_value('parity-algorithm', $raid->{'members'}); print &ui_table_row($text{'view_parity'}, $layout || $text{'default'}); } # Chunk size $chunk = &find_value('chunk-size', $raid->{'members'}); print &ui_table_row($text{'view_chunk'}, $chunk ? "$chunk kB" : $text{'default'}); # Current errors 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 &ui_table_row($text{'view_errors'}, "<font color=#ff0000>". &text('view_bad', scalar(@badlist)). "</font>"); } } # Current state if ($raid->{'state'}) { print &ui_table_row($text{'view_state'}, $raid->{'state'}); } # Rebuild percent if ($raid->{'rebuild'} ne '') { print &ui_table_row($text{'view_rebuild'}, $raid->{'rebuild'}." \% (".$raid->{'remain'}." min, ". int($raid->{'speed'} / 1024)." MB/s)"); } # Display partitions in RAID $rp = undef; @devs = sort { $a->{'value'} cmp $b->{'value'} } &find('device', $raid->{'members'}); foreach $d (@devs) { if (&find('raid-disk', $d->{'members'}) || &find('parity-disk', $d->{'members'})) { local $name = &mount::device_name($d->{'value'}); $rp .= $name."\n"; if (!&indevlist($d->{'value'}, $raid->{'devices'}) && $raid->{'active'}) { $rp .= "<font color=#ff0000>$text{'view_down'}</font>\n"; } $rp .= "<br>\n"; push(@rdisks, [ $d->{'value'}, $name ]); push(@datadisks, [ $d->{'value'}, $name ]); } } $raidcnt = @rdisks; print &ui_table_row($text{'view_disks'}, $rp); # Display spare partitions $sp = undef; $sparescnt = 0; $newdisks = @rdisks; @spares = ( ); foreach $d (@devs) { if (&find('spare-disk', $d->{'members'})) { local $name = &mount::device_name($d->{'value'}); $sp .= "$name<br>\n"; push(@rdisks, [ $d->{'value'}, $name ]); push(@sparedisks, [ $d->{'value'}, $name ]); $sparescnt++; $newdisks++; push(@spares, [ "$newdisks", "+ $sparescnt" ]); } } if ($sp) { print &ui_table_row($text{'view_spares'}, $sp); } # Display spare group, if any $sg = &find_value("spare-group", $raid->{'members'}); if ($sg) { print &ui_table_row($text{'view_sparegroup'}, "<tt>$sg</tt>"); } print &ui_table_end(); print &ui_hr(); @grid = ( ); if ($raid_mode eq "raidtools" && !$st[2]) { # Only classic raid tools can disable a RAID local $act = $raid->{'active'} ? "stop" : "start"; push(@grid, &ui_submit($text{'view_'.$act}, $act), $text{'view_'.$act.'desc'}); } 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) { push(@grid, &ui_submit($text{'view_add'}, "add")." ". &ui_select("disk", undef, \@disks), $text{'view_adddesc'}); } if (@rdisks > 1) { @rdisks = sort { $a->[0] cmp $b->[0] } @rdisks; push(@grid, &ui_submit($text{'view_remove'}, "remove")." ". &ui_select("rdisk", undef, \@rdisks), $text{'view_removedesc'}); push(@grid, &ui_submit($text{'view_remove_det'}, "remove_det"), $text{'view_remove_detdesc'}); } if ($sparescnt > 0 && &get_mdadm_version() >= 3.3 && &supports_replace()) { @rdisks = sort { $a->[0] cmp $b->[0] } @rdisks; @spares = sort { $a->[0] cmp $b->[0] } @spares; push(@grid, &ui_submit($text{'view_replace'}, "replace")." ". &ui_select("replacedisk", undef, \@datadisks)." with ". &ui_select("replacesparedisk", undef, \@sparedisks), $text{'view_replacedesc'}); } if ($sparescnt > 0 && $lvl != 10) { @spares = sort { $a->[0] cmp $b->[0] } @spares; push(@grid, &ui_submit($text{'view_grow'}, "grow")." ". &ui_select("ndisk_grow", undef, \@spares), $text{'view_growdesc'}); if ($lvl == 5 && &get_mdadm_version() >= 3.1) { push(@grid, &ui_submit($text{'view_convert_to_raid6'}, "convert_to_raid6")." ". &ui_select("ndisk_convert", undef, \@spares)." ".&ui_hidden("oldcount", $raidcnt), $text{'view_convert_to_raid6desc'}); } } if ($lvl == 6 && &get_mdadm_version() >= 3.1) { push(@grid, &ui_submit($text{'view_convert_to_raid5'}, "convert_to_raid5")." ".&ui_hidden("oldcount", $raidcnt), $text{'view_convert_to_raid5desc'}); } } if ($raid->{'active'} && !$st[2]) { # Show buttons for creating filesystems $fstype = $st[1] || "ext3"; push(@grid, &ui_submit($text{'view_mkfs2'}, "mkfs")." ". &ui_select("fs", $fstype, [ map { [ $_, $fdisk::text{"fs_".$_}." ($_)" ] } &fdisk::supported_filesystems() ]), $text{'view_mkfsdesc'}); } if (!@st) { # Show button for mounting filesystem push(@grid, &ui_submit($text{'view_newmount'}, "mount")." ". &ui_textbox("newdir", undef, 20), $text{'view_mountmsg'}); # Show button for mounting as swap push(@grid, &ui_submit($text{'view_newmount2'}, "mountswap"), $text{'view_mountmsg2'}); } if (!$st[2]) { push(@grid, &ui_submit($text{'view_delete'}, "delete"), $text{'view_deletedesc'}); } if (@grid) { print &ui_grid_table(\@grid, 2, 100, [ "width=20% nowrap" ], "cellpadding=5"),"<p>\n"; } if ($st[2]) { print "<b>$text{'view_cannot2'}</b><p>\n"; } print &ui_form_end(); &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; }
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
images | Folder | 0755 |
|
|
lang | Folder | 0755 |
|
|
CHANGELOG | File | 2.21 KB | 0644 |
|
backup_config.pl | File | 721 B | 0755 |
|
cgi_args.pl | File | 243 B | 0755 |
|
config | File | 63 B | 0644 |
|
config-debian-linux-3.1-ALL | File | 69 B | 0644 |
|
config.info | File | 219 B | 0644 |
|
config.info.bg | File | 382 B | 0644 |
|
config.info.ca | File | 243 B | 0644 |
|
config.info.cs | File | 232 B | 0644 |
|
config.info.de | File | 247 B | 0644 |
|
config.info.es | File | 265 B | 0644 |
|
config.info.fr | File | 271 B | 0644 |
|
config.info.hu | File | 0 B | 0644 |
|
config.info.nl | File | 222 B | 0644 |
|
config.info.no | File | 227 B | 0644 |
|
config.info.pl | File | 76 B | 0644 |
|
config.info.ru | File | 147 B | 0644 |
|
config.info.sv | File | 76 B | 0644 |
|
config.info.tr | File | 78 B | 0644 |
|
config.info.uk | File | 140 B | 0644 |
|
config.info.zh | File | 62 B | 0644 |
|
config.info.zh_TW | File | 72 B | 0644 |
|
create_raid.cgi | File | 2.75 KB | 0755 |
|
index.cgi | File | 3.82 KB | 0755 |
|
install_check.pl | File | 428 B | 0755 |
|
log_parser.pl | File | 1.52 KB | 0755 |
|
mkfs.cgi | File | 957 B | 0755 |
|
module.info | File | 180 B | 0644 |
|
module.info.af | File | 0 B | 0644 |
|
module.info.af.auto | File | 115 B | 0644 |
|
module.info.ar | File | 0 B | 0644 |
|
module.info.ar.auto | File | 152 B | 0644 |
|
module.info.be | File | 0 B | 0644 |
|
module.info.be.auto | File | 144 B | 0644 |
|
module.info.bg | File | 0 B | 0644 |
|
module.info.bg.auto | File | 148 B | 0644 |
|
module.info.ca | File | 117 B | 0644 |
|
module.info.ca.auto | File | 13 B | 0644 |
|
module.info.cs | File | 19 B | 0644 |
|
module.info.cs.auto | File | 103 B | 0644 |
|
module.info.da | File | 0 B | 0644 |
|
module.info.da.auto | File | 114 B | 0644 |
|
module.info.de | File | 107 B | 0644 |
|
module.info.de.auto | File | 13 B | 0644 |
|
module.info.el | File | 0 B | 0644 |
|
module.info.el.auto | File | 181 B | 0644 |
|
module.info.es | File | 22 B | 0644 |
|
module.info.es.auto | File | 100 B | 0644 |
|
module.info.eu | File | 0 B | 0644 |
|
module.info.eu.auto | File | 114 B | 0644 |
|
module.info.fa | File | 0 B | 0644 |
|
module.info.fa.auto | File | 173 B | 0644 |
|
module.info.fi | File | 0 B | 0644 |
|
module.info.fi.auto | File | 119 B | 0644 |
|
module.info.fr | File | 0 B | 0644 |
|
module.info.fr.auto | File | 131 B | 0644 |
|
module.info.he | File | 0 B | 0644 |
|
module.info.he.auto | File | 142 B | 0644 |
|
module.info.hr | File | 0 B | 0644 |
|
module.info.hr.auto | File | 115 B | 0644 |
|
module.info.hu | File | 19 B | 0644 |
|
module.info.hu.auto | File | 114 B | 0644 |
|
module.info.it | File | 0 B | 0644 |
|
module.info.it.auto | File | 115 B | 0644 |
|
module.info.ja | File | 20 B | 0644 |
|
module.info.ja.auto | File | 127 B | 0644 |
|
module.info.ko | File | 23 B | 0644 |
|
module.info.ko.auto | File | 111 B | 0644 |
|
module.info.lt | File | 0 B | 0644 |
|
module.info.lt.auto | File | 134 B | 0644 |
|
module.info.lv | File | 0 B | 0644 |
|
module.info.lv.auto | File | 119 B | 0644 |
|
module.info.ms | File | 98 B | 0644 |
|
module.info.ms.auto | File | 13 B | 0644 |
|
module.info.mt | File | 0 B | 0644 |
|
module.info.mt.auto | File | 111 B | 0644 |
|
module.info.nl | File | 19 B | 0644 |
|
module.info.nl.auto | File | 98 B | 0644 |
|
module.info.no | File | 19 B | 0644 |
|
module.info.no.auto | File | 103 B | 0644 |
|
module.info.pl | File | 25 B | 0644 |
|
module.info.pl.auto | File | 96 B | 0644 |
|
module.info.pt | File | 22 B | 0644 |
|
module.info.pt.auto | File | 103 B | 0644 |
|
module.info.pt_BR | File | 0 B | 0644 |
|
module.info.pt_BR.auto | File | 134 B | 0644 |
|
module.info.ro | File | 0 B | 0644 |
|
module.info.ro.auto | File | 119 B | 0644 |
|
module.info.ru | File | 19 B | 0644 |
|
module.info.ru.auto | File | 129 B | 0644 |
|
module.info.sk | File | 0 B | 0644 |
|
module.info.sk.auto | File | 117 B | 0644 |
|
module.info.sl | File | 0 B | 0644 |
|
module.info.sl.auto | File | 114 B | 0644 |
|
module.info.sv | File | 19 B | 0644 |
|
module.info.sv.auto | File | 97 B | 0644 |
|
module.info.th | File | 0 B | 0644 |
|
module.info.th.auto | File | 162 B | 0644 |
|
module.info.tr | File | 19 B | 0644 |
|
module.info.tr.auto | File | 99 B | 0644 |
|
module.info.uk | File | 0 B | 0644 |
|
module.info.uk.auto | File | 146 B | 0644 |
|
module.info.ur | File | 0 B | 0644 |
|
module.info.ur.auto | File | 150 B | 0644 |
|
module.info.vi | File | 0 B | 0644 |
|
module.info.vi.auto | File | 135 B | 0644 |
|
module.info.zh | File | 27 B | 0644 |
|
module.info.zh.auto | File | 96 B | 0644 |
|
module.info.zh_TW | File | 30 B | 0644 |
|
module.info.zh_TW.auto | File | 102 B | 0644 |
|
raid-lib.pl | File | 22.25 KB | 0755 |
|
raid_form.cgi | File | 3.88 KB | 0755 |
|
save_mdadm.cgi | File | 939 B | 0755 |
|
save_raid.cgi | File | 4.15 KB | 0755 |
|
view_raid.cgi | File | 7.15 KB | 0755 |
|