This patch to pc-sysinstall allows the setting of a new config
variable for installation, which lets the user/front-end select between MBR or GPT partitioning schemes when doing a dedicated disk installation. PR: 149772 Submitted by: Kris Moore
This commit is contained in:
parent
924a3731d3
commit
683b191334
@ -406,6 +406,18 @@ setup_disk_slice()
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Check if we have a partscheme specified
|
||||||
|
echo $line | grep "^partscheme=" >/dev/null 2>/dev/null
|
||||||
|
if [ "$?" = "0" ] ; then
|
||||||
|
# Found a partscheme= entry, lets read / set it
|
||||||
|
get_value_from_string "${line}"
|
||||||
|
strip_white_space "$VAL"
|
||||||
|
PSCHEME="$VAL"
|
||||||
|
if [ "$PSCHEME" != "GPT" -a "$PSCHEME" != "MBR" ] ; then
|
||||||
|
exit_err "Unknown partition scheme: $PSCHEME"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
echo $line | grep "^bootManager=" >/dev/null 2>/dev/null
|
echo $line | grep "^bootManager=" >/dev/null 2>/dev/null
|
||||||
if [ "$?" = "0" ]
|
if [ "$?" = "0" ]
|
||||||
then
|
then
|
||||||
@ -422,8 +434,13 @@ setup_disk_slice()
|
|||||||
if [ ! -z "${DISK}" -a ! -z "${PTYPE}" ]
|
if [ ! -z "${DISK}" -a ! -z "${PTYPE}" ]
|
||||||
then
|
then
|
||||||
case ${PTYPE} in
|
case ${PTYPE} in
|
||||||
all|ALL) tmpSLICE="${DISK}p1"
|
all|ALL) if [ "$PSCHEME" = "MBR" -o -z "$PSCHEME" ] ; then
|
||||||
run_gpart_full "${DISK}" "${BMANAGER}" ;;
|
PSCHEME="MBR"
|
||||||
|
tmpSLICE="${DISK}s1"
|
||||||
|
else
|
||||||
|
tmpSLICE="${DISK}p1"
|
||||||
|
fi
|
||||||
|
run_gpart_full "${DISK}" "${BMANAGER}" "${PSCHEME}" ;;
|
||||||
s1|s2|s3|s4) tmpSLICE="${DISK}${PTYPE}"
|
s1|s2|s3|s4) tmpSLICE="${DISK}${PTYPE}"
|
||||||
# Get the number of the slice we are working on
|
# Get the number of the slice we are working on
|
||||||
s="`echo ${PTYPE} | awk '{print substr($0,length,1)}'`"
|
s="`echo ${PTYPE} | awk '{print substr($0,length,1)}'`"
|
||||||
@ -449,7 +466,7 @@ setup_disk_slice()
|
|||||||
|
|
||||||
|
|
||||||
# Increment our disk counter to look for next disk and unset
|
# Increment our disk counter to look for next disk and unset
|
||||||
unset BMANAGER PTYPE DISK MIRRORDISK MIRRORBAL
|
unset BMANAGER PTYPE DISK MIRRORDISK MIRRORBAL PSCHEME
|
||||||
disknum="`expr $disknum + 1`"
|
disknum="`expr $disknum + 1`"
|
||||||
else
|
else
|
||||||
exit_err "ERROR: commitDiskPart was called without procceding disk<num>= and partition= entries!!!"
|
exit_err "ERROR: commitDiskPart was called without procceding disk<num>= and partition= entries!!!"
|
||||||
@ -477,7 +494,7 @@ stop_gjournal() {
|
|||||||
fi
|
fi
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
# Function which runs gpart and creates a single large slice
|
# Function which runs gpart and creates a single large GPT partition scheme
|
||||||
init_gpt_full_disk()
|
init_gpt_full_disk()
|
||||||
{
|
{
|
||||||
_intDISK=$1
|
_intDISK=$1
|
||||||
@ -506,14 +523,82 @@ init_gpt_full_disk()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Function which runs gpart and creates a single large MBR partition scheme
|
||||||
|
init_mbr_full_disk()
|
||||||
|
{
|
||||||
|
_intDISK=$1
|
||||||
|
_intBOOT=$2
|
||||||
|
|
||||||
|
startblock="63"
|
||||||
|
|
||||||
|
# Set our sysctl so we can overwrite any geom using drives
|
||||||
|
sysctl kern.geom.debugflags=16 >>${LOGOUT} 2>>${LOGOUT}
|
||||||
|
|
||||||
|
# Stop any journaling
|
||||||
|
stop_gjournal "${_intDISK}"
|
||||||
|
|
||||||
|
# Remove any existing partitions
|
||||||
|
delete_all_gpart "${_intDISK}"
|
||||||
|
|
||||||
|
#Erase any existing bootloader
|
||||||
|
echo_log "Cleaning up ${_intDISK}"
|
||||||
|
rc_halt "dd if=/dev/zero of=/dev/${_intDISK} count=2048"
|
||||||
|
|
||||||
|
sleep 2
|
||||||
|
|
||||||
|
echo_log "Running gpart on ${_intDISK}"
|
||||||
|
rc_halt "gpart create -s mbr ${_intDISK}"
|
||||||
|
|
||||||
|
# Lets figure out disk size in blocks
|
||||||
|
# Get the cyl of this disk
|
||||||
|
get_disk_cyl "${_intDISK}"
|
||||||
|
cyl="${VAL}"
|
||||||
|
|
||||||
|
# Get the heads of this disk
|
||||||
|
get_disk_heads "${_intDISK}"
|
||||||
|
head="${VAL}"
|
||||||
|
|
||||||
|
# Get the tracks/sectors of this disk
|
||||||
|
get_disk_sectors "${_intDISK}"
|
||||||
|
sec="${VAL}"
|
||||||
|
|
||||||
|
# Multiply them all together to get our total blocks
|
||||||
|
totalblocks="`expr ${cyl} \* ${head}`"
|
||||||
|
totalblocks="`expr ${totalblocks} \* ${sec}`"
|
||||||
|
|
||||||
|
|
||||||
|
# Now set the ending block to the total disk block size
|
||||||
|
sizeblock="`expr ${totalblocks} - ${startblock}`"
|
||||||
|
|
||||||
|
# Install new partition setup
|
||||||
|
echo_log "Running gpart add on ${_intDISK}"
|
||||||
|
rc_halt "gpart add -b ${startblock} -s ${sizeblock} -t freebsd -i 1 ${_intDISK}"
|
||||||
|
sleep 2
|
||||||
|
|
||||||
|
echo_log "Cleaning up ${_intDISK}s1"
|
||||||
|
rc_halt "dd if=/dev/zero of=/dev/${_intDISK}s1 count=1024"
|
||||||
|
|
||||||
|
if [ "$_intBOOT" = "bsd" ] ; then
|
||||||
|
echo_log "Stamping boot sector on ${_intDISK}"
|
||||||
|
rc_halt "gpart bootcode -b /boot/boot0 ${_intDISK}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
# Function which runs gpart and creates a single large slice
|
# Function which runs gpart and creates a single large slice
|
||||||
run_gpart_full()
|
run_gpart_full()
|
||||||
{
|
{
|
||||||
DISK=$1
|
DISK=$1
|
||||||
|
BOOT=$2
|
||||||
|
SCHEME=$3
|
||||||
|
|
||||||
init_gpt_full_disk "$DISK"
|
if [ "$SCHEME" = "MBR" ] ; then
|
||||||
|
init_mbr_full_disk "$DISK" "$BOOT"
|
||||||
slice="${DISK}-1-gpt"
|
slice="${DISK}-1-mbr"
|
||||||
|
else
|
||||||
|
init_gpt_full_disk "$DISK"
|
||||||
|
slice="${DISK}-1-gpt"
|
||||||
|
fi
|
||||||
|
|
||||||
# Lets save our slice, so we know what to look for in the config file later on
|
# Lets save our slice, so we know what to look for in the config file later on
|
||||||
if [ -z "$WORKINGSLICES" ]
|
if [ -z "$WORKINGSLICES" ]
|
||||||
|
@ -128,6 +128,11 @@ Setting this to "s1, s2, s3 or s4" will use the specified MBR slice
|
|||||||
|
|
||||||
(This tag is unused for upgrades)
|
(This tag is unused for upgrades)
|
||||||
|
|
||||||
|
# partscheme=(MBR/GPT)
|
||||||
|
|
||||||
|
When performing a "full" disk (partition=all), the partscheme= variable is used
|
||||||
|
to determine the partition scheme type gpart will be using on the disk. Valid
|
||||||
|
choices are MBR or GPT.
|
||||||
|
|
||||||
# mirror=(disk device such as ad1)
|
# mirror=(disk device such as ad1)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user