Add the ability to use a varity of ZFS dataset options.
While here fix a bug causing zpools with /tmp mount-points to fail Submitted by: kris Obtained from: PC-BSD
This commit is contained in:
parent
af131fb089
commit
17cc933ec0
@ -50,14 +50,14 @@ get_fs_line_xvars()
|
||||
ACTIVEDEV="${1}"
|
||||
LINE="${2}"
|
||||
|
||||
echo $LINE | grep -q ' (' 2>/dev/null
|
||||
echo $LINE | cut -d ' ' -f 4 | grep -q ' (' 2>/dev/null
|
||||
if [ $? -eq 0 ] ; then
|
||||
|
||||
# See if we are looking for ZFS specific options
|
||||
echo $LINE | grep -q '^ZFS' 2>/dev/null
|
||||
if [ $? -eq 0 ] ; then
|
||||
ZTYPE="NONE"
|
||||
ZFSVARS="`echo $LINE | cut -d '(' -f 2- | cut -d ')' -f 1 | xargs`"
|
||||
ZFSVARS="`echo $LINE | cut -d ' ' -f 4 |cut -d '(' -f 2- | cut -d ')' -f 1 | xargs`"
|
||||
|
||||
echo $ZFSVARS | grep -qE "^(disk|file|mirror|raidz(1|2|3)?|spare|log|cache):" 2>/dev/null
|
||||
if [ $? -eq 0 ] ; then
|
||||
@ -126,9 +126,9 @@ gen_glabel_name()
|
||||
NUM="0"
|
||||
MAXNUM="20"
|
||||
|
||||
# Check if we are doing /, and rename it
|
||||
if [ "$MOUNT" = "/" ]
|
||||
then
|
||||
if [ "$TYPE" = "ZFS" ] ; then
|
||||
NAME="zpool"
|
||||
elif [ "$MOUNT" = "/" ] ; then
|
||||
NAME="rootfs"
|
||||
else
|
||||
# If doing a swap partition, also rename it
|
||||
@ -341,7 +341,7 @@ setup_gpart_partitions()
|
||||
# Save this data to our partition config dir
|
||||
if [ "${_pType}" = "gpt" ] ; then
|
||||
_dFile="`echo $_pDisk | sed 's|/|-|g'`"
|
||||
echo "${FS}:${MNT}:${ENC}:${PLABEL}:GPT:${XTRAOPTS}" >${PARTDIR}/${_dFile}p${CURPART}
|
||||
echo "${FS}#${MNT}#${ENC}#${PLABEL}#GPT#${XTRAOPTS}" >${PARTDIR}/${_dFile}p${CURPART}
|
||||
|
||||
# Clear out any headers
|
||||
sleep 2
|
||||
@ -354,7 +354,7 @@ setup_gpart_partitions()
|
||||
else
|
||||
# MBR Partition or GPT slice
|
||||
_dFile="`echo $_wSlice | sed 's|/|-|g'`"
|
||||
echo "${FS}:${MNT}:${ENC}:${PLABEL}:MBR:${XTRAOPTS}:${IMAGE}" >${PARTDIR}/${_dFile}${PARTLETTER}
|
||||
echo "${FS}#${MNT}#${ENC}#${PLABEL}#MBR#${XTRAOPTS}#${IMAGE}" >${PARTDIR}/${_dFile}${PARTLETTER}
|
||||
# Clear out any headers
|
||||
sleep 2
|
||||
dd if=/dev/zero of=${_wSlice}${PARTLETTER} count=2048 2>/dev/null
|
||||
@ -409,7 +409,7 @@ setup_gpart_partitions()
|
||||
fi
|
||||
|
||||
# Found our flag to commit this label setup, check that we found at least 1 partition
|
||||
if [ "${CURPART}" = "2" ] ; then
|
||||
if [ "${CURPART}" = "1" ] ; then
|
||||
exit_err "ERROR: commitDiskLabel was called without any partition entries for it!"
|
||||
fi
|
||||
|
||||
|
@ -34,8 +34,8 @@ zfs_cleanup_unmount()
|
||||
for PART in `ls ${PARTDIR}`
|
||||
do
|
||||
PARTDEV=`echo $PART | sed 's|-|/|g'`
|
||||
PARTFS="`cat ${PARTDIR}/${PART} | cut -d ':' -f 1`"
|
||||
PARTMNT="`cat ${PARTDIR}/${PART} | cut -d ':' -f 2`"
|
||||
PARTFS="`cat ${PARTDIR}/${PART} | cut -d '#' -f 1`"
|
||||
PARTMNT="`cat ${PARTDIR}/${PART} | cut -d '#' -f 2`"
|
||||
ZPOOLNAME=$(get_zpool_name "${PARTDEV}")
|
||||
|
||||
if [ "$PARTFS" = "ZFS" ]
|
||||
@ -84,9 +84,9 @@ zfs_cleanup_unmount()
|
||||
for PART in `ls ${PARTDIR}`
|
||||
do
|
||||
PARTDEV=`echo $PART | sed 's|-|/|g'`
|
||||
PARTFS="`cat ${PARTDIR}/${PART} | cut -d ':' -f 1`"
|
||||
PARTMNT="`cat ${PARTDIR}/${PART} | cut -d ':' -f 2`"
|
||||
PARTENC="`cat ${PARTDIR}/${PART} | cut -d ':' -f 3`"
|
||||
PARTFS="`cat ${PARTDIR}/${PART} | cut -d '#' -f 1`"
|
||||
PARTMNT="`cat ${PARTDIR}/${PART} | cut -d '#' -f 2`"
|
||||
PARTENC="`cat ${PARTDIR}/${PART} | cut -d '#' -f 3`"
|
||||
ZPOOLNAME=$(get_zpool_name "${PARTDEV}")
|
||||
|
||||
if [ "$PARTFS" = "ZFS" ]
|
||||
@ -101,17 +101,20 @@ zfs_cleanup_unmount()
|
||||
# Check if we have multiple zfs mounts specified
|
||||
for ZMNT in `echo ${PARTMNT} | sed 's|,| |g'`
|
||||
do
|
||||
ZMNT="`echo $ZMNT | cut -d '(' -f 1`"
|
||||
PARTMNTREV="${ZMNT} ${PARTMNTREV}"
|
||||
done
|
||||
|
||||
for ZMNT in ${PARTMNTREV}
|
||||
do
|
||||
if [ "${ZMNT}" != "/" ]
|
||||
then
|
||||
rc_halt "zfs set mountpoint=${ZMNT} ${ZPOOLNAME}${ZMNT}"
|
||||
if [ "${ZMNT}" = "/" ] ; then continue ; fi
|
||||
# Some ZFS like /swap aren't mounted, and dont need unmounting
|
||||
mount | grep -q "${FSMNT}${ZMNT}"
|
||||
if [ $? -eq 0 ] ; then
|
||||
rc_halt "zfs unmount ${ZPOOLNAME}${ZMNT}"
|
||||
sleep 2
|
||||
rc_halt "zfs set mountpoint=${ZMNT} ${ZPOOLNAME}${ZMNT}"
|
||||
fi
|
||||
sleep 2
|
||||
done
|
||||
fi
|
||||
done
|
||||
@ -154,10 +157,10 @@ setup_fstab()
|
||||
for PART in `ls ${PARTDIR}`
|
||||
do
|
||||
PARTDEV=`echo $PART | sed 's|-|/|g'`
|
||||
PARTFS="`cat ${PARTDIR}/${PART} | cut -d ':' -f 1`"
|
||||
PARTMNT="`cat ${PARTDIR}/${PART} | cut -d ':' -f 2`"
|
||||
PARTENC="`cat ${PARTDIR}/${PART} | cut -d ':' -f 3`"
|
||||
PARTLABEL="`cat ${PARTDIR}/${PART} | cut -d ':' -f 4`"
|
||||
PARTFS="`cat ${PARTDIR}/${PART} | cut -d '#' -f 1`"
|
||||
PARTMNT="`cat ${PARTDIR}/${PART} | cut -d '#' -f 2`"
|
||||
PARTENC="`cat ${PARTDIR}/${PART} | cut -d '#' -f 3`"
|
||||
PARTLABEL="`cat ${PARTDIR}/${PART} | cut -d '#' -f 4`"
|
||||
|
||||
# Unset EXT
|
||||
EXT=""
|
||||
|
@ -57,24 +57,52 @@ mount_partition()
|
||||
# Check if we have multiple zfs mounts specified
|
||||
for ZMNT in `echo ${MNTPOINT} | sed 's|,| |g'`
|
||||
do
|
||||
# Check for any ZFS specific mount options
|
||||
ZMNTOPTS="`echo $ZMNT | cut -d '(' -f 2 | cut -d ')' -f 1`"
|
||||
if [ "$ZMNTOPTS" = "$ZMNT" ] ; then ZMNTOPTS="" ; fi
|
||||
|
||||
# Reset ZMNT with options removed
|
||||
ZMNT="`echo $ZMNT | cut -d '(' -f 1`"
|
||||
|
||||
# First make sure we create the mount point
|
||||
if [ ! -d "${FSMNT}${ZMNT}" ] ; then
|
||||
mkdir -p ${FSMNT}${ZMNT} >>${LOGOUT} 2>>${LOGOUT}
|
||||
fi
|
||||
|
||||
# Check for any volsize args
|
||||
zcopt=""
|
||||
for ZOPT in `echo $ZMNTOPTS | sed 's/|/ /g'`
|
||||
do
|
||||
echo "$ZOPT" | grep -q volsize
|
||||
if [ $? -eq 0 ] ; then
|
||||
volsize=`echo $ZOPT | cut -d '=' -f 2`
|
||||
zcopt="-V $volsize"
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "${ZMNT}" = "/" ] ; then
|
||||
ZNAME=""
|
||||
else
|
||||
ZNAME="${ZMNT}"
|
||||
echo_log "zfs create -p ${ZPOOLNAME}${ZNAME}"
|
||||
rc_halt "zfs create -p ${ZPOOLNAME}${ZNAME}"
|
||||
echo_log "zfs create $zcopt -p ${ZPOOLNAME}${ZNAME}"
|
||||
rc_halt "zfs create $zcopt -p ${ZPOOLNAME}${ZNAME}"
|
||||
fi
|
||||
sleep 2
|
||||
rc_halt "zfs set mountpoint=${FSMNT}${ZNAME} ${ZPOOLNAME}${ZNAME}"
|
||||
if [ -z "$zcopt" ] ; then
|
||||
rc_halt "zfs set mountpoint=${FSMNT}${ZNAME} ${ZPOOLNAME}${ZNAME}"
|
||||
fi
|
||||
|
||||
# Disable atime for this zfs partition, speed increase
|
||||
rc_nohalt "zfs set atime=off ${ZPOOLNAME}${ZNAME}"
|
||||
done
|
||||
# If no ZFS options, we can skip
|
||||
if [ -z "$ZMNTOPTS" ] ; then continue ; fi
|
||||
|
||||
# Parse any ZFS options now
|
||||
for ZOPT in `echo $ZMNTOPTS | sed 's/|/ /g'`
|
||||
do
|
||||
echo "$ZOPT" | grep -q volsize
|
||||
if [ $? -eq 0 ] ; then continue ; fi
|
||||
rc_halt "zfs set $ZOPT ${ZPOOLNAME}${ZNAME}"
|
||||
done
|
||||
done # End of adding ZFS mounts
|
||||
|
||||
else
|
||||
# If we are not on ZFS, lets do the mount now
|
||||
@ -107,9 +135,9 @@ mount_all_filesystems()
|
||||
exit_err "ERROR: The partition ${PARTDEV} does not exist. Failure in bsdlabel?"
|
||||
fi
|
||||
|
||||
PARTFS="`cat ${PARTDIR}/${PART} | cut -d ':' -f 1`"
|
||||
PARTMNT="`cat ${PARTDIR}/${PART} | cut -d ':' -f 2`"
|
||||
PARTENC="`cat ${PARTDIR}/${PART} | cut -d ':' -f 3`"
|
||||
PARTFS="`cat ${PARTDIR}/${PART} | cut -d '#' -f 1`"
|
||||
PARTMNT="`cat ${PARTDIR}/${PART} | cut -d '#' -f 2`"
|
||||
PARTENC="`cat ${PARTDIR}/${PART} | cut -d '#' -f 3`"
|
||||
|
||||
if [ "${PARTENC}" = "ON" ]
|
||||
then
|
||||
@ -144,9 +172,9 @@ mount_all_filesystems()
|
||||
exit_err "ERROR: The partition ${PARTDEV} does not exist. Failure in bsdlabel?"
|
||||
fi
|
||||
|
||||
PARTFS="`cat ${PARTDIR}/${PART} | cut -d ':' -f 1`"
|
||||
PARTMNT="`cat ${PARTDIR}/${PART} | cut -d ':' -f 2`"
|
||||
PARTENC="`cat ${PARTDIR}/${PART} | cut -d ':' -f 3`"
|
||||
PARTFS="`cat ${PARTDIR}/${PART} | cut -d '#' -f 1`"
|
||||
PARTMNT="`cat ${PARTDIR}/${PART} | cut -d '#' -f 2`"
|
||||
PARTENC="`cat ${PARTDIR}/${PART} | cut -d '#' -f 3`"
|
||||
|
||||
if [ "${PARTENC}" = "ON" ]
|
||||
then
|
||||
|
@ -95,13 +95,13 @@ setup_filesystems()
|
||||
exit_err "ERROR: The partition ${PARTDEV} does not exist. Failure in bsdlabel?"
|
||||
fi
|
||||
|
||||
PARTFS="`cat ${PARTDIR}/${PART} | cut -d ':' -f 1`"
|
||||
PARTMNT="`cat ${PARTDIR}/${PART} | cut -d ':' -f 2`"
|
||||
PARTENC="`cat ${PARTDIR}/${PART} | cut -d ':' -f 3`"
|
||||
PARTLABEL="`cat ${PARTDIR}/${PART} | cut -d ':' -f 4`"
|
||||
PARTGEOM="`cat ${PARTDIR}/${PART} | cut -d ':' -f 5`"
|
||||
PARTXTRAOPTS="`cat ${PARTDIR}/${PART} | cut -d ':' -f 6`"
|
||||
PARTIMAGE="`cat ${PARTDIR}/${PART} | cut -d ':' -f 7`"
|
||||
PARTFS="`cat ${PARTDIR}/${PART} | cut -d '#' -f 1`"
|
||||
PARTMNT="`cat ${PARTDIR}/${PART} | cut -d '#' -f 2`"
|
||||
PARTENC="`cat ${PARTDIR}/${PART} | cut -d '#' -f 3`"
|
||||
PARTLABEL="`cat ${PARTDIR}/${PART} | cut -d '#' -f 4`"
|
||||
PARTGEOM="`cat ${PARTDIR}/${PART} | cut -d '#' -f 5`"
|
||||
PARTXTRAOPTS="`cat ${PARTDIR}/${PART} | cut -d '#' -f 6`"
|
||||
PARTIMAGE="`cat ${PARTDIR}/${PART} | cut -d '#' -f 7`"
|
||||
|
||||
# Make sure journaling isn't enabled on this device
|
||||
if [ -e "${PARTDEV}.journal" ]
|
||||
|
@ -72,10 +72,10 @@ unmount_all_filesystems()
|
||||
for PART in `ls ${PARTDIR}`
|
||||
do
|
||||
PARTDEV=`echo $PART | sed 's|-|/|g'`
|
||||
PARTFS="`cat ${PARTDIR}/${PART} | cut -d ':' -f 1`"
|
||||
PARTMNT="`cat ${PARTDIR}/${PART} | cut -d ':' -f 2`"
|
||||
PARTENC="`cat ${PARTDIR}/${PART} | cut -d ':' -f 3`"
|
||||
PARTLABEL="`cat ${PARTDIR}/${PART} | cut -d ':' -f 4`"
|
||||
PARTFS="`cat ${PARTDIR}/${PART} | cut -d '#' -f 1`"
|
||||
PARTMNT="`cat ${PARTDIR}/${PART} | cut -d '#' -f 2`"
|
||||
PARTENC="`cat ${PARTDIR}/${PART} | cut -d '#' -f 3`"
|
||||
PARTLABEL="`cat ${PARTDIR}/${PART} | cut -d '#' -f 4`"
|
||||
|
||||
if [ "${PARTENC}" = "ON" ]
|
||||
then
|
||||
@ -168,9 +168,9 @@ unmount_all_filesystems_failure()
|
||||
for PART in `ls ${PARTDIR}`
|
||||
do
|
||||
PARTDEV=`echo $PART | sed 's|-|/|g'`
|
||||
PARTFS="`cat ${PARTDIR}/${PART} | cut -d ':' -f 1`"
|
||||
PARTMNT="`cat ${PARTDIR}/${PART} | cut -d ':' -f 2`"
|
||||
PARTENC="`cat ${PARTDIR}/${PART} | cut -d ':' -f 3`"
|
||||
PARTFS="`cat ${PARTDIR}/${PART} | cut -d '#' -f 1`"
|
||||
PARTMNT="`cat ${PARTDIR}/${PART} | cut -d '#' -f 2`"
|
||||
PARTENC="`cat ${PARTDIR}/${PART} | cut -d '#' -f 3`"
|
||||
|
||||
if [ "${PARTFS}" = "SWAP" ]
|
||||
then
|
||||
|
Loading…
Reference in New Issue
Block a user