tape-admin: new functionality, version bump
* get_mediapool_name(): extract mediapool for given volume_name * ltfs_reformat(): wipe given volume_name and remaster for LTFS * media_change(): update lastwrite date for new volume_name * mtx_unload(): write only once to ERRFILE * parse_params(): update for given new functionality, reorder * prepare options for remote calls (ssh) * typo updates Signed-off-by: Ralf Zerres <ralf.zerres@networkx.de>
This commit is contained in:
778
bin/tape-admin
778
bin/tape-admin
@@ -22,7 +22,7 @@
|
|||||||
# Helper routines for tape handling
|
# Helper routines for tape handling
|
||||||
|
|
||||||
progname="${0##*/}"
|
progname="${0##*/}"
|
||||||
version="0.0.8"
|
version="0.0.9"
|
||||||
|
|
||||||
# global variables
|
# global variables
|
||||||
color=0
|
color=0
|
||||||
@@ -216,7 +216,7 @@ get_lastwrite () {
|
|||||||
if [ ${#volume_lastwrite} -gt 1 ]; then
|
if [ ${#volume_lastwrite} -gt 1 ]; then
|
||||||
volume_lastwrite=$(echo $volume_lastwrite | sed -e 's/"//g')
|
volume_lastwrite=$(echo $volume_lastwrite | sed -e 's/"//g')
|
||||||
if [ $verbose -ge 3 ]; then
|
if [ $verbose -ge 3 ]; then
|
||||||
printf "${MAGENTA}volume_lastwrite for for volume ${GREEN}'%s'${MAGENTA} in media-pool ${GREEN}'%s'${MAGENTA} is: ${NO_COLOR}%s${NO_COLOR}\n" \
|
printf "${MAGENTA}volume_lastwrite for volume ${GREEN}'%s'${MAGENTA} in media-pool ${GREEN}'%s'${MAGENTA} is: ${NO_COLOR}%s${NO_COLOR}\n" \
|
||||||
"$volume_name" "$mediapool_name" "$volume_lastwrite"
|
"$volume_name" "$mediapool_name" "$volume_lastwrite"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
@@ -256,6 +256,38 @@ get_mediapolicy () {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get_mediapool_name () {
|
||||||
|
local mediapools_json=${mediapools:-$mediapools_json}
|
||||||
|
local volume_name=${1}
|
||||||
|
|
||||||
|
if [ $verbose -ge 1 ]; then
|
||||||
|
printf "${BLUE}get_mediapool_name...${NO_COLOR}\n"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test ! -r ${mediapools_json}; then
|
||||||
|
if [ $verbose -ge 1 ]; then
|
||||||
|
printf "${RED}Error:${MAGENTA} media-pool file ${GREEN}'%s'${MAGENTA} can't be opend!${NO_COLOR}\n" \
|
||||||
|
"$mediapools_json"
|
||||||
|
fi
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
cmd="jq --monochrome-output --ascii-output ' .MediaPool[] \
|
||||||
|
| .Name as \$MediaPoolName \
|
||||||
|
| .Member[].VolumeName \
|
||||||
|
| select(. == \"${volume_name}\") \
|
||||||
|
| \$MediaPoolName'
|
||||||
|
${mediapools_json}"
|
||||||
|
|
||||||
|
mediapool_name=$(eval $cmd)
|
||||||
|
mediapool_name=$(echo $mediapool_name | sed -e 's/"//g')
|
||||||
|
|
||||||
|
if [ $verbose -ge 3 ]; then
|
||||||
|
printf "${MAGENTA}Media-pool name for VolumeName %s: ${GREEN}'%s'${NO_COLOR}\n" \
|
||||||
|
"$volume_name" "$mediapool_name"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
get_mediapool_names () {
|
get_mediapool_names () {
|
||||||
local mediapools_json=${mediapools:-$mediapools_json}
|
local mediapools_json=${mediapools:-$mediapools_json}
|
||||||
#local mediapool_name=${1}
|
#local mediapool_name=${1}
|
||||||
@@ -341,7 +373,6 @@ get_poolmember () {
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
#cmd="jq --monochrome-output --join-output --ascii-output '.MediaPool[] \
|
|
||||||
cmd="jq --monochrome-output --ascii-output '.MediaPool[] \
|
cmd="jq --monochrome-output --ascii-output '.MediaPool[] \
|
||||||
| select(.Name == \"${mediapool_name}\") \
|
| select(.Name == \"${mediapool_name}\") \
|
||||||
| .Member[].VolumeName' \
|
| .Member[].VolumeName' \
|
||||||
@@ -545,7 +576,7 @@ ltfs_is_mounted () {
|
|||||||
ltfs_devname=$(findmnt -n -T $ltfs_mountpoint -o source | awk -F ':' '{print $2}')
|
ltfs_devname=$(findmnt -n -T $ltfs_mountpoint -o source | awk -F ':' '{print $2}')
|
||||||
if [ ${#ltfs_devname} -gt 1 ]; then
|
if [ ${#ltfs_devname} -gt 1 ]; then
|
||||||
if [ $verbose -ge 2 ]; then
|
if [ $verbose -ge 2 ]; then
|
||||||
printf "${MAGENTA}LTFS tape mounted via ${GREEN}'%s'${MAGENTA} at ${GREEN}'%s'${NO_COLOR}\n" \
|
printf "${MAGENTA}LTFS tape is mounted via ${GREEN}'%s'${MAGENTA} at ${GREEN}'%s'${NO_COLOR}\n" \
|
||||||
"$ltfs_devname" "$ltfs_mountpoint"
|
"$ltfs_devname" "$ltfs_mountpoint"
|
||||||
fi
|
fi
|
||||||
return 0
|
return 0
|
||||||
@@ -600,6 +631,71 @@ ltfs_mount () {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ltfs_reformat () {
|
||||||
|
local volume_name=${1}
|
||||||
|
|
||||||
|
if [ $verbose -ge 1 ]; then
|
||||||
|
printf "${BLUE}ltfs_reformat...${NO_COLOR}\n"
|
||||||
|
fi
|
||||||
|
|
||||||
|
ltfs_is_mounted
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
if [ $verbose -ge 2 ]; then
|
||||||
|
printf "${MAGENTA}LTFS tape ${GREEN}'%s'${MAGENTA} is mounted to ${GREEN}'%s'${NO_COLOR}\n" \
|
||||||
|
"$ltfs_devname" "$ltfs_mountpoint"
|
||||||
|
fi
|
||||||
|
slot_source="0"
|
||||||
|
mtx_getlabel $slot_source
|
||||||
|
if [ ${#volume_name} -gt 0 ] && [ $volume_name_active != $volume_name ]; then
|
||||||
|
get_mediapool_name $volume_name
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
ltfs_umount
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
mtx_unload
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
mount_tape "${mediapool_name}" "${volume_name}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if [ ! -d $ltfs_mountpoint ]; then
|
||||||
|
mkdir -p $ltfs_mountpoint
|
||||||
|
fi
|
||||||
|
make_err_file
|
||||||
|
if [ $verbose -ge 2 ]; then
|
||||||
|
printf "${MAGENTA}LTFS mounting tape ${GREEN}'%s'${MAGENTA} to ${GREEN}'%s'${NO_COLOR}\n" \
|
||||||
|
"$ltfs_devname" "$ltfs_mountpoint"
|
||||||
|
${LTFS} -o devname=$ltfs_devname -o verbose=$verbose $ltfs_mountpoint 1>/dev/null 2>${ERRFILE}
|
||||||
|
else
|
||||||
|
${LTFS} -o devname=$ltfs_devname -o verbose=0 $ltfs_mountpoint 1>/dev/null 2>${ERRFILE}
|
||||||
|
fi
|
||||||
|
if [ $? -ge 0 ]; then
|
||||||
|
if [ -z $volume_name_active ]; then
|
||||||
|
slot_source="0"
|
||||||
|
mtx_getlabel $slot_source
|
||||||
|
fi
|
||||||
|
need_format=$(grep "medium is not partitioned" ${ERRFILE})
|
||||||
|
rm -f ${ERRFILE}
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ${#volume_name} -eq 0 ] || [ $volume_name_active = $volume_name ]; then
|
||||||
|
tape_id=$(echo $volume_name_active | sed -e 's/\([[:alpha:]]*-\)//g')
|
||||||
|
# tape_id needs to be exactly 6 character long
|
||||||
|
volume_serial=$(printf "%0.s0" $(seq 1 $((6 - ${#tape_id}))))
|
||||||
|
volume_serial="${volume_serial}${tape_id}"
|
||||||
|
if [ ${#need_format} -ge 1 ]; then
|
||||||
|
ltfs_format ${volume_name_active} ${volume_serial}
|
||||||
|
else
|
||||||
|
ltfs_wipe
|
||||||
|
ltfs_format ${volume_name_active} ${volume_serial}
|
||||||
|
fi
|
||||||
|
ltfs_mount
|
||||||
|
fi
|
||||||
|
return $?
|
||||||
|
}
|
||||||
|
|
||||||
ltfs_umount () {
|
ltfs_umount () {
|
||||||
if [ $verbose -ge 1 ]; then
|
if [ $verbose -ge 1 ]; then
|
||||||
printf "${BLUE}ltfs_umount...${NO_COLOR}\n"
|
printf "${BLUE}ltfs_umount...${NO_COLOR}\n"
|
||||||
@@ -608,11 +704,16 @@ ltfs_umount () {
|
|||||||
|
|
||||||
ltfs_is_mounted
|
ltfs_is_mounted
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
|
|
||||||
|
if [ $verbose -ge 3 ]; then
|
||||||
|
printf "${MAGENTA}unmounting LTFS tape ${GREEN}'%s'${NO_COLOR}.\n" \
|
||||||
|
"$ltfs_mountpoint"
|
||||||
|
fi
|
||||||
ret=$(umount $ltfs_mountpoint 2>/dev/null)
|
ret=$(umount $ltfs_mountpoint 2>/dev/null)
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
if [ $verbose -ge 2 ]; then
|
if [ $verbose -ge 2 ]; then
|
||||||
printf "${MAGENTA}LTFS tape ${GREEN}'%s'${MAGENTA} unmounted.${NO_COLOR}\n" \
|
printf "${MAGENTA}LTFS tape ${GREEN}'%s'${MAGENTA} unmounted.${NO_COLOR}\n" \
|
||||||
"$ltfs_devname"
|
"$ltfs_mountpoint"
|
||||||
fi
|
fi
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
@@ -693,6 +794,242 @@ media_change () {
|
|||||||
printf "${MAGENTA}MediaPool: ${GREEN}%s${NO_COLOR} (next tape: ${GREEN}%s${NO_COLOR})\n" \
|
printf "${MAGENTA}MediaPool: ${GREEN}%s${NO_COLOR} (next tape: ${GREEN}%s${NO_COLOR})\n" \
|
||||||
"${mediapool_name}" "${volume_name_next}"
|
"${mediapool_name}" "${volume_name_next}"
|
||||||
fi
|
fi
|
||||||
|
update_lastwrite "${mediapool_name}" "${volume_name_next}" "${date_string}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
mount_tape () {
|
||||||
|
local mediapool_name=${1}
|
||||||
|
local volume_name=${2}
|
||||||
|
|
||||||
|
if [ $verbose -ge 1 ]; then
|
||||||
|
printf "${BLUE}mount_tape...${NO_COLOR}\n"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $verbose -ge 2 ]; then
|
||||||
|
if [ ${#volume_name } -ge 1 ]; then
|
||||||
|
printf "${MAGENTA}MediaPool: ${GREEN}%s${NO_COLOR} (mounting tape: ${GREEN}%s${NO_COLOR})\n" \
|
||||||
|
"${mediapool_name}" "${volume_name}"
|
||||||
|
else
|
||||||
|
printf "${MAGENTA}MediaPool: ${GREEN}%s${NO_COLOR} (mounting next tape)\n" \
|
||||||
|
"${mediapool_name}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
ltfs_is_mounted
|
||||||
|
if test $? -eq 0; then
|
||||||
|
if [ $verbose -ge 1 ]; then
|
||||||
|
printf "${MAGENTA}LTFS Tape is mounted.${NO_COLOR}\n"
|
||||||
|
fi
|
||||||
|
# get date from last written tape in given mediapool
|
||||||
|
if [ "${#volume_name}" -eq 0 ]; then
|
||||||
|
get_lastwrite ${mediapool_name}
|
||||||
|
if [ $? != 0 ]; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
# get label from tape in given drive slot
|
||||||
|
slot_source="0"
|
||||||
|
mtx_getlabel $slot_source
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
if [ $verbose -ge 2 ]; then
|
||||||
|
printf "${MAGENTA}Tape in drive: ${GREEN}%s${NO_COLOR}\n" \
|
||||||
|
"${volume_name_active}"
|
||||||
|
fi
|
||||||
|
if [ "${#volume_name_active}" -ge 1 ] && [ "${volume_name_active}" != "${volume_name}" ]; then
|
||||||
|
if [ $verbose -ge 1 ]; then
|
||||||
|
printf "${MAGENTA}Re-Mounting Tape: ${GREEN}%s${NO_COLOR}\n" \
|
||||||
|
"${volume_name}"
|
||||||
|
fi
|
||||||
|
ltfs_umount
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
mtx_unload
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
mount_tape "${mediapool_name}" "${volume_name}"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return $?
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
return $?
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
# check if given tape is poolmember of selected pool
|
||||||
|
get_poolmember ${mediapool_name} ${volume_name}
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
# volume_name is member of given mediapool
|
||||||
|
get_mediapolicy ${mediapool_name} ${volume_name_active}
|
||||||
|
if [ ${#volume_mediapolicy} -gt 0 ]; then
|
||||||
|
if [ ${volume_mediapolicy} = "append" ] ; then
|
||||||
|
if [ $verbose -ge 1 ]; then
|
||||||
|
printf "${MAGENTA}Valid tape mediapolicy: ${GREEN}%s${NO_COLOR}\n" \
|
||||||
|
"${volume_mediapolicy}"
|
||||||
|
fi
|
||||||
|
volume_retensiondate="20180101000000"
|
||||||
|
get_retensiondate ${mediapool_name} ${volume_name}
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
date_now=$($date_cmd)
|
||||||
|
compare_date $date_now $volume_retensiondate
|
||||||
|
if [ $? -eq 2 ]; then
|
||||||
|
# retensiondate has exposed: use it
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
if [ $? -eq 1 ]; then
|
||||||
|
# respect active retensiondate: unload given tape
|
||||||
|
ltfs_umount
|
||||||
|
mtx_unload
|
||||||
|
# use next volume_name from pool
|
||||||
|
get_poolmember_next ${mediapool_name} ${volume_name}
|
||||||
|
get_slot ${mediapool_name} ${volume_name_next}
|
||||||
|
mtx_load ${volume_slot}
|
||||||
|
ltfs_mount
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
if [ ${volume_mediapolicy} = "overwrite" ] ; then
|
||||||
|
volume_retensiondate="20180101000000"
|
||||||
|
get_retensiondate ${mediapool_name} ${volume_name}
|
||||||
|
date_now=$($date_cmd)
|
||||||
|
compare_date $date_now $volume_retensiondate
|
||||||
|
if [ $? -eq 2 ]; then
|
||||||
|
# retensiondate has exposed: wipe given tape
|
||||||
|
ltfs_wipe
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [ $? -eq 1 ]; then
|
||||||
|
# respect active retensiondate: unload given tape
|
||||||
|
ltfs_umount
|
||||||
|
mtx_unload
|
||||||
|
# use next volume_name from pool
|
||||||
|
get_poolmember_next ${mediapool_name} ${volume_name}
|
||||||
|
get_slot ${mediapool_name} ${volume_name_next}
|
||||||
|
mtx_load ${volume_slot}
|
||||||
|
ltfs_mount
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# volume_name is not member of given pool
|
||||||
|
ltfs_umount
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
mtx_unload
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
if [ "${#volume_name}" -eq 0 ]; then
|
||||||
|
get_lastwrite ${mediapool_name}
|
||||||
|
fi
|
||||||
|
get_poolmember_next ${mediapool_name} ${volume_name}
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
mtx load ${volume_name_next}
|
||||||
|
ltfs_mount
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
return $?
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
return $?
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if [ $verbose -ge 1 ]; then
|
||||||
|
printf "${MAGENTA}No LTFS Tape mounted...${NO_COLOR}\n"
|
||||||
|
fi
|
||||||
|
if [ "${#volume_name}" -eq 0 ]; then
|
||||||
|
# set volume_name and last write date
|
||||||
|
#get_lastwrite ${mediapool_name}
|
||||||
|
get_poolmember_next ${mediapool_name}
|
||||||
|
if [ "${#volume_name_next}" -ge 1 ]; then
|
||||||
|
volume_name=${volume_name_next}
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
# check label of tape in given drive slot (slot=0)
|
||||||
|
slot_source="0"
|
||||||
|
mtx_getlabel $slot_source
|
||||||
|
if [ $? -eq 0 ] && [ "${#volume_name_active}" -gt 1 ]; then
|
||||||
|
if [ $verbose -ge 1 ]; then
|
||||||
|
printf "${MAGENTA}Tape in drive: ${GREEN}%s${NO_COLOR}\n" \
|
||||||
|
"${volume_name_active}"
|
||||||
|
fi
|
||||||
|
if [ "${#volume_name_active}" -gt 1 ] && [ "${volume_name_active}" != "${volume_name}" ]; then
|
||||||
|
mtx_unload
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
mount_tape "${mediapool_name}" "${volume_name}"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return $?
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# mount new tape
|
||||||
|
get_slot ${mediapool_name} ${volume_name}
|
||||||
|
mtx_load ${volume_slot}
|
||||||
|
fi
|
||||||
|
|
||||||
|
# volume_name is member of given mediapool
|
||||||
|
get_mediapolicy ${mediapool_name} ${volume_name}
|
||||||
|
if [ ${#volume_mediapolicy} -gt 0 ]; then
|
||||||
|
if [ ${volume_mediapolicy} = "append" ] ; then
|
||||||
|
if [ $verbose -ge 1 ]; then
|
||||||
|
printf "${MAGENTA}Valid tape mediapolicy: ${GREEN}%s${NO_COLOR}\n" \
|
||||||
|
"${volume_mediapolicy}"
|
||||||
|
fi
|
||||||
|
volume_retensiondate="20180101000000"
|
||||||
|
get_retensiondate ${mediapool_name} ${volume_name}
|
||||||
|
date_now=$($date_cmd)
|
||||||
|
compare_date $date_now $volume_retensiondate
|
||||||
|
RET=$?
|
||||||
|
if [ $RET -eq 2 ]; then
|
||||||
|
if [ $verbose -ge 1 ]; then
|
||||||
|
printf "${MAGENTA}RetensionDate has exposed, mount the tape\n"
|
||||||
|
fi
|
||||||
|
ltfs_mount
|
||||||
|
return 0
|
||||||
|
elif [ $RET -eq 1 ]; then
|
||||||
|
if [ $verbose -ge 1 ]; then
|
||||||
|
printf "${MAGENTA}Tape is bocked via RetensionDate.\n"
|
||||||
|
fi
|
||||||
|
ltfs_mount
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [ ${volume_mediapolicy} = "overwrite" ] ; then
|
||||||
|
volume_retensiondate="20180101000000"
|
||||||
|
get_retensiondate ${mediapool_name} ${volume_name}
|
||||||
|
date_now=$($date_cmd)
|
||||||
|
compare_date $date_now $volume_retensiondate
|
||||||
|
if [ $? -eq 2 ]; then
|
||||||
|
# retensiondate has exposed: wipe given tape
|
||||||
|
ltfs_mount
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
ltfs_wipe
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [ $? -eq 1 ]; then
|
||||||
|
# respect active retensiondate: unload given tape
|
||||||
|
mtx_unload
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
# use next volume_name from pool
|
||||||
|
get_poolmember_next ${mediapool_name} ${volume_name}
|
||||||
|
mount_tape "${mediapool_name}" "${volume_name}"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return $?
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@@ -719,7 +1056,7 @@ mtx_getlabel () {
|
|||||||
export slot_source
|
export slot_source
|
||||||
|
|
||||||
if [ $verbose -ge 1 ]; then
|
if [ $verbose -ge 1 ]; then
|
||||||
printf "${BLUE}Tape get-label...${NO_COLOR}\n"
|
printf "${BLUE}mtx_get_label...${NO_COLOR}\n"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
make_temp_file
|
make_temp_file
|
||||||
@@ -830,8 +1167,8 @@ mtx_unload () {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
make_err_file
|
make_err_file
|
||||||
|
${MTX} -f $changer_device unload $slot_source $drive 2>${ERRFILE}
|
||||||
for i in 1 2 3 4 5 ; do
|
for i in 1 2 3 4 5 ; do
|
||||||
${MTX} -f $changer_device unload $slot_source $drive 2>${ERRFILE}
|
|
||||||
RET=$?
|
RET=$?
|
||||||
if test $RET -eq 0; then
|
if test $RET -eq 0; then
|
||||||
break
|
break
|
||||||
@@ -896,6 +1233,11 @@ parse_params () {
|
|||||||
shift $count
|
shift $count
|
||||||
cmd=get-lastwrite
|
cmd=get-lastwrite
|
||||||
;;
|
;;
|
||||||
|
--get-mediapool-name)
|
||||||
|
volume_name=$2
|
||||||
|
shift 2
|
||||||
|
cmd=get-mediapool-name
|
||||||
|
;;
|
||||||
--get-mediapools)
|
--get-mediapools)
|
||||||
shift 1
|
shift 1
|
||||||
cmd=get-mediapools
|
cmd=get-mediapools
|
||||||
@@ -977,6 +1319,40 @@ parse_params () {
|
|||||||
shift $count
|
shift $count
|
||||||
cmd=get-slot
|
cmd=get-slot
|
||||||
;;
|
;;
|
||||||
|
--ltfs-format)
|
||||||
|
shift 1
|
||||||
|
ltfs_params=${*}
|
||||||
|
ltfs_params="${ltfs_params%% -*}"
|
||||||
|
params=$*
|
||||||
|
set -- $ltfs_params
|
||||||
|
count=$#
|
||||||
|
test $count -ge 1 && volume_name="$1"
|
||||||
|
test $count -ge 2 && tape_id="$2"
|
||||||
|
set -- $params
|
||||||
|
shift $count
|
||||||
|
cmd=ltfs-format
|
||||||
|
;;
|
||||||
|
--ltfs-is-mounted)
|
||||||
|
shift 1
|
||||||
|
cmd=ltfs-is-mounted
|
||||||
|
;;
|
||||||
|
--ltfs-mount)
|
||||||
|
shift 1
|
||||||
|
cmd=ltfs-mount
|
||||||
|
;;
|
||||||
|
--ltfs-mountpoint)
|
||||||
|
ltfs_mountpoint="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
--ltfs-reformat)
|
||||||
|
volume_name="$2"
|
||||||
|
shift 2
|
||||||
|
cmd=ltfs-reformat
|
||||||
|
;;
|
||||||
|
--ltfs-umount)
|
||||||
|
shift 1
|
||||||
|
cmd=ltfs-umount
|
||||||
|
;;
|
||||||
--media-change)
|
--media-change)
|
||||||
shift 1
|
shift 1
|
||||||
tape_params=${*}
|
tape_params=${*}
|
||||||
@@ -1005,62 +1381,6 @@ parse_params () {
|
|||||||
shift $count
|
shift $count
|
||||||
cmd=mount
|
cmd=mount
|
||||||
;;
|
;;
|
||||||
-p|--port)
|
|
||||||
port=$2
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
--remote)
|
|
||||||
remote=$2
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
--use-mtx)
|
|
||||||
use_mtx=1
|
|
||||||
shift 1
|
|
||||||
;;
|
|
||||||
--ltfs-devname)
|
|
||||||
ltfs_devname="$2"
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
--ltfs-getattribute)
|
|
||||||
shift 1
|
|
||||||
ltfs_params=${*}
|
|
||||||
ltfs_params="${ltfs_params%% -*}"
|
|
||||||
params=$*
|
|
||||||
set -- $ltfs_params
|
|
||||||
count=$#
|
|
||||||
test $count -eq 0 && ltfs_attribute_name="volumeName"
|
|
||||||
shift $count
|
|
||||||
cmd=ltfs-getattribute
|
|
||||||
;;
|
|
||||||
--ltfs-format)
|
|
||||||
shift 1
|
|
||||||
ltfs_params=${*}
|
|
||||||
ltfs_params="${ltfs_params%% -*}"
|
|
||||||
params=$*
|
|
||||||
set -- $ltfs_params
|
|
||||||
count=$#
|
|
||||||
test $count -ge 1 && volume_name="$1"
|
|
||||||
test $count -ge 2 && tape_id="$2"
|
|
||||||
set -- $params
|
|
||||||
shift $count
|
|
||||||
cmd=ltfs-format
|
|
||||||
;;
|
|
||||||
--ltfs-is-mounted)
|
|
||||||
shift 1
|
|
||||||
cmd=ltfs-is-mounted
|
|
||||||
;;
|
|
||||||
--ltfs-mount)
|
|
||||||
shift 1
|
|
||||||
cmd=ltfs-mount
|
|
||||||
;;
|
|
||||||
--ltfs-mountpoint)
|
|
||||||
ltfs_mountpoint="$2"
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
--ltfs-umount)
|
|
||||||
shift 1
|
|
||||||
cmd=ltfs-umount
|
|
||||||
;;
|
|
||||||
--mtx-exchange)
|
--mtx-exchange)
|
||||||
shift
|
shift
|
||||||
slots=${*}
|
slots=${*}
|
||||||
@@ -1134,6 +1454,33 @@ parse_params () {
|
|||||||
shift $count
|
shift $count
|
||||||
cmd=mtx-unload
|
cmd=mtx-unload
|
||||||
;;
|
;;
|
||||||
|
-p|--port)
|
||||||
|
port=$2
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
--remote)
|
||||||
|
remote=$2
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
--use-mtx)
|
||||||
|
use_mtx=1
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
--ltfs-devname)
|
||||||
|
ltfs_devname="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
--ltfs-getattribute)
|
||||||
|
shift 1
|
||||||
|
ltfs_params=${*}
|
||||||
|
ltfs_params="${ltfs_params%% -*}"
|
||||||
|
params=$*
|
||||||
|
set -- $ltfs_params
|
||||||
|
count=$#
|
||||||
|
test $count -eq 0 && ltfs_attribute_name="volumeName"
|
||||||
|
shift $count
|
||||||
|
cmd=ltfs-getattribute
|
||||||
|
;;
|
||||||
--update-lastwrite)
|
--update-lastwrite)
|
||||||
shift 1
|
shift 1
|
||||||
pool_params=${*}
|
pool_params=${*}
|
||||||
@@ -1230,7 +1577,7 @@ parse_params () {
|
|||||||
if [ -z "$remote" ]; then
|
if [ -z "$remote" ]; then
|
||||||
ssh=""
|
ssh=""
|
||||||
else
|
else
|
||||||
ssh="ssh -T $remote"
|
ssh="ssh $remote"
|
||||||
if [ ! -z "$port" ]; then
|
if [ ! -z "$port" ]; then
|
||||||
ssh="$ssh -p $port"
|
ssh="$ssh -p $port"
|
||||||
fi
|
fi
|
||||||
@@ -1253,6 +1600,11 @@ parse_params () {
|
|||||||
printf " ltfs mount-point: '%s'\n" "$ltfs_mountpoint"
|
printf " ltfs mount-point: '%s'\n" "$ltfs_mountpoint"
|
||||||
printf "MTX Settings\n"
|
printf "MTX Settings\n"
|
||||||
printf " def changer-name: '%s'\n" "$default_changer_device"
|
printf " def changer-name: '%s'\n" "$default_changer_device"
|
||||||
|
if [ ${#remote} -ge 1 ]; then
|
||||||
|
printf "Remote Settings\n"
|
||||||
|
printf " remote host: '%s'\n" "$remote"
|
||||||
|
printf " ssh options: '%s'\n" "$ssh"
|
||||||
|
fi
|
||||||
|
|
||||||
if [ $verbose -ge 1 ]; then tape_options="verbose_level=$verbose"; fi
|
if [ $verbose -ge 1 ]; then tape_options="verbose_level=$verbose"; fi
|
||||||
if [ $dryrun -eq 1 ]; then tape_options="${tape_options} dry-run=true"; fi
|
if [ $dryrun -eq 1 ]; then tape_options="${tape_options} dry-run=true"; fi
|
||||||
@@ -1262,252 +1614,6 @@ parse_params () {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
mount_tape () {
|
|
||||||
local mediapool_name=${1}
|
|
||||||
local volume_name=${2}
|
|
||||||
|
|
||||||
if [ $verbose -ge 1 ]; then
|
|
||||||
printf "${BLUE}mount_tape...${NO_COLOR}\n"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $verbose -ge 2 ]; then
|
|
||||||
if [ ${#volume_name } -ge 1 ]; then
|
|
||||||
printf "${MAGENTA}MediaPool: ${GREEN}%s${NO_COLOR} (mounting tape: ${GREEN}%s${NO_COLOR})\n" \
|
|
||||||
"${mediapool_name}" "${volume_name_active}"
|
|
||||||
else
|
|
||||||
printf "${MAGENTA}MediaPool: ${GREEN}%s${NO_COLOR} (mounting next tape)\n" \
|
|
||||||
"${mediapool_name}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
ltfs_is_mounted
|
|
||||||
if test $? -eq 0; then
|
|
||||||
if [ $verbose -ge 1 ]; then
|
|
||||||
printf "${MAGENTA}LTFS Tape is mounted.${NO_COLOR}\n"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# check that mounted tape is member of selected mediapool
|
|
||||||
slot_source="0"
|
|
||||||
mtx_getlabel ${slot_source}
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
get_poolmember ${mediapool_name} ${volume_name_active}
|
|
||||||
if [ $? -eq 1 ]; then
|
|
||||||
# unmount and recurse execution
|
|
||||||
if [ $verbose -ge 2 ]; then
|
|
||||||
printf "${MAGENTA}Tape: ${GREEN}%s${NO_COLOR} is no valid member of selected MediaPool: ${GREEN}%s${NO_COLOR}\n" \
|
|
||||||
"${volume_name_active}" "${mediapool_name}"
|
|
||||||
fi
|
|
||||||
ltfs_umount
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
mtx_unload
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
if [ $verbose -ge 2 ]; then
|
|
||||||
printf "${MAGENTA}Tape: ${GREEN}%s${NO_COLOR} is no valid member of selected MediaPool: ${GREEN}%s${NO_COLOR}\n" \
|
|
||||||
"${volume_name_active}" "${mediapool_name}"
|
|
||||||
fi
|
|
||||||
mount_tape "${mediapool_name}" "${volume_name}"
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
return $?
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
return $?
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
# get date from last written tape in given mediapool
|
|
||||||
if [ "${#volume_name}" -eq 0 ]; then
|
|
||||||
get_lastwrite ${mediapool_name}
|
|
||||||
if [ $? != 0 ]; then
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
# get label from tape in given drive slot
|
|
||||||
slot_source="0"
|
|
||||||
mtx_getlabel $slot_source
|
|
||||||
if [ $verbose -ge 1 ]; then
|
|
||||||
printf "${MAGENTA}Tape Label: ${GREEN}%s${NO_COLOR}\n" \
|
|
||||||
"${volume_name_active}"
|
|
||||||
fi
|
|
||||||
if [ "${#volume_name_active}" -ge 1 ] && [ "${volume_name_active}" != "${volume_name}" ]; then
|
|
||||||
ltfs_umount
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
mtx_unload
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
mount_tape "${mediapool_name}" "${volume_name}"
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
return $?
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
return $?
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
# check if given tape is poolmember of selected pool
|
|
||||||
get_poolmember ${mediapool_name} ${volume_name}
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
# volume_name is member of given mediapool
|
|
||||||
get_mediapolicy ${mediapool_name} ${volume_name}
|
|
||||||
if [ ${#volume_mediapolicy} -gt 0 ]; then
|
|
||||||
if [ ${volume_mediapolicy} = "append" ] ; then
|
|
||||||
if [ $verbose -ge 1 ]; then
|
|
||||||
printf "${MAGENTA}Valid tape mediapolicy: ${GREEN}%s${NO_COLOR}\n" \
|
|
||||||
"${volume_mediapolicy}"
|
|
||||||
fi
|
|
||||||
volume_retensiondate="20180101000000"
|
|
||||||
get_retensiondate ${mediapool_name} ${volume_name}
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
date_now=$($date_cmd)
|
|
||||||
compare_date $date_now $volume_retensiondate
|
|
||||||
if [ $? -eq 2 ]; then
|
|
||||||
# retensiondate has exposed: use it
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
if [ $? -eq 1 ]; then
|
|
||||||
# respect active retensiondate: unload given tape
|
|
||||||
ltfs_umount
|
|
||||||
mtx_unload
|
|
||||||
# use next volume_name from pool
|
|
||||||
get_poolmember_next ${mediapool_name} ${volume_name}
|
|
||||||
get_slot ${mediapool_name} ${volume_name_next}
|
|
||||||
mtx_load ${volume_slot}
|
|
||||||
ltfs_mount
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
if [ ${volume_mediapolicy} = "overwrite" ] ; then
|
|
||||||
volume_retensiondate="20180101000000"
|
|
||||||
get_retensiondate ${mediapool_name} ${volume_name}
|
|
||||||
date_now=$($date_cmd)
|
|
||||||
compare_date $date_now $volume_retensiondate
|
|
||||||
if [ $? -eq 2 ]; then
|
|
||||||
# retensiondate has exposed: wipe given tape
|
|
||||||
ltfs_wipe
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if [ $? -eq 1 ]; then
|
|
||||||
# respect active retensiondate: unload given tape
|
|
||||||
ltfs_umount
|
|
||||||
mtx_unload
|
|
||||||
# use next volume_name from pool
|
|
||||||
get_poolmember_next ${mediapool_name} ${volume_name}
|
|
||||||
get_slot ${mediapool_name} ${volume_name_next}
|
|
||||||
mtx_load ${volume_slot}
|
|
||||||
ltfs_mount
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
# volume_name is not member of given pool
|
|
||||||
ltfs_umount
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
mtx_unload
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
if [ "${#volume_name}" -eq 0 ]; then
|
|
||||||
get_lastwrite ${mediapool_name}
|
|
||||||
fi
|
|
||||||
get_poolmember_next ${mediapool_name} ${volume_name}
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
mtx load ${volume_name_next}
|
|
||||||
ltfs_mount
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
return $?
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
return $?
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
if [ $verbose -ge 1 ]; then
|
|
||||||
printf "${MAGENTA}No LTFS Tape mounted...${NO_COLOR}\n"
|
|
||||||
fi
|
|
||||||
if [ "${#volume_name}" -eq 0 ]; then
|
|
||||||
# set volume_name and last write date
|
|
||||||
get_lastwrite ${mediapool_name}
|
|
||||||
fi
|
|
||||||
# check label from tape in given drive slot
|
|
||||||
slot_source="0"
|
|
||||||
mtx_getlabel $slot_source
|
|
||||||
if [ $? -eq 0 ] && [ "${#volume_name_active}" -gt 1 ]; then
|
|
||||||
if [ $verbose -ge 1 ]; then
|
|
||||||
printf "${MAGENTA}Tape Label: ${GREEN}%s${NO_COLOR}\n" \
|
|
||||||
"${volume_name_active}"
|
|
||||||
fi
|
|
||||||
if [ "${#volume_name_active}" -gt 1 ] && [ "${volume_name_active}" != "${volume_name}" ]; then
|
|
||||||
mtx_unload
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
mount_tape "${mediapool_name}" "${volume_name}"
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
return $?
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
# mount new tape
|
|
||||||
get_slot ${mediapool_name} ${volume_name}
|
|
||||||
mtx_load ${volume_slot}
|
|
||||||
fi
|
|
||||||
|
|
||||||
# volume_name is member of given mediapool
|
|
||||||
get_mediapolicy ${mediapool_name} ${volume_name}
|
|
||||||
if [ ${#volume_mediapolicy} -gt 0 ]; then
|
|
||||||
if [ ${volume_mediapolicy} = "append" ] ; then
|
|
||||||
if [ $verbose -ge 1 ]; then
|
|
||||||
printf "${MAGENTA}Valid tape mediapolicy: ${GREEN}%s${NO_COLOR}\n" \
|
|
||||||
"${volume_mediapolicy}"
|
|
||||||
fi
|
|
||||||
volume_retensiondate="20180101000000"
|
|
||||||
get_retensiondate ${mediapool_name} ${volume_name}
|
|
||||||
date_now=$($date_cmd)
|
|
||||||
compare_date $date_now $volume_retensiondate
|
|
||||||
if [ $? -eq 2 ]; then
|
|
||||||
# retensiondate has exposed: use it
|
|
||||||
ltfs_mount
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if [ ${volume_mediapolicy} = "overwrite" ] ; then
|
|
||||||
volume_retensiondate="20180101000000"
|
|
||||||
get_retensiondate ${mediapool_name} ${volume_name}
|
|
||||||
date_now=$($date_cmd)
|
|
||||||
compare_date $date_now $volume_retensiondate
|
|
||||||
if [ $? -eq 2 ]; then
|
|
||||||
# retensiondate has exposed: wipe given tape
|
|
||||||
ltfs_mount
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
ltfs_wipe
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if [ $? -eq 1 ]; then
|
|
||||||
# respect active retensiondate: unload given tape
|
|
||||||
mtx_unload
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
# use next volume_name from pool
|
|
||||||
get_poolmember_next ${mediapool_name} ${volume_name}
|
|
||||||
mount_tape "${mediapool_name}" "${volume_name}"
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
return $?
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
traperror () {
|
traperror () {
|
||||||
printf "Exited due to error on line %s.\n" $1
|
printf "Exited due to error on line %s.\n" $1
|
||||||
printf "exit status: %s\n" "$2"
|
printf "exit status: %s\n" "$2"
|
||||||
@@ -1786,7 +1892,9 @@ Options:
|
|||||||
--get-lastwrite extract LastWrite attribute from given Pool member (JSON-File)
|
--get-lastwrite extract LastWrite attribute from given Pool member (JSON-File)
|
||||||
(input attribute: <mediapool> [<volume_name>])
|
(input attribute: <mediapool> [<volume_name>])
|
||||||
without given volume_name, extract Pool member that was last witten to
|
without given volume_name, extract Pool member that was last witten to
|
||||||
--get-mediapools extract MediaPool names Pool configuration (JSON-File)
|
--get-mediapool-name extract MediaPool name for given VolumeName from configuration (JSON-File)
|
||||||
|
(input attribute: <volume_name>)
|
||||||
|
--get-mediapools extract MediaPool names from configuration (JSON-File)
|
||||||
--get-mediapolicy extract MediaPolicy attribute from Pool configuration (JSON-File)
|
--get-mediapolicy extract MediaPolicy attribute from Pool configuration (JSON-File)
|
||||||
(input attribute: <mediapool> [<volume_name>])
|
(input attribute: <mediapool> [<volume_name>])
|
||||||
--get-poolmember extract VolumeName attribute from Pool configuration (JSON-File)
|
--get-poolmember extract VolumeName attribute from Pool configuration (JSON-File)
|
||||||
@@ -1805,6 +1913,8 @@ Options:
|
|||||||
(input attribute: <volume_name> <tape_id>)
|
(input attribute: <volume_name> <tape_id>)
|
||||||
--ltfs-is-mounted returns true, if ltfs tape is already mounted
|
--ltfs-is-mounted returns true, if ltfs tape is already mounted
|
||||||
--ltfs-mount mount a ltfs tape (returns true on success)
|
--ltfs-mount mount a ltfs tape (returns true on success)
|
||||||
|
--ltfs-reformat reformat mounted tape
|
||||||
|
(input attribute: [<volume_name>])
|
||||||
--ltfs-umount unmount a ltfs tape (returns true on success)
|
--ltfs-umount unmount a ltfs tape (returns true on success)
|
||||||
--media-change Update RetensionDate for last written Pool-Tape and und exchange tapes in slots
|
--media-change Update RetensionDate for last written Pool-Tape and und exchange tapes in slots
|
||||||
(input attribute: <mediapool> [<volume_name>])
|
(input attribute: <mediapool> [<volume_name>])
|
||||||
@@ -1822,6 +1932,10 @@ Options:
|
|||||||
(input attribute: slot_source drive)
|
(input attribute: slot_source drive)
|
||||||
--mount make tape accessible for OS
|
--mount make tape accessible for OS
|
||||||
(input attribute: <mediapool_name> [<volume_name>])
|
(input attribute: <mediapool_name> [<volume_name>])
|
||||||
|
-r, --remote <host> Send the snapshot backup to a remote machine. The snapshot will be sent via ssh.
|
||||||
|
You should specify the remote machine's hostname or ip address. The 'root' user
|
||||||
|
must be permitted to login on the remote machine.
|
||||||
|
-p, --port <port> The remote port.
|
||||||
--update-lastwrite update LastWrite attribute for given TapeName in Pool (JSON-File)
|
--update-lastwrite update LastWrite attribute for given TapeName in Pool (JSON-File)
|
||||||
(input attribute: <mediapool> <volume_name> [<YYYYMMDDHHMMSS> )
|
(input attribute: <mediapool> <volume_name> [<YYYYMMDDHHMMSS> )
|
||||||
--update-retensiondate update RetensionDate attribute for given TapeName in Pool (JSON-File)
|
--update-retensiondate update RetensionDate attribute for given TapeName in Pool (JSON-File)
|
||||||
@@ -1833,11 +1947,7 @@ Options:
|
|||||||
-v, --verbose Be verbose on what's going on (min: --verbose=1, max: --verbose=3)
|
-v, --verbose Be verbose on what's going on (min: --verbose=1, max: --verbose=3)
|
||||||
--version show program version
|
--version show program version
|
||||||
EOF
|
EOF
|
||||||
#-r, --remote <address> Send the snapshot backup to a remote machine. The snapshot will be sent via ssh.
|
--dry-run perform a trial run where no changes are made.
|
||||||
# You should specify the remote machine's hostname or ip address. The 'root' user
|
|
||||||
# must be permitted to login on the remote machine.
|
|
||||||
#-p, --port <port> The remote port.
|
|
||||||
# --dry-run perform a trial run where no changes are made.
|
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
}
|
}
|
||||||
@@ -1878,17 +1988,27 @@ case $cmd in
|
|||||||
get_mediapolicy "${mediapool_name}" "${volume_name}"
|
get_mediapolicy "${mediapool_name}" "${volume_name}"
|
||||||
if test $? -eq 0; then
|
if test $? -eq 0; then
|
||||||
if [ $verbose -ge 1 ]; then
|
if [ $verbose -ge 1 ]; then
|
||||||
printf "${MAGENTA}MediaPolicy for ${GREEN}'%s'${MAGENTA} is:${NO_COLOR} %s.\n" \
|
printf "${MAGENTA}MediaPolicy for ${GREEN}'%s'${MAGENTA} is:${NO_COLOR}'%s'.\n" \
|
||||||
"${volume_name}" "${volume_mediapolicy}"
|
"${volume_name}" "${volume_mediapolicy}"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
return $?
|
return $?
|
||||||
;;
|
;;
|
||||||
|
get-mediapool-name)
|
||||||
|
get_mediapool_name "${volume_name}"
|
||||||
|
if test $? -eq 0; then
|
||||||
|
if [ $verbose -ge 1 ]; then
|
||||||
|
printf "${MAGENTA}MediaPool name: ${GREEN}'%s'${NO_COLOR}\n" \
|
||||||
|
"${mediapool_name}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
return $?
|
||||||
|
;;
|
||||||
get-mediapools)
|
get-mediapools)
|
||||||
get_mediapool_names
|
get_mediapool_names
|
||||||
if test $? -eq 0; then
|
if test $? -eq 0; then
|
||||||
if [ $verbose -ge 1 ]; then
|
if [ $verbose -ge 1 ]; then
|
||||||
printf "${MAGENTA}MediaPool names:${NO_COLOR} %s.\n" \
|
printf "${MAGENTA}MediaPool names: ${GREEN}'%s'${NO_COLOR}\n" \
|
||||||
"${mediapool_names}"
|
"${mediapool_names}"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@@ -2001,6 +2121,16 @@ case $cmd in
|
|||||||
fi
|
fi
|
||||||
return $?
|
return $?
|
||||||
;;
|
;;
|
||||||
|
ltfs-reformat)
|
||||||
|
ltfs_reformat "${volume_name}"
|
||||||
|
if test $? -eq 0; then
|
||||||
|
if [ $verbose -ge 1 ]; then
|
||||||
|
printf "${MAGENTA}LTFS Tape reformat: ${GREEN}%s${NO_COLOR}\n" \
|
||||||
|
"${volume_name}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
return $?
|
||||||
|
;;
|
||||||
ltfs-umount)
|
ltfs-umount)
|
||||||
ltfs_umount
|
ltfs_umount
|
||||||
if test $? -eq 0; then
|
if test $? -eq 0; then
|
||||||
@@ -2014,15 +2144,19 @@ case $cmd in
|
|||||||
media_change $mediapool_name $volume_name
|
media_change $mediapool_name $volume_name
|
||||||
if [ $verbose -ge 1 ]; then
|
if [ $verbose -ge 1 ]; then
|
||||||
if [ ${#volume_name} -ge 1 ]; then
|
if [ ${#volume_name} -ge 1 ]; then
|
||||||
printf "${MAGENTA}Media change in pool: ${GREEN}%s${NO_COLOR} (Volume-Name: ${GREEN}%s${NO_COLOR})\n" \
|
printf "${MAGENTA}Media changed in pool: ${GREEN}%s${NO_COLOR} (Volume-Name: ${GREEN}%s${NO_COLOR})\n" \
|
||||||
"${mediapool_name}" "${volume_name}"
|
"${mediapool_name}" "${volume_name}"
|
||||||
else
|
else
|
||||||
printf "${MAGENTA}Media change in pool: ${GREEN}%s${NO_COLOR}\n" \
|
printf "${MAGENTA}Media changed in pool: ${GREEN}%s${NO_COLOR}\n" \
|
||||||
"${mediapool_name}"
|
"${mediapool_name}"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
return $?
|
return $?
|
||||||
;;
|
;;
|
||||||
|
mount)
|
||||||
|
mount_tape $mediapool_name $volume_name
|
||||||
|
return $?
|
||||||
|
;;
|
||||||
mtx-exchange)
|
mtx-exchange)
|
||||||
mtx_exchange "${slot_source}" "${slot_target}"
|
mtx_exchange "${slot_source}" "${slot_target}"
|
||||||
return $?
|
return $?
|
||||||
@@ -2055,8 +2189,8 @@ case $cmd in
|
|||||||
mount_tape "${mediapool_name}" "${volume_name}"
|
mount_tape "${mediapool_name}" "${volume_name}"
|
||||||
if test $? -eq 0; then
|
if test $? -eq 0; then
|
||||||
if [ $verbose -ge 1 ]; then
|
if [ $verbose -ge 1 ]; then
|
||||||
printf "${MAGENTA}Mount tape ${GREEN}'%s'${MAGENTA} for ${GREEN}'%s'${MAGENTA}: ${NO_COLOR}true.\n" \
|
printf "${MAGENTA}Tape ${GREEN}'%s'${MAGENTA} for ${GREEN}'%s'${MAGENTA} mounted${NO_COLOR}\n" \
|
||||||
"${volume_name_active}" "${mediapool_name}"
|
"${volume_name}" "${mediapool_name}"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
return $?
|
return $?
|
||||||
|
|||||||
Reference in New Issue
Block a user