svn commit: r296655 - head/usr.sbin/pc-sysinstall/backend

Alexander Motin mav at FreeBSD.org
Fri Mar 11 14:14:16 UTC 2016


Author: mav
Date: Fri Mar 11 14:14:15 2016
New Revision: 296655
URL: https://svnweb.freebsd.org/changeset/base/296655

Log:
  Unify and improve metadata wiping.
  
  MFC after:	2 weeks

Modified:
  head/usr.sbin/pc-sysinstall/backend/functions-disk.sh

Modified: head/usr.sbin/pc-sysinstall/backend/functions-disk.sh
==============================================================================
--- head/usr.sbin/pc-sysinstall/backend/functions-disk.sh	Fri Mar 11 13:06:11 2016	(r296654)
+++ head/usr.sbin/pc-sysinstall/backend/functions-disk.sh	Fri Mar 11 14:14:15 2016	(r296655)
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/sh -x
 #-
 # Copyright (c) 2010 iXsystems, Inc.  All rights reserved.
 #
@@ -257,12 +257,7 @@ delete_all_gpart()
   # Destroy the disk geom
   rc_nohalt "gpart destroy ${DISK}"
 
-  # Make sure we clear any hidden gpt tables
-  clear_backup_gpt_table "${DISK}"
-
-  # Wipe out front of disk
-  rc_nohalt "dd if=/dev/zero of=${DISK} count=3000"
-
+  wipe_metadata "${DISK}"
 };
 
 # Function to export all zpools before starting an install
@@ -292,7 +287,7 @@ stop_all_gmirror()
     then
       echo_log "Stopping mirror $gprov $DISK"
       rc_nohalt "gmirror remove $gprov $DISK"
-      rc_nohalt "dd if=/dev/zero of=/dev/${DISK} count=4096"
+      wipe_metadata "${DISK}"
     fi
   done
 };
@@ -611,12 +606,17 @@ stop_gjournal()
 } ;
 
 
-# Function to wipe the potential backup gpt table from a disk
-clear_backup_gpt_table()
+# Function to wipe the potential metadata from a disk
+wipe_metadata()
 {
-  echo_log "Clearing gpt backup table location on disk"
-  rc_nohalt "dd if=/dev/zero of=${1} bs=1m count=1"
-  rc_nohalt "dd if=/dev/zero of=${1} bs=1m oseek=`diskinfo ${1} | awk '{print int($3 / (1024*1024)) - 4;}'`"
+  echo_log "Wiping possible metadata on ${1}"
+  local SIZE="`diskinfo ${1} | awk '{print int($3/(1024*1024)) }'`"
+  if [ "$SIZE" -gt "5" ]  ; then
+    rc_halt "dd if=/dev/zero of=${1} bs=1m count=1"
+    rc_halt "dd if=/dev/zero of=${1} bs=1m oseek=$((SIZE-4))"
+  else
+    rc_halt "dd if=/dev/zero of=${1} bs=128k"
+  fi
 } ;
 
 # Function which runs gpart and creates a single large APM partition scheme
@@ -696,8 +696,7 @@ init_mbr_full_disk()
   rc_halt "gpart add -a 4k -t freebsd -i 1 ${_intDISK}"
   sleep 2
   
-  echo_log "Cleaning up ${_intDISK}s1"
-  rc_halt "dd if=/dev/zero of=${_intDISK}s1 count=1024"
+  wipe_metadata "${_intDISK}s1"
   
   # Make the partition active
   rc_halt "gpart set -a active -i 1 ${_intDISK}"
@@ -770,9 +769,7 @@ run_gpart_gpt_part()
   rc_halt "gpart modify -t freebsd -i ${slicenum} ${DISK}"
   sleep 2
 
-  # Clean up old partition
-  echo_log "Cleaning up $slice"
-  rc_halt "dd if=/dev/zero of=${DISK}p${slicenum} count=1024"
+  wipe_metadata "${slice}"
 
   sleep 4
 
@@ -830,9 +827,7 @@ run_gpart_slice()
   rc_halt "gpart modify -t freebsd -i ${slicenum} ${DISK}"
   sleep 2
 
-  # Clean up old partition
-  echo_log "Cleaning up $slice"
-  rc_halt "dd if=/dev/zero of=${DISK}s${slicenum} count=1024"
+  wipe_metadata "${slice}"
 
   sleep 1
 
@@ -883,9 +878,8 @@ run_gpart_free()
   echo_log "Running gpart on ${DISK}"
   rc_halt "gpart add -a 4k -t freebsd -i ${slicenum} ${DISK}"
   sleep 2
-  
-  echo_log "Cleaning up $slice"
-  rc_halt "dd if=/dev/zero of=${slice} count=1024"
+
+  wipe_metadata "${slice}"
 
   sleep 1
 


More information about the svn-src-head mailing list