3 # Display information about a raid device
5 require './raid-lib.pl';
6 &foreign_require("mount");
7 &foreign_require("lvm");
10 print "Refresh: $config{'refresh'}\r\n"
11 if ($config{'refresh'});
12 &ui_print_header(undef, $text{'view_title'}, "");
13 $conf = &get_raidtab();
14 $raid = $conf->[$in{'idx'}];
16 print &ui_form_start("save_raid.cgi");
17 print &ui_hidden("idx", $in{'idx'});
18 print &ui_table_start($text{'view_header'}, undef, 2);
21 print &ui_table_row($text{'view_device'}, "<tt>$raid->{'value'}</tt>");
24 $lvl = &find_value('raid-level', $raid->{'members'});
25 print &ui_table_row($text{'view_level'},
26 $lvl eq 'linear' ? $text{'linear'} : $text{"raid$lvl"});
29 @st = &device_status($raid->{'value'});
30 print &ui_table_row($text{'view_status'},
31 $st[1] eq 'lvm' ? &text('view_lvm', "<tt>$st[0]</tt>") :
32 $st[2] ? &text('view_mounted', "<tt>$st[0]</tt>") :
33 @st ? &text('view_mount', "<tt>$st[0]</tt>") :
34 $raid->{'active'} ? $text{'view_active'} :
35 $text{'view_inactive'});
37 if ($raid->{'size'}) {
38 print &ui_table_row($text{'view_size'},
39 &text('view_blocks', $raid->{'size'})." ".
40 "(".&nice_size($raid->{'size'}*1024).")");
42 if ($raid->{'resync'}) {
43 print &ui_table_row($text{'view_resync'}, "$raid->{'resync'} \%");
47 $super = &find_value('persistent-superblock', $raid->{'members'});
48 print &ui_table_row($text{'view_super'},
49 $super ? $text{'yes'} : $text{'no'});
53 $layout = &find_value('parity-algorithm', $raid->{'members'});
54 print &ui_table_row($text{'view_parity'}, $layout || $text{'default'});
58 $chunk = &find_value('chunk-size', $raid->{'members'});
59 print &ui_table_row($text{'view_chunk'},
60 $chunk ? "$chunk kB" : $text{'default'});
63 if (ref($raid->{'errors'})) {
64 for($i=0; $i<@{$raid->{'errors'}}; $i++) {
65 if ($raid->{'errors'}->[$i] ne "U") {
66 push(@badlist, $raid->{'devices'}->[$i]);
70 print &ui_table_row($text{'view_errors'},
71 "<font color=#ff0000>".
72 &text('view_bad', scalar(@badlist)).
78 if ($raid->{'state'}) {
79 print &ui_table_row($text{'view_state'}, $raid->{'state'});
83 if ($raid->{'rebuild'}) {
84 print &ui_table_row($text{'view_rebuild'},
85 $raid->{'rebuild'}." \% (".$raid->{'remain'}." min, ".
86 $raid->{'speed'}." KBytes/s)");
90 # Display partitions in RAID
92 @devs = sort { $a->{'value'} cmp $b->{'value'} }
93 &find('device', $raid->{'members'});
95 if (&find('raid-disk', $d->{'members'}) ||
96 &find('parity-disk', $d->{'members'})) {
97 local $name = &mount::device_name($d->{'value'});
99 if (!&indevlist($d->{'value'}, $raid->{'devices'}) &&
101 $rp .= "<font color=#ff0000>$text{'view_down'}</font>\n";
104 push(@rdisks, [ $d->{'value'}, $name ]);
110 print &ui_table_row($text{'view_disks'}, $rp);
112 # Display spare partitions
118 if (&find('spare-disk', $d->{'members'})) {
119 local $name = &mount::device_name($d->{'value'});
120 $sp .= "$name<br>\n";
121 push(@rdisks, [ $d->{'value'}, $name ]);
124 push(@spares, [ "$newdisks", "+ $sparescnt" ]);
128 print &ui_table_row($text{'view_spares'}, $sp);
131 # Display spare group, if any
132 $sg = &find_value("spare-group", $raid->{'members'});
134 print &ui_table_row($text{'view_sparegroup'}, "<tt>$sg</tt>");
137 print &ui_table_end();
142 if ($raid_mode eq "raidtools" && !$st[2]) {
143 # Only classic raid tools can disable a RAID
144 local $act = $raid->{'active'} ? "stop" : "start";
145 push(@grid, &ui_submit($text{'view_'.$act}, $act),
146 $text{'view_'.$act.'desc'});
149 if ($raid_mode eq "mdadm") {
150 # Only MDADM can add or remove a device (so far)
151 @disks = &find_free_partitions([ $raid->{'value'} ], 0, 1);
153 push(@grid, &ui_submit($text{'view_add'}, "add")." ".
154 &ui_select("disk", undef, \@disks),
155 $text{'view_adddesc'});
158 @rdisks = sort { $a->[0] cmp $b->[0] } @rdisks;
159 push(@grid, &ui_submit($text{'view_remove'}, "remove")." ".
160 &ui_select("rdisk", undef, \@rdisks),
161 $text{'view_removedesc'});
162 push(@grid, &ui_submit($text{'view_remove_det'}, "remove_det"),
163 $text{'view_remove_detdesc'});
165 if ($sparescnt > 0 && $lvl != 10) {
166 @spares = sort { $a->[0] cmp $b->[0] } @spares;
167 push(@grid, &ui_submit($text{'view_grow'}, "grow")." ".
168 &ui_select("ndisk_grow", undef, \@spares),
169 $text{'view_growdesc'});
170 if ($lvl == 5 && &get_mdadm_version() >= 3.1) {
171 push(@grid, &ui_submit($text{'view_convert_to_raid6'}, "convert_to_raid6")." ".
172 &ui_select("ndisk_convert", undef, \@spares)." ".&ui_hidden("oldcount", $raidcnt),
173 $text{'view_convert_to_raid6desc'});
176 if ($lvl == 6 && &get_mdadm_version() >= 3.1) {
177 push(@grid, &ui_submit($text{'view_convert_to_raid5'}, "convert_to_raid5")." ".&ui_hidden("oldcount", $raidcnt),
178 $text{'view_convert_to_raid5desc'});
182 if ($raid->{'active'} && !$st[2]) {
183 # Show buttons for creating filesystems
184 $fstype = $st[1] || "ext3";
185 push(@grid, &ui_submit($text{'view_mkfs2'}, "mkfs")." ".
186 &ui_select("fs", $fstype,
187 [ map { [ $_, $fdisk::text{"fs_".$_}." ($_)" ] }
188 &fdisk::supported_filesystems() ]),
189 $text{'view_mkfsdesc'});
193 # Show button for mounting filesystem
194 push(@grid, &ui_submit($text{'view_newmount'}, "mount")." ".
195 &ui_textbox("newdir", undef, 20),
196 $text{'view_mountmsg'});
198 # Show button for mounting as swap
199 push(@grid, &ui_submit($text{'view_newmount2'}, "mountswap"),
200 $text{'view_mountmsg2'});
204 push(@grid, &ui_submit($text{'view_delete'}, "delete"),
205 $text{'view_deletedesc'});
209 print &ui_grid_table(\@grid, 2, 100, [ "width=20% nowrap" ],
210 "cellpadding=5"),"<p>\n";
213 print "<b>$text{'view_cannot2'}</b><p>\n";
215 print &ui_form_end();
217 &ui_print_footer("", $text{'index_return'});
219 # indevlist(device, &list)
223 foreach $d (@{$_[1]}) {
224 return 1 if (&same_file($_[0], $d));