aboutsummaryrefslogtreecommitdiffstats
path: root/packages/freenas/www/disks_manage_init.php
diff options
context:
space:
mode:
Diffstat (limited to 'packages/freenas/www/disks_manage_init.php')
-rw-r--r--packages/freenas/www/disks_manage_init.php459
1 files changed, 284 insertions, 175 deletions
diff --git a/packages/freenas/www/disks_manage_init.php b/packages/freenas/www/disks_manage_init.php
index 7e120634..7267cec3 100644
--- a/packages/freenas/www/disks_manage_init.php
+++ b/packages/freenas/www/disks_manage_init.php
@@ -1,36 +1,44 @@
<?php
/* $Id$ */
+/* ========================================================================== */
/*
- disks_manage_edit.php
- part of FreeNAS (http://www.freenas.org)
- Copyright (C) 2005-2006 Olivier Cochard-Labbé <olivier@freenas.org>.
- All rights reserved.
-
- Based on m0n0wall (http://m0n0.ch/wall)
- Copyright (C) 2003-2006 Manuel Kasper <mk@neon1.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 ``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 THE
- AUTHOR 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.
-*/
+ disks_manage_init.php
+ part of pfSense (http://www.pfSense.com)
+ Copyright (C) 2006 Daniel S. Haischt <me@daniel.stefan.haischt.name>
+ All rights reserved.
+
+ Based on FreeNAS (http://www.freenas.org)
+ Copyright (C) 2005-2006 Olivier Cochard-Labbé <olivier@freenas.org>.
+ All rights reserved.
+
+ Based on m0n0wall (http://m0n0.ch/wall)
+ Copyright (C) 2003-2006 Manuel Kasper <mk@neon1.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 ``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 THE
+ AUTHOR 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.
+ */
+/* ========================================================================== */
$pgtitle = array(gettext("System"),
gettext("Disks"),
@@ -42,11 +50,49 @@ require_once("freenas_guiconfig.inc");
require_once("freenas_functions.inc");
if (!is_array($freenas_config['disks']['disk']))
- $freenas_config['disks']['disk'] = array();
+ $freenas_config['disks']['disk'] = array();
disks_sort();
+if (!is_array($freenas_config['gconcat']['vdisk']))
+ $freenas_config['gconcat']['vdisk'] = array();
+
+gconcat_sort();
+
+if (!is_array($freenas_config['gmirror']['vdisk']))
+ $freenas_config['gmirror']['vdisk'] = array();
+
+gmirror_sort();
+
+if (!is_array($freenas_config['graid5']['vdisk']))
+ $freenas_config['graid5']['vdisk'] = array();
+
+graid5_sort();
+
+if (!is_array($freenas_config['gstripe']['vdisk']))
+ $freenas_config['gstripe']['vdisk'] = array();
+
+gstripe_sort();
+
+if (!is_array($freenas_config['gvinum']['vdisk']))
+ $freenas_config['gvinum']['vdisk'] = array();
+
+gvinum_sort();
+
+// Get all fstype supported by FreeNAS
+$a_fst = get_fstype_list();
+// Remove NTFS: can't format on NTFS under FreeNAS
+unset($a_fst['ntfs']);
+// Remove the first blank line 'unknown'
+$a_fst = array_slice($a_fst, 1);
+
$a_disk = &$freenas_config['disks']['disk'];
+$a_gconcat = &$freenas_config['gconcat']['vdisk'];
+$a_gmirror = &$freenas_config['gmirror']['vdisk'];
+$a_gstripe = &$freenas_config['gstripe']['vdisk'];
+$a_graid5 = &$freenas_config['graid5']['vdisk'];
+$a_gvinum = &$freenas_config['gvinum']['vdisk'];
+$all_disk = array_merge($a_disk,$a_gconcat,$a_gmirror,$a_gstripe,$a_graid5,$a_gvinum);
if (! empty($_POST))
{
@@ -58,8 +104,8 @@ if (! empty($_POST))
$pconfig = $_POST;
/* input validation */
- $reqdfields = explode(" ", "disk type");
- $reqdfieldsn = explode(",", "Disk,Type");
+ $reqdfields = explode(" ", "disk type");
+ $reqdfieldsn = explode(",", "Disk,Type");
do_input_validation_new($_POST, $reqdfields, $reqdfieldsn, &$error_bucket);
@@ -69,51 +115,111 @@ if (! empty($_POST))
/* if this is an AJAX caller then handle via JSON */
if(isAjax() && is_array($error_bucket)) {
- input_errors2Ajax(NULL, $error_bucket);
- exit;
+ input_errors2Ajax(NULL, $error_bucket);
+ exit;
}
- if (!$input_errors)
- {
- $do_format = true;
- $disk = $_POST['disk'];
- $type = $_POST['type'];
- $diskid = $_POST['id'];
- $notinitmbr= $_POST['notinitmbr'];
-
- /* found the name in the config: Must be a better way for did that */
-
- $id=0;
- $i=0;
- foreach ($a_disk as $disks)
- {
- $diskname=$disks['name'];
- if (strcmp($diskname,$disk)==0)
- $id=$i;
- $i++;
- }
-
- if ($type == "ufs" || $type == "ufsgpt" || $type == "ufs_no_su" || $type == "ufsgpt_no_su")
- $a_disk[$id]['fstype'] = "ufs";
- else
- $a_disk[$id]['fstype'] = $type;
- write_config();
- }
+ if (!$input_errors)
+ {
+ $do_format = true;
+ $disk = $_POST['disk'];
+ $type = $_POST['type'];
+ $notinitmbr= $_POST['notinitmbr'];
+
+ /* Check if disk is mounted. */
+ if(disks_check_mount_fullname($disk)) {
+ $errormsg = sprintf(gettext("The disk is currently mounted! <a href=%s>Unmount</a> this disk first before proceeding."), "disks_mount_tools.php?disk={$disk}&action=umount");
+ $do_format = false;
+ }
+
+ if($do_format) {
+ /* Get the id of the disk array entry. */
+ $NotFound = 1;
+ $id = array_search_ex($disk, $a_disk, "fullname");
+
+ if ($id) {
+ /* Set new filesystem type. */
+ $a_disk[$id]['fstype'] = $type;
+ $NotFound = 0;
+ }
+ else {
+ $id = array_search_ex($disk, $a_gmirror, "fullname");
+ }
+ if (($id !== false) && $NotFound) {
+ /* Set new filesystem type. */
+ $a_gmirror[$id]['fstype'] = $type;
+ $NotFound = 0;
+ }
+ else {
+ $id = array_search_ex($disk, $a_gstripe, "fullname");
+ }
+ if (($id !== false) && $NotFound) {
+ /* Set new filesystem type. */
+ $a_gstripe[$id]['fstype'] = $type;
+ $NotFound = 0;
+ }
+ else {
+ $id = array_search_ex($disk, $a_gconcat, "fullname");
+ }
+ if (($id !== false) && $NotFound) {
+ /* Set new filesystem type. */
+ $a_gconcat[$id]['fstype'] = $type;
+ $NotFound = 0;
+ }
+ else {
+ $id = array_search_ex($disk, $a_graid5, "fullname");
+ }
+ if (($id !== false) && $NotFound) {
+ /* Set new filesystem type. */
+ $a_graid5[$id]['fstype'] = $type;
+ $NotFound = 0;
+ }
+ else {
+ $id = array_search_ex($disk, $a_gvinum, "fullname");
+ }
+ if (($id !== false) && $NotFound) {
+ /* Set new filesystem type. */
+ $a_gvinum[$id]['fstype'] = $type;
+ $NotFound = 0;
+ }
+
+ write_config();
+ }
+ }
}
if (!isset($do_format))
{
- $do_format = false;
- $disk = '';
- $type = '';
+ $do_format = false;
+ $disk = '';
+ $type = '';
}
include("head.inc");
/* put your custom HTML head content here */
/* using some of the $pfSenseHead function calls */
+$pfSenseHead->setCloseHead(false);
echo $pfSenseHead->getHTML();
?>
+<script language="JavaScript">
+<!--
+function disk_change() {
+ switch(document.iform.disk.value)
+ {
+ <?php foreach ($a_disk as $diskv): ?>
+ case "<?=$diskv['fullname'];?>":
+ <?php $i = 0;?>
+ <?php foreach ($a_fst as $fstval => $fstname): ?>
+ document.iform.type.options[<?=$i++;?>].selected = <?php if($diskv['fstype'] == $fstval){echo "true";}else{echo "false";};?>;
+ <?php endforeach; ?>
+ break;
+ <?php endforeach; ?>
+ }
+}
+// -->
+</script>
+</head>
<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
<?php include("fbegin.inc"); ?>
@@ -126,9 +232,10 @@ echo $pfSenseHead->getHTML();
<td>
<?php
$tab_array = array();
- $tab_array[0] = array(gettext("Manage"), false, "disks_manage.php");
- $tab_array[1] = array(gettext("Format"), true, "disks_manage_init.php");
- $tab_array[2] = array(gettext("iSCSI Initiator"), false, "disks_manage_iscsi.php");
+ $tab_array[0] = array(gettext("Manage"), false, "disks_manage.php");
+ $tab_array[1] = array(gettext("Format"), true, "disks_manage_init.php");
+ $tab_array[2] = array(gettext("Tools"), false, "disks_manage_tools.php");
+ $tab_array[3] = array(gettext("iSCSI Initiator"), false, "disks_manage_iscsi.php");
display_top_tabs($tab_array);
?>
</td>
@@ -141,12 +248,12 @@ echo $pfSenseHead->getHTML();
<tr>
<td width="22%" valign="top" class="vncellreq"><?=gettext("Disk");?></td>
<td width="78%" class="vtable">
- <select name="disk" class="formselect" id="disk">
- <?php foreach ($a_disk as $diskn): ?>
- <option value="<?=$diskn['name'];?>"<?php if ($diskn['name'] == $disk) echo "selected=\"selected\"";?>>
- <?php echo htmlspecialchars($diskn['name'] . ": " .$diskn['size'] . " (" . $diskn['desc'] . ")");?>
- </option>
- <?php endforeach; ?>
+ <select name="disk" class="formselect" id="disk" onchange="disk_change();">
+ <?php foreach ($all_disk as $diskv): ?>
+ <option value="<?=$diskv['fullname'];?>"<?php if ($diskv['name'] == $disk) echo "selected";?>>
+ <?php echo htmlspecialchars($diskv['name'] . ": " .$diskv['size'] . " (" . $diskv['desc'] . ")");?>
+ <?php endforeach; ?>
+ </option>
</select>
</td>
</tr>
@@ -154,18 +261,14 @@ echo $pfSenseHead->getHTML();
<td width="22%" valign="top" class="vncellreq"><?=gettext("File system");?></td>
<td width="78%" class="vtable">
<select name="type" class="formselect" id="type">
- <option value="ufs" <?php if ($type == "ufs") echo "selected=\"selected\""; ?>>UFS with Soft Updates (use 8% space disk)</option>
- <option value="ufs_no_su" <?php if ($type == "ufs_no_su") echo "selected=\"selected\""; ?>>UFS</option>
- <option value="ufsgpt" <?php if ($type == "ufsgpt") echo "selected=\"selected\""; ?>>UFS (EFI/GPT) with Soft Updates (use 8% space disk)</option>
- <option value="ufsgpt_no_su" <?php if ($type == "ufsgpt_no_su") echo "selected=\"selected\""; ?>>UFS (EFI/GPT)</option>
- <option value="msdos" <?php if ($type == "msdos") echo "selected=\"selected\""; ?>>FAT32</option>
- <option value="gmirror" <?php if ($type == "gmirror") echo "selected=\"selected\""; ?>>Software RAID: Geom mirror</option>
- <option value="raid" <?php if ($type == "raid") echo "selected=\"selected\""; ?>>Software RAID: Geom Vinum</option>
- </select>
+ <?php foreach ($a_fst as $fstval => $fstname): ?>
+ <option value="<?=$fstval;?>" <?php if($type == $fstval) echo 'selected="selected"';?>><?=htmlspecialchars($fstname);?></option>
+ <?php endforeach; ?>
+ </select>
</td>
</tr>
<tr>
- <td width="22%" valign="top" class="vncellreq"><?=gettext("File system");?></td>
+ <td width="22%" valign="top" class="vncellreq"><?=gettext("Don't Erase MBR");?></td>
<td width="78%" class="vtable">
<input name="notinitmbr" id="notinitmbr" type="checkbox" value="yes" /><br />
<?= gettext("don't erase the MBR (useful for some RAID controller cards)"); ?>
@@ -177,100 +280,106 @@ echo $pfSenseHead->getHTML();
<input id="submitt" name="Submitt" type="submit" class="formbtn" value="<?=gettext("Format disk!");?>" />
</td>
</tr>
- <tr>
- <td valign="top" colspan="2">
- <?
+ <tr>
+ <td valign="top" colspan="2">
+ <?
if ($do_format) {
- echo "<strong>Disk initialization details:</strong>";
- echo('<pre style="font-size: small; border: solid 1px silver; padding: 4px;">');
- ob_end_flush();
-
- /* Erase MBR if not checked*/
-
- if (!$notinitmbr) {
- echo "Erasing MBR\n";
- system("dd if=/dev/zero of=/dev/" . escapeshellarg($disk) . " bs=32k count=640");
-
- }
- else
- echo "Keeping the MBR\n";
-
- switch ($type)
- {
- case "ufs":
- /* Initialize disk */
- system("/sbin/fdisk -I -b /boot/mbr " . escapeshellarg($disk));
- echo "\"fdisk: Geom not found\" is not an error message!\n";
- /* Initialise the partition (optional) */
- system("/bin/dd if=/dev/zero of=/dev/" . escapeshellarg($disk) . "s1 bs=32k count=16");
- /* Create s1 label */
- system("/sbin/bsdlabel -w " . escapeshellarg($disk) . "s1 auto");
- // Create filesystem
- system("/sbin/newfs -U /dev/" . escapeshellarg($disk) . "s1");
- break;
- case "ufs_no_su":
- /* Initialize disk */
- system("/sbin/fdisk -I -b /boot/mbr " . escapeshellarg($disk));
- /* Initialise the partition (optional) */
- system("/bin/dd if=/dev/zero of=/dev/" . escapeshellarg($disk) . "s1 bs=32k count=16");
- /* Create s1 label */
- system("/sbin/bsdlabel -w " . escapeshellarg($disk) . "s1 auto");
- // Create filesystem
- system("/sbin/newfs -m 0 /dev/" . escapeshellarg($disk) . "s1");
- break;
- case "ufsgpt":
- /* Create GPT partition table */
- system("/sbin/gpt destroy " . escapeshellarg($disk));
- system("/sbin/gpt create -f " . escapeshellarg($disk));
- system("/sbin/gpt add -t ufs " . escapeshellarg($disk));
- // Create filesystem
- system("/sbin/newfs -U /dev/" . escapeshellarg($disk) . "p1");
- break;
- case "ufsgpt_no_su":
- /* Create GPT partition table */
- system("/sbin/gpt destroy " . escapeshellarg($disk));
- system("/sbin/gpt create -f " . escapeshellarg($disk));
- system("/sbin/gpt add -t ufs " . escapeshellarg($disk));
- // Create filesystem
- system("/sbin/newfs -m 0 /dev/" . escapeshellarg($disk) . "p1");
- break;
- case "gmirror":
- /* Initialize disk */
- system("/sbin/fdisk -I -b /boot/mbr " . escapeshellarg($disk));
- /* Initialise the partition (optional) */
- system("/bin/dd if=/dev/zero of=/dev/" . escapeshellarg($disk) . "s1 bs=32k count=16");
- /* Create s1 label */
- //system("/sbin/bsdlabel -w " . escapeshellarg($disk) . "s1 auto");
- /* Delete old gmirror information */
- system("/sbin/gmirror clear /dev/" . escapeshellarg($disk));
- break;
- case "raid":
- /* Initialize disk */
- system("/sbin/fdisk -I -b /boot/mbr " . escapeshellarg($disk));
- echo "\"fdisk: Geom not found\"is not an error message!\n";
- /* Initialise the partition (optional) */
- system("/bin/dd if=/dev/zero of=/dev/" . escapeshellarg($disk) . "s1 bs=32k count=16");
- /* Create s1 label */
- system("/sbin/bsdlabel -w " . escapeshellarg($disk) . "s1 auto");
- break;
- case "msdos":
- /* Initialize disk */
- system("/sbin/fdisk -I -b /boot/mbr " . escapeshellarg($disk));
- echo "\"fdisk: Geom not found\"is not an error message!\n";
- /* Initialise the partition (optional) */
- system("/bin/dd if=/dev/zero of=/dev/" . escapeshellarg($disk) . "s1 bs=32k count=16");
- /* Create s1 label */
- system("/sbin/bsdlabel -w " . escapeshellarg($disk) . "s1 auto");
- // Create filesystem
- system("/sbin/newfs_msdos -F 32 /dev/" . escapeshellarg($disk) . "s1");
- break;
- }
-
- echo('</pre>');
- }
- ?>
- </td>
- </tr>
+ echo "<strong>Disk initialization details:</strong>";
+ echo('<pre style="font-size: small; border: solid 1px silver; padding: 4px;">');
+ ob_end_flush();
+
+ /* Erase MBR if not checked*/
+ if (!$notinitmbr) {
+ echo "Erasing MBR\n";
+ system("dd if=/dev/zero of=/dev/" . escapeshellarg($disk) . " bs=32k count=640");
+ }
+ else {
+ echo "Keeping the MBR and all partitions\n";
+ }
+
+ switch ($type)
+ {
+ case "ufs":
+ /* Initialize disk */
+ echo "Creating one parition:\n";
+ system("/sbin/fdisk -I -b /boot/mbr " . escapeshellarg($disk));
+ /* Initialise the partition (optional) */
+ echo "Initializing parition:\n";
+ system("/bin/dd if=/dev/zero of=/dev/" . escapeshellarg($disk) . "s1 bs=32k count=16");
+ /* Create s1 label */
+ echo "Creating BSD label:\n";
+ system("/sbin/bsdlabel -w " . escapeshellarg($disk) . "s1 auto");
+ // Create filesystem
+ echo "Creating Filesystem:\n";
+ system("/sbin/newfs -U /dev/" . escapeshellarg($disk) . "s1");
+ echo "Done!\n";
+ break;
+ case "ufs_no_su":
+ /* Initialize disk */
+ echo "Creating one parition:\n";
+ system("/sbin/fdisk -I -b /boot/mbr " . escapeshellarg($disk));
+ /* Initialise the partition (optional) */
+ echo "Initializing parition:\n";
+ system("/bin/dd if=/dev/zero of=/dev/" . escapeshellarg($disk) . "s1 bs=32k count=16");
+ /* Create s1 label */
+ echo "Creating BSD label:\n";
+ system("/sbin/bsdlabel -w " . escapeshellarg($disk) . "s1 auto");
+ // Create filesystem
+ echo "Creating Filesystem:\n";
+ system("/sbin/newfs -m 0 /dev/" . escapeshellarg($disk) . "s1");
+ echo "Done!\n";
+ break;
+ case "ufsgpt":
+ /* Create GPT partition table */
+ echo "Destroying old GTP information:\n";
+ system("/sbin/gpt destroy " . escapeshellarg($disk));
+ echo "Creating GPT partition:\n";
+ system("/sbin/gpt create -f " . escapeshellarg($disk));
+ system("/sbin/gpt add -t ufs " . escapeshellarg($disk));
+ // Create filesystem
+ echo "Creating Filesystem with Soft Updates:\n";
+ system("/sbin/newfs -U /dev/" . escapeshellarg($disk) . "p1");
+ echo "Done!\n";
+ break;
+ case "ufsgpt_no_su":
+ /* Create GPT partition table */
+ echo "Destroying old GTP information:\n";
+ system("/sbin/gpt destroy " . escapeshellarg($disk));
+ echo "Creating GPT partition:\n";
+ system("/sbin/gpt create -f " . escapeshellarg($disk));
+ system("/sbin/gpt add -t ufs " . escapeshellarg($disk));
+ // Create filesystem
+ echo "Creating Filesystem without Soft Updates:\n";
+ system("/sbin/newfs -m 0 /dev/" . escapeshellarg($disk) . "p1");
+ echo "Done!\n";
+ break;
+ case "softraid":
+ /* Initialize disk */
+ system("/sbin/fdisk -I -b /boot/mbr " . escapeshellarg($disk));
+ /* Initialise the partition (optional) */
+ system("/bin/dd if=/dev/zero of=/dev/" . escapeshellarg($disk) . "s1 bs=32k count=16");
+ /* Delete old gmirror information */
+ system("/sbin/gmirror clear " . escapeshellarg($disk));
+ echo "Done!\n";
+ break;
+ case "msdos":
+ /* Initialize disk */
+ system("/sbin/fdisk -I -b /boot/mbr " . escapeshellarg($disk));
+ /* Initialise the partition (optional) */
+ system("/bin/dd if=/dev/zero of=/dev/" . escapeshellarg($disk) . "s1 bs=32k count=16");
+ /* Create s1 label */
+ system("/sbin/bsdlabel -w " . escapeshellarg($disk) . "s1 auto");
+ // Create filesystem
+ system("/sbin/newfs_msdos -F 32 /dev/" . escapeshellarg($disk) . "s1");
+ echo "Done!\n";
+ break;
+ }
+
+ echo('</pre>');
+ }
+ ?>
+ </td>
+ </tr>
<tr>
<td align="left" valign="top" colspan="2">
<span class="red">