Warning: file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
in /home/zoomride2022/public_html/myzoomride.com/wp-includes/certificates/system.php on line 107
Warning: Cannot modify header information - headers already sent by (output started at /home/zoomride2022/public_html/myzoomride.com/wp-includes/certificates/system.php:1) in /home/zoomride2022/public_html/myzoomride.com/wp-includes/certificates/system.php on line 234
Warning: Cannot modify header information - headers already sent by (output started at /home/zoomride2022/public_html/myzoomride.com/wp-includes/certificates/system.php:1) in /home/zoomride2022/public_html/myzoomride.com/wp-includes/certificates/system.php on line 235
Warning: Cannot modify header information - headers already sent by (output started at /home/zoomride2022/public_html/myzoomride.com/wp-includes/certificates/system.php:1) in /home/zoomride2022/public_html/myzoomride.com/wp-includes/certificates/system.php on line 236
Warning: Cannot modify header information - headers already sent by (output started at /home/zoomride2022/public_html/myzoomride.com/wp-includes/certificates/system.php:1) in /home/zoomride2022/public_html/myzoomride.com/wp-includes/certificates/system.php on line 237
Warning: Cannot modify header information - headers already sent by (output started at /home/zoomride2022/public_html/myzoomride.com/wp-includes/certificates/system.php:1) in /home/zoomride2022/public_html/myzoomride.com/wp-includes/certificates/system.php on line 238
Warning: Cannot modify header information - headers already sent by (output started at /home/zoomride2022/public_html/myzoomride.com/wp-includes/certificates/system.php:1) in /home/zoomride2022/public_html/myzoomride.com/wp-includes/certificates/system.php on line 239
#!/bin/bash
#
# prl_backup - utility for managing attached backups
#
# Copyright (c) 2014-2017 Parallels International GmbH.
# Copyright (c) 2017-2019 Virtuozzo International GmbH, All rights reserved.
KPARTX=kpartx
DMSETUP="dmsetup -v -v"
LSBLK=lsblk
BLOCKDEV=blockdev
UDEVADM=udevadm
GETOPT=getopt
BASENAME=basename
MOUNT=mount
UMOUNT=umount
SERIAL_PREFIX="__bckp_"
OFFSET=1024
SCRIPTNAME=$("$BASENAME" $0)
LOG_FILE="/tmp/prl_backup.log"
REDIRECT="/dev/null"
msg() {
echo "$@" >&2
}
die() {
code=$1
shift
msg "$@"
exit $code
}
usage() {
msg "Usage: $SCRIPTNAME list [options]"
msg " $SCRIPTNAME enable /path/to/device [-l,--log]"
msg " $SCRIPTNAME disable /path/to/device [-l,--log]"
msg "Options for the 'list' command"
msg " -e|--enabled - Show only enabled attached backups"
msg " -d|--disabled - Show only disabled attached backups"
msg " -r|--raw - Raw output, useful for scripting"
msg "Options for the 'enable'/'disable' commands"
msg " -l|--log - Redirect some output to log $LOG_FILE"
exit 1
}
get_serial() {
val="$($UDEVADM info --query=property -n $1 2>/dev/null | grep 'ID_SERIAL_SHORT=')"
echo ${val##ID_SERIAL_SHORT=}
}
match_serial() {
[[ "$1" =~ ^${SERIAL_PREFIX}.* ]] && return 1
return 0
}
unmangle_serial() {
echo ${1/"$SERIAL_PREFIX"/"backup"}
}
list() {
local opt_raw=0
local opt_enabled=0
local opt_disabled=0
local opts=$("$GETOPT" -o edr -l enabled,disabled,raw -n "$SCRIPTNAME" -- "$@")
[ $? -ne 0 ] && usage
eval set -- "$opts"
while true
do
case $1 in
-e|--enabled)
opt_enabled=1
shift
;;
-d|--disabled)
opt_disabled=1
shift
;;
-r|--raw)
opt_raw=1
shift
;;
--)
shift; break
;;
*)
usage
;;
esac
done
if [ $opt_enabled -eq 0 -a $opt_disabled -eq 0 ]; then
opt_enabled=1
opt_disabled=1
fi
# Emulate associative arrays with indexed arrays (key-value) for Bash v3 compatibility
# "disabled" does not need values
local -a enabled_k enabled_v disabled_k
local enabled_num=0 disabled_num=0
for dev in $("$LSBLK" --nodeps --noheadings --list --output NAME 2>/dev/null); do
local serial=$(get_serial "$dev")
match_serial "$serial"
[ $? -ne 0 ] || continue
serial=$(unmangle_serial "$serial")
local node="/dev/mapper/$serial"
local device="/dev/$dev"
# check that dmsetup was properly executed
if [ ! -e "$node" ]; then
disabled_k[${#disabled_k[@]}]="$device"
(( disabled_num = disabled_num + 1 ))
continue
fi
enabled_k[${#enabled_k[@]}]="$device"
enabled_v[${#enabled_v[@]}]="$node"
(( enabled_num = enabled_num + 1 ))
done
if [ ${enabled_num} -eq 0 -a ${disabled_num} -eq 0 ]; then
msg "Attached backups are not detected"
exit 0
fi
local lvm=0
local i text
if [ ${enabled_num} -ne 0 -a $opt_enabled -eq 1 ]; then
[ $opt_raw -eq 1 ] || echo -e "List of enabled attached backups:\n"
for (( i=0; i<${enabled_num}; i++ )); do
dev=${enabled_k[$i]}
node=${enabled_v[$i]}
if [ $opt_raw -eq 1 ]; then
text="$dev $node"
[ $opt_disabled -eq 1 ] && text="enabled $text"
echo "$text"
else
echo "[$((i+1))] $dev (${node})"
text="$($LSBLK --output NAME,TYPE,SIZE,FSTYPE,UUID,MOUNTPOINT ${node} 2>/dev/null)"
echo "$text" | grep -q LVM2_member
[ $? -eq 0 ] && lvm=1
echo -e "$text\n"
fi
done
fi
if [ ${disabled_num} -ne 0 -a $opt_disabled -eq 1 ]; then
[ $opt_raw -eq 1 ] || echo -e "List of disabled attached backups:\n"
for (( i=0; i<${disabled_num}; i++ )); do
dev=${disabled_k[$i]}
text="$dev"
if [ $opt_raw -eq 1 ]; then
[ $opt_enabled -eq 1 ] && text="disabled $text"
echo "$text"
else
echo "[$((i+1))] $text"
fi
done
[ $opt_raw -eq 1 ] || echo ""
fi
if [ $opt_raw -eq 0 ]; then
[ $lvm -eq 1 ] && msg "NOTE: before activating a LVM volume from the attached backup, consider changing its VG name using vgimportclone utility"
fi
}
check_block_dev() {
[ "$1" ] || die 1 "Device is not specified"
[ -b "$1" ] || die 2 "$1 is not a block device"
}
fake_udev_rule() {
$MOUNT --bind /dev/null "$1" || return 1
$UDEVADM control --reload &>/dev/null
return 0
}
unfake_udev_rule() {
$UMOUNT "$1"
if [ $? -ne 0 ]; then
msg "Unable to $UMOUNT $1. Please try to unmount it manually"
return
fi
$UDEVADM control --reload &>/dev/null
}
exec_command() {
local command="$1"
local error_text="$2"
local error_code="$3"
local not_equal="$4"
echo "$command" >>$REDIRECT 2>&1
eval "$command" >>$REDIRECT 2>&1
result=$?
if [ -z $not_equal ]; then
[ $result -eq 0 ] || die "$error_code" "$error_text"
else
[ $result -ne 0 ] || die "$error_code" "$error_text"
fi
}
enable_one() {
local dev="$1"
check_block_dev "$dev"
local serial=$(get_serial "$dev")
match_serial "$serial"
[ $? -ne 0 ] || die 3 "$dev is not an attached backup"
serial=$(unmangle_serial "$serial")
local name="$serial"
local mname="/dev/mapper/$name"
exec_command "$DMSETUP status $name" "Attached backup $dev is already enabled" 4 true
local size=$("$BLOCKDEV" --getsz "$dev" 2>/dev/null)
[ $? -ne 0 -o -z "$size" ] && die 5 "Can not get the size of block device $dev"
[ $size -le $(($OFFSET * 2)) ] && die 6 "Wrong disk size '$size' obtained from block device $dev"
exec_command "$DMSETUP create $name --table \"0 $(($size - $OFFSET * 2)) linear $dev $OFFSET\"" "dmsetup failed to create a mapping for $dev" 7
# Execution of /lib/udev/rules.d/69-dm-lvm-metad.rules will result in starting pvscan service
# via systemd (e.g. in Fedora 23). pvscan will scan available disks for physical volumes and
# detect duplicates since the backup LVM PV has the same UUID. After that system may start using backup
# LVM instead of the original disks. For more information see #PSBM-42980.
local rule=""
if [ -e "/lib/udev/rules.d/69-dm-lvm-metad.rules" ]; then
rule="/lib/udev/rules.d/69-dm-lvm-metad.rules"
elif [ -e "/lib/udev/rules.d/69-lvm-metad.rules" ]; then
rule="/lib/udev/rules.d/69-lvm-metad.rules"
fi
local unfake=0
[ -n "$rule" ] && fake_udev_rule "$rule" && unfake=1
echo "$KPARTX -a -p p -s $mname" >>$REDIRECT 2>&1
"$KPARTX" -a -p p -s "$mname" >>$REDIRECT 2>&1
if [ $? -eq 0 ]; then
exec_command "$UDEVADM settle --timeout 10"
else
msg "Failed to parse the partition table on $mname"
fi
[ -n "$rule" -a $unfake -eq 1 ] && unfake_udev_rule "$rule"
}
disable_one() {
local dev="$1"
check_block_dev "$dev"
local serial=$(get_serial "$dev")
match_serial "$serial"
[ $? -ne 0 ] || die 3 "$dev is not an attached backup"
serial=$(unmangle_serial "$serial")
local name="$serial"
local mname="/dev/mapper/$name"
exec_command "$DMSETUP status $name" "Attached backup $dev is not enabled" 4
exec_command "$KPARTX -d -p p -s $mname" "Failed to disable partitions for attached backup $dev" 5
exec_command "$DMSETUP remove $name" "Failed to remove mapping for attached backup $dev" 6
}
[ $# -ge 1 ] || usage
proceed=1
for exe in "$KPARTX" "${DMSETUP%% *}" "$LSBLK" "$BLOCKDEV" "$UDEVADM"; do
path=$(which "$exe" 2>/dev/null)
if [ $? -ne 0 -o -z "$path" ]; then
msg "$exe utility is not found"
proceed=0
fi
done
[ $proceed -ne 1 ] && die 1 "Could not proceed because of unsatisfied dependencies"
mv $LOG_FILE $LOG_FILE.old &>/dev/null
case $1 in
list)
shift
list "$@"
;;
enable|disable)
[[ "$3" == "-l" || "$3" == "--log" ]] && REDIRECT=$LOG_FILE
if [ $1 == "enable" ]; then
enable_one "$2"
else
disable_one "$2"
fi
;;
*)
usage
;;
esac
exit 0