tape-admin: bugfix

- ltfs_reformat(): tape needs to be unmounted before format call
- ltfs_umount(): be precise, if tapes mountpoint is in use
- parse_params(): improve error handling

Signed-off-by: Ralf Zerres <ralf.zerres@networkx.de>
This commit is contained in:
2018-10-12 12:28:24 +02:00
parent a4e6d3b42e
commit 04a712b663

View File

@@ -689,6 +689,7 @@ ltfs_reformat () {
ltfs_format ${volume_name_active} ${volume_serial} ltfs_format ${volume_name_active} ${volume_serial}
else else
ltfs_wipe ltfs_wipe
ltfs_umount
ltfs_format ${volume_name_active} ${volume_serial} ltfs_format ${volume_name_active} ${volume_serial}
fi fi
ltfs_mount ltfs_mount
@@ -709,22 +710,24 @@ ltfs_umount () {
printf "${MAGENTA}unmounting LTFS tape ${GREEN}'%s'${NO_COLOR}.\n" \ printf "${MAGENTA}unmounting LTFS tape ${GREEN}'%s'${NO_COLOR}.\n" \
"$ltfs_mountpoint" "$ltfs_mountpoint"
fi fi
ret=$(umount $ltfs_mountpoint 2>/dev/null) umount $ltfs_mountpoint 2>/dev/null
if [ $? -eq 0 ]; then ret=$?
if [ $verbose -ge 2 ]; then case $ret in
printf "${MAGENTA}LTFS tape ${GREEN}'%s'${MAGENTA} unmounted.${NO_COLOR}\n" \ 0)
"$ltfs_mountpoint" if [ $verbose -ge 2 ]; then
fi printf "${MAGENTA}LTFS tape ${GREEN}'%s'${MAGENTA} unmounted.${NO_COLOR}\n" \
return 0 "$ltfs_mountpoint"
elif [ $? -eq 32 ]; then fi
if [ $verbose -ge 2 ]; then return 0
printf "${RED}Error: ${MAGENTA}LTFS tape ${GREEN}'%s'${MAGENTA} is in use!${NO_COLOR}\n" \ ;;
"$ltfs_mountpoint" *)
fi if [ $verbose -ge 2 ]; then
return 1 printf "${RED}Error: '%s' ${MAGENTA}LTFS tape ${GREEN}'%s'${MAGENTA} is in use!${NO_COLOR}\n" \
else "$ret" "$ltfs_mountpoint"
return 1 fi
fi return 1
;;
esac
fi fi
} }
@@ -1975,67 +1978,73 @@ parse_params $@
case $cmd in case $cmd in
add-retensiondays) add-retensiondays)
add_retensiondays_to_retensiondate "${mediapool_name}" "${volume_name}" "${retension_days}" add_retensiondays_to_retensiondate "${mediapool_name}" "${volume_name}" "${retension_days}"
if test $? -eq 0; then if test $? -gt 0; then
if [ $verbose -ge 1 ]; then
printf "${RED}Error: ${MAGENTA}No RetensionDate for ${GREEN}'%s'${MAGENTA} in media-pool ${GREEN}%s${NO_COLOR}\n" \
"${mediapool_name}" "${volume_name}"
fi
return 1
else
date_string_to_iso "${volume_retensiondate}" date_string_to_iso "${volume_retensiondate}"
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
volume_date=$(date --date="${date_iso}Z") volume_date=$(date --date="${date_iso}Z")
printf "${MAGENTA}New RetensionDate date for ${GREEN}'%s'${MAGENTA} is: ${NO_COLOR}'%s'.\n" \ printf "${MAGENTA}New RetensionDate date for ${GREEN}'%s'${MAGENTA} is: ${NO_COLOR}'%s'.\n" \
"${volume_name}" "${volume_date}" "${volume_name}" "${volume_date}"
fi fi
else
if [ $verbose -ge 1 ]; then
printf "${RED}Error: ${MAGENTA}No RetensionDate for ${GREEN}'%s'${MAGENTA} in media-pool ${GREEN}%s${NO_COLOR}\n" \
"${mediapool_name}" "${volume_name}"
fi
fi fi
return $?
;; ;;
get-mediapolicy) get-mediapolicy)
get_mediapolicy "${mediapool_name}" "${volume_name}" get_mediapolicy "${mediapool_name}" "${volume_name}"
if test $? -eq 0; then if test $? -gt 0; then
return 1
else
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 $?
;; ;;
get-mediapool-name) get-mediapool-name)
get_mediapool_name "${volume_name}" get_mediapool_name "${volume_name}"
if test $? -eq 0; then if test $? -gt 0; then
return 1
else
if [ $verbose -ge 1 ]; then if [ $verbose -ge 1 ]; then
printf "${MAGENTA}MediaPool name: ${GREEN}'%s'${NO_COLOR}\n" \ printf "${MAGENTA}MediaPool name: ${GREEN}'%s'${NO_COLOR}\n" \
"${mediapool_name}" "${mediapool_name}"
fi fi
fi fi
return $?
;; ;;
get-mediapools) get-mediapools)
get_mediapool_names get_mediapool_names
if test $? -eq 0; then if test $? -gt 0; then
return 1
else
if [ $verbose -ge 1 ]; then if [ $verbose -ge 1 ]; then
printf "${MAGENTA}MediaPool names: ${GREEN}'%s'${NO_COLOR}\n" \ printf "${MAGENTA}MediaPool names: ${GREEN}'%s'${NO_COLOR}\n" \
"${mediapool_names}" "${mediapool_names}"
fi fi
fi fi
return $?
;; ;;
get-poolmember) get-poolmember)
valid_member=0 valid_member=0
get_poolmember "${mediapool_name}" "${volume_name}" get_poolmember "${mediapool_name}" "${volume_name}"
if test $? -eq 0; then if test $? -gt 0; then
return 1
else
if [ $verbose -ge 1 ]; then if [ $verbose -ge 1 ]; then
printf "${MAGENTA}Volume-Name ${GREEN}'%s'${MAGENTA} is a valid mediapool member.${NO_COLOR}\n" \ printf "${MAGENTA}Volume-Name ${GREEN}'%s'${MAGENTA} is a valid mediapool member.${NO_COLOR}\n" \
"${volume_name}" "${volume_name}"
fi fi
valid_member=1 valid_member=1
fi fi
return $?
;; ;;
get-lastwrite) get-lastwrite)
valid_member=0 valid_member=0
get_lastwrite "${mediapool_name}" "${volume_name}" get_lastwrite "${mediapool_name}" "${volume_name}"
if test $? -eq 0; then if test $? -gt 0; then
return 1
else
if [ $verbose -ge 1 ]; then if [ $verbose -ge 1 ]; then
date_string_to_iso ${volume_lastwrite} date_string_to_iso ${volume_lastwrite}
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
@@ -2044,43 +2053,42 @@ case $cmd in
"${volume_name}" "${mediapool_name}" "${volume_date}" "${volume_name}" "${mediapool_name}" "${volume_date}"
fi fi
fi fi
else
return 1
fi fi
;; ;;
get-poolmember-next) get-poolmember-next)
valid_member=0 valid_member=0
get_poolmember_next "${mediapool_name}" "${volume_name}" get_poolmember_next "${mediapool_name}" "${volume_name}"
if test $? -eq 0; then if test $? -gt 0; then
return 1
else
if [ $verbose -ge 1 ]; then if [ $verbose -ge 1 ]; then
printf "${MAGENTA}Next Volume-Name from media-pool ${GREEN}'%s'${MAGENTA} is:${NO_COLOR} %s.\n" \ printf "${MAGENTA}Next Volume-Name from media-pool ${GREEN}'%s'${MAGENTA} is:${NO_COLOR} %s.\n" \
"${mediapool_name}" "${volume_name_next}" "${mediapool_name}" "${volume_name_next}"
fi fi
fi fi
return $?
;; ;;
get-retensiondate) get-retensiondate)
get_retensiondate "${mediapool_name}" "${volume_name}" get_retensiondate "${mediapool_name}" "${volume_name}"
if test $? -eq 0; then if test $? -gt 0; then
return 1
else
date_string_to_iso "${volume_retensiondate}" date_string_to_iso "${volume_retensiondate}"
volume_date=$(date --date="${date_iso}Z") volume_date=$(date --date="${date_iso}Z")
if [ $verbose -ge 1 ]; then if [ $verbose -ge 1 ]; then
printf "${MAGENTA}RetensionDate for ${GREEN}'%s'${MAGENTA} is:${NO_COLOR} %s.\n" \ printf "${MAGENTA}RetensionDate for ${GREEN}'%s'${MAGENTA} is:${NO_COLOR} %s.\n" \
"${volume_name}" "${volume_date}" "${volume_name}" "${volume_date}"
fi fi
else
return 1
fi fi
;; ;;
get-mediapool-retensiondays) get-mediapool-retensiondays)
get_mediapool_retensiondays "${mediapool_name}" get_mediapool_retensiondays "${mediapool_name}"
if test $? -eq 0; then if test $? -gt 0; then
return 1
else
if [ $verbose -ge 1 ]; then if [ $verbose -ge 1 ]; then
printf "${MAGENTA}Default retension days for tapes in mediapool ${GREEN}'%s'${MAGENTA} is:${NO_COLOR} %s.\n" \ printf "${MAGENTA}Default retension days for tapes in mediapool ${GREEN}'%s'${MAGENTA} is:${NO_COLOR} %s.\n" \
"${mediapool_name}" "${mediapool_defaultretensiondays}" "${mediapool_name}" "${mediapool_defaultretensiondays}"
fi fi
else
return 1
fi fi
;; ;;
get-slot) get-slot)
@@ -2095,74 +2103,94 @@ case $cmd in
;; ;;
ltfs-format) ltfs-format)
ltfs_format "${volume_name}" "${tape_id}" ltfs_format "${volume_name}" "${tape_id}"
if test $? -gt 0; then
return 1
fi
;; ;;
ltfs-getattribute) ltfs-getattribute)
ltfs_is_mounted ltfs_is_mounted
if test $? -eq 0; then if test $? -gt 0; then
return 1
else
ltfs_get_attribute "${ltfs_attribute_name}" ltfs_get_attribute "${ltfs_attribute_name}"
if test $? -eq 0; then if test $? -gt 0; then
return 1
else
if [ $verbose -ge 1 ]; then if [ $verbose -ge 1 ]; then
printf "${MAGENTA}LTFS attribute ${GREEN}'%s'${MAGENTA} is: ${GREEN}'%s'${NO_COLOR}\n" \ printf "${MAGENTA}LTFS attribute ${GREEN}'%s'${MAGENTA} is: ${GREEN}'%s'${NO_COLOR}\n" \
"${ltfs_attribute_name}" "${ltfs_attribute_value}" "${ltfs_attribute_name}" "${ltfs_attribute_value}"
fi fi
fi fi
fi fi
return $?
;; ;;
ltfs-is-mounted) ltfs-is-mounted)
ltfs_is_mounted ltfs_is_mounted
if test $? -eq 0; then if test $? -gt 0; then
return 1
else
if [ $verbose -ge 1 ]; then if [ $verbose -ge 1 ]; then
printf "${MAGENTA}LTFS Tape is-mounted: ${GREEN}true${NO_COLOR}\n" printf "${MAGENTA}LTFS Tape is-mounted: ${GREEN}true${NO_COLOR}\n"
fi fi
fi fi
return $?
;; ;;
ltfs-mount) ltfs-mount)
ltfs_mount ltfs_mount
if test $? -eq 0; then if test $? -gt 0; then
return 1
else
if [ $verbose -ge 1 ]; then if [ $verbose -ge 1 ]; then
printf "${MAGENTA}LTFS Tape mount: ${GREEN}true${NO_COLOR}\n" printf "${MAGENTA}LTFS Tape mount: ${GREEN}true${NO_COLOR}\n"
fi fi
fi fi
return $?
;; ;;
ltfs-reformat) ltfs-reformat)
ltfs_reformat "${volume_name}" ltfs_reformat "${volume_name}"
if test $? -eq 0; then if test $? -gt 0; then
return 1
else
if [ $verbose -ge 1 ]; then if [ $verbose -ge 1 ]; then
printf "${MAGENTA}LTFS Tape reformat: ${GREEN}%s${NO_COLOR}\n" \ printf "${MAGENTA}LTFS Tape reformat: ${GREEN}%s${NO_COLOR}\n" \
"${volume_name}" "${volume_name}"
fi fi
fi fi
return $?
;; ;;
ltfs-umount) ltfs-umount)
ltfs_umount ltfs_umount
if test $? -eq 0; then if test $? -gt 0; then
return 1
else
if [ $verbose -ge 1 ]; then if [ $verbose -ge 1 ]; then
printf "${MAGENTA}LTFS Tape unmount: ${GREEN}true${NO_COLOR}\n" printf "${MAGENTA}LTFS Tape unmount: ${GREEN}true${NO_COLOR}\n"
fi fi
fi fi
return $?
;; ;;
media-change) media-change)
media_change $mediapool_name $volume_name media_change $mediapool_name $volume_name
if [ $verbose -ge 1 ]; then if test $? -gt 0; then
if [ ${#volume_name} -ge 1 ]; then return 1
printf "${MAGENTA}Media changed in pool: ${GREEN}%s${NO_COLOR} (Volume-Name: ${GREEN}%s${NO_COLOR})\n" \ else
"${mediapool_name}" "${volume_name}" if [ $verbose -ge 1 ]; then
else if [ ${#volume_name} -ge 1 ]; then
printf "${MAGENTA}Media changed in pool: ${GREEN}%s${NO_COLOR}\n" \ printf "${MAGENTA}Media changed in pool: ${GREEN}%s${NO_COLOR} (Volume-Name: ${GREEN}%s${NO_COLOR})\n" \
"${mediapool_name}" "${mediapool_name}" "${volume_name}"
else
printf "${MAGENTA}Media changed in pool: ${GREEN}%s${NO_COLOR}\n" \
"${mediapool_name}"
fi
fi fi
fi fi
return $?
;; ;;
mount) mount)
mount_tape $mediapool_name $volume_name mount_tape "${mediapool_name}" "${volume_name}"
return $? if test $? -gt 0; then
;; return 1
else
if [ $verbose -ge 1 ]; then
printf "${MAGENTA}Tape ${GREEN}'%s'${MAGENTA} for ${GREEN}'%s'${MAGENTA} mounted${NO_COLOR}\n" \
"${volume_name}" "${mediapool_name}"
fi
fi
;;
mtx-exchange) mtx-exchange)
mtx_exchange "${slot_source}" "${slot_target}" mtx_exchange "${slot_source}" "${slot_target}"
return $? return $?
@@ -2191,19 +2219,11 @@ case $cmd in
mtx_unload "${slot_source}" "${drive}" mtx_unload "${slot_source}" "${drive}"
return $? return $?
;; ;;
mount)
mount_tape "${mediapool_name}" "${volume_name}"
if test $? -eq 0; then
if [ $verbose -ge 1 ]; then
printf "${MAGENTA}Tape ${GREEN}'%s'${MAGENTA} for ${GREEN}'%s'${MAGENTA} mounted${NO_COLOR}\n" \
"${volume_name}" "${mediapool_name}"
fi
fi
return $?
;;
update-lastwrite) update-lastwrite)
update_lastwrite "${mediapool_name}" "${volume_name}" "${date_string}" update_lastwrite "${mediapool_name}" "${volume_name}" "${date_string}"
if test $? -eq 0; then if test $? -gt 0; then
return 1
else
if [ $verbose -ge 1 ]; then if [ $verbose -ge 1 ]; then
date_string_to_iso "${volume_lastwrite}" date_string_to_iso "${volume_lastwrite}"
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
@@ -2213,21 +2233,23 @@ case $cmd in
fi fi
fi fi
fi fi
return $?
;; ;;
update-mediapool-retensiondays) update-mediapool-retensiondays)
update_mediapool_retensiondays "${mediapool_name}" "${mediapool_defaultretensiondays}" update_mediapool_retensiondays "${mediapool_name}" "${mediapool_defaultretensiondays}"
if test $? -eq 0; then if test $? -gt 0; then
return 1
else
if [ $verbose -ge 1 ]; then if [ $verbose -ge 1 ]; then
printf "${MAGENTA}New DefaultRetensionDays attribute for ${GREEN}'%s'${MAGENTA} is: ${NO_COLOR}'%s'.\n" \ printf "${MAGENTA}New DefaultRetensionDays attribute for ${GREEN}'%s'${MAGENTA} is: ${NO_COLOR}'%s'.\n" \
"${mediapool_name}" "${mediapool_defaultretensiondays}" "${mediapool_name}" "${mediapool_defaultretensiondays}"
fi fi
fi fi
return $?
;; ;;
update-retensiondate) update-retensiondate)
update_retensiondate "${mediapool_name}" "${volume_name}" "${date_string}" update_retensiondate "${mediapool_name}" "${volume_name}" "${date_string}"
if test $? -eq 0; then if test $? -gt 0; then
return 1
else
if [ $verbose -ge 1 ]; then if [ $verbose -ge 1 ]; then
date_string_to_iso "${volume_retensiondate}" date_string_to_iso "${volume_retensiondate}"
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
@@ -2237,6 +2259,5 @@ case $cmd in
fi fi
fi fi
fi fi
return $?
;; ;;
esac esac