fix remove beName@snapshot, fix create beName@snapshot, fix create -e beName@snapshot beName, implement rename origBeName newBeName
This commit is contained in:
parent
3701f893d5
commit
e4513d149e
52
beadm
52
beadm
|
|
@ -1,4 +1,4 @@
|
||||||
#!/bin/sh
|
#!/bin/sh -e
|
||||||
|
|
||||||
# Copyright 2012 Slawomir Wojciech Wojtczak (vermaden). All rights reserved.
|
# Copyright 2012 Slawomir Wojciech Wojtczak (vermaden). All rights reserved.
|
||||||
# Copyright 2012 Bryan Drewery (bdrewery). All rights reserved.
|
# Copyright 2012 Bryan Drewery (bdrewery). All rights reserved.
|
||||||
|
|
@ -32,7 +32,7 @@ then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
__usage() {
|
__usage() {
|
||||||
NAME=${0##*/}
|
local NAME=${0##*/}
|
||||||
echo "usage:"
|
echo "usage:"
|
||||||
echo " ${NAME} subcommand cmd_options"
|
echo " ${NAME} subcommand cmd_options"
|
||||||
echo
|
echo
|
||||||
|
|
@ -44,6 +44,7 @@ __usage() {
|
||||||
echo " ${NAME} destroy beName"
|
echo " ${NAME} destroy beName"
|
||||||
echo " ${NAME} destroy beName@snapshot"
|
echo " ${NAME} destroy beName@snapshot"
|
||||||
echo " ${NAME} list"
|
echo " ${NAME} list"
|
||||||
|
echo " ${NAME} rename origBeName newBeName"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -60,13 +61,23 @@ __be_snapshot() { # 1=DATASET/SNAPSHOT
|
||||||
}
|
}
|
||||||
|
|
||||||
__be_new() { # 1=SOURCE 2=TARGET
|
__be_new() { # 1=SOURCE 2=TARGET
|
||||||
|
local SOURCE=$( echo ${1} | cut -d '@' -f 1 )
|
||||||
if __be_snapshot ${1}
|
if __be_snapshot ${1}
|
||||||
then
|
then
|
||||||
zfs clone ${1} ${2}
|
local SNAPSHOT=$( echo ${1} | cut -d '@' -f 2 )
|
||||||
|
zfs list -r -H -t filesystem -o name ${SOURCE} \
|
||||||
|
| while read FS
|
||||||
|
do
|
||||||
|
if ! zfs list -H -o name ${FS}@${SNAPSHOT} 1> /dev/null 2> /dev/null
|
||||||
|
then
|
||||||
|
echo "ERROR: Child snapshot '${FS}@${SNAPSHOT}' does not exists"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
else
|
else
|
||||||
if zfs list -H -o name ${1}@${2##*/} 1> /dev/null 2> /dev/null
|
if zfs list -H -o name ${1}@${2##*/} 1> /dev/null 2> /dev/null
|
||||||
then
|
then
|
||||||
echo "ERROR: Snapshot '${1}@${2##*/}' exists"
|
echo "ERROR: Snapshot '${1}@${2##*/}' already exists"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
if ! zfs snapshot -r ${1}@${2##*/} 1> /dev/null 2> /dev/null
|
if ! zfs snapshot -r ${1}@${2##*/} 1> /dev/null 2> /dev/null
|
||||||
|
|
@ -75,24 +86,22 @@ __be_new() { # 1=SOURCE 2=TARGET
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
zfs list -H -o name -t filesystem -r ${1} \
|
zfs list -H -o name -r ${SOURCE} \
|
||||||
| while read FS
|
| while read FS
|
||||||
do
|
do
|
||||||
OPTS=""
|
local OPTS=""
|
||||||
while read NAME PROPERTY VALUE SOURCE
|
while read NAME PROPERTY VALUE
|
||||||
do
|
do
|
||||||
OPTS="-o ${PROPERTY}=${VALUE} ${OPTS}"
|
local OPTS="-o ${PROPERTY}=${VALUE} ${OPTS}"
|
||||||
done << EOF
|
done << EOF
|
||||||
$( zfs get -s local -H all ${FS} | grep -v -E "(canmount)" )
|
$( zfs get -o name,property,value -s local -H all ${FS} | grep -v -E "(canmount)" )
|
||||||
EOF
|
EOF
|
||||||
SOURCE=${1##*/}
|
DATASET=$( echo ${FS} | awk '{print $1}' | sed -E s/"^${POOL}\/ROOT\/${SOURCE##*/}"/"${POOL}\/ROOT\/${2##*/}"/g )
|
||||||
TARGET=${2##*/}
|
|
||||||
DATASET=$( echo ${FS} | awk '{print $1}' | sed -E s/"^${POOL}\/ROOT\/${SOURCE}"/"${POOL}\/ROOT\/${TARGET}"/g )
|
|
||||||
if [ "${OPTS}" = "-o = " ]
|
if [ "${OPTS}" = "-o = " ]
|
||||||
then
|
then
|
||||||
OPTS=""
|
local OPTS=""
|
||||||
fi
|
fi
|
||||||
zfs clone -o canmount=off ${OPTS} ${FS}@${2##*/} ${DATASET}
|
zfs clone -o canmount=off ${OPTS} ${FS}@${SNAPSHOT} ${DATASET}
|
||||||
done
|
done
|
||||||
echo "Created successfully"
|
echo "Created successfully"
|
||||||
}
|
}
|
||||||
|
|
@ -170,7 +179,7 @@ case ${1} in
|
||||||
(2)
|
(2)
|
||||||
if __be_snapshot ${2}
|
if __be_snapshot ${2}
|
||||||
then
|
then
|
||||||
if zfs snapshot ${POOL}/ROOT/${2} 2> /dev/null
|
if ! zfs snapshot -r ${POOL}/ROOT/${2} 2> /dev/null
|
||||||
then
|
then
|
||||||
echo "ERROR: Cannot create '${2}' snapshot"
|
echo "ERROR: Cannot create '${2}' snapshot"
|
||||||
exit 1
|
exit 1
|
||||||
|
|
@ -269,7 +278,7 @@ EOF
|
||||||
(Y|y|[Yy][Ee][Ss])
|
(Y|y|[Yy][Ee][Ss])
|
||||||
if __be_snapshot ${POOL}/ROOT/${2}
|
if __be_snapshot ${POOL}/ROOT/${2}
|
||||||
then
|
then
|
||||||
if ! zfs destroy ${POOL}/ROOT/${2} 1> /dev/null 2> /dev/null
|
if ! zfs destroy -r ${POOL}/ROOT/${2} 1> /dev/null 2> /dev/null
|
||||||
then
|
then
|
||||||
echo "ERROR: Snapshot '${2}' is origin for other boot environment(s)"
|
echo "ERROR: Snapshot '${2}' is origin for other boot environment(s)"
|
||||||
exit 1
|
exit 1
|
||||||
|
|
@ -303,6 +312,17 @@ EOF
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
(rename) # ------------------------------------------------------------------
|
||||||
|
__be_exist ${POOL}/ROOT/${2}
|
||||||
|
if zfs list -H -o name ${POOL}/ROOT/${3} 2> /dev/null
|
||||||
|
then
|
||||||
|
echo "ERROR: Boot environment '${3}' already exists"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
zfs rename ${POOL}/ROOT/${2} ${POOL}/ROOT/${3}
|
||||||
|
echo "Renamed successfully"
|
||||||
|
;;
|
||||||
|
|
||||||
(*) # -----------------------------------------------------------------------
|
(*) # -----------------------------------------------------------------------
|
||||||
__usage
|
__usage
|
||||||
;;
|
;;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue