Sida 1 av 1

Reducera hastigheten på kopiering med cp -R. Hur göra!?

Postat: 26 sep 2023, 10:07
av civilpolisen
Vi ska kopiera en stor mängd data från en server som har aktiva användare. De två valen som har diskuterats är att antingen köra kopieringen efter kontorstid, typ efter kl. 17.

Alternativet finns också att reducera hastigheten på själva kopieringen och att användare kan vara vid servern under dagtid utan att det märks.

Hur kan jag kopiera cp -R långsammare!?

Re: Reducera hastigheten på kopiering med cp -R. Hur göra!?

Postat: 26 sep 2023, 21:51
av Osprey
Det du kan göra är att använda "nice" så att kopieringen får lägre prioritet än vanliga processer. Typ:

Kod: Markera allt

nice +1 cp -R from to
...om du ska ha "+1" eller något annat får du avgöra själv. Titta på "man nice"...

(om du kör "+1" eller "+20" spelar ingen roll om det inte finns något annat med prioritet däremellan. Normalt ligger processer på "0")

Re: Reducera hastigheten på kopiering med cp -R. Hur göra!?

Postat: 27 sep 2023, 08:29
av civilpolisen
Tack! En väldigt snygg lösning! :-)

Re: Reducera hastigheten på kopiering med cp -R. Hur göra!?

Postat: 01 okt 2023, 13:41
av Osprey
För den delen så är "rsync" mycket effektivare än "cp" om du ska ta backup på saker. Här är ett litet script som jag "hackat ihop" för sådant och som bevarar allting för filerna och som bara kopierar det som har förändrats:

Kod: Markera allt

#! /bin/bash
#
# -Almost identical to LuckyBackup
#
function lastchar {
	echo $1 | rev | cut -b 1
}
if [[ -z $1 || $1 == "-h" || $1 == "--help" ]]; then
	echo
	echo "rs FROM TO"
	echo
	echo "   FROM   -   Name of folder to copy"
	echo "   TO     -   Target folder"
	echo
	echo "   Everything in folder FROM will be copied to folder TO. If no folder with same basename (last directory name) as in FROM exists, you will be asked about creating one."
	echo
	exit
fi
#
INFO="-h --progress --stats"			# -human + full info
PRESERVE="-tgo -p"					# -times -group -owner -permissions
SELECT="-r -D"						# -recursive -Device_files
CLEAN="--update --delete-after --delete-excluded"
EXCLUDE_TEMP="--exclude=**/*tmp*/"
EXCLUDE_CACHE="--exclude=**/*cache*/ --exclude=**/*Cache*"
EXCLUDE_TRASH="--exclude=**/*Trash*/ --exclude=**/*trash*"
EXCLUDE_SAMBA="--exclude=**/.gvfs --exclude=**/*smb4k*/"
#
if [[ -z $1 ]]; then
	while true; do
		read -p "_From: " FROMSPEC
		if [[ ! -z $FROMSPEC ]]; then
			break
		fi
	done
else
	FROMSPEC=$1
fi
if [[ ! -r $FROMSPEC ]]; then
	echo " $FROMSPEC does not exist or is not readable"
	exit 2
fi
#
if [[ -z $2 ]]; then
	while true; do
		read -p "_To: " TOSPEC
		if [[ ! -z $TOSPEC ]]; then
			break
		fi
	done
else
	TOSPEC=$2
fi
if [[ ! -w $TOSPEC ]]; then
	mkdir $TOSPEC
fi
FROMLAST=$(lastchar $FROMSPEC)
if [[ $FROMLAST != "/" ]]; then
	FROM=$FROMSPEC"/"
else
	FROM=$FROMSPEC
fi
TOLAST=$(lastchar $TOSPEC)
if [[ $TOLAST != "/" ]]; then
	TO=$TOSPEC"/"
else
	TO=$TOSPEC
fi
FROMDIR=$(basename $FROMSPEC)
TODIR=$(basename $TOSPEC)
#
if [[ ! -e $TO$FROMDIR ]]; then
	echo "-Making $TO$FROMDIR..."
	mkdir -p $TO$FROMDIR
	TO2=$TO$FROMDIR
else
	TO2=$TO
fi
#
echo
echo "--Rsync:      From=$FROM   To=$TO2"
echo "--Executing:  rsync $INFO $PRESERVE $SELECT $CLEAN $EXCLUDE_TEMP $EXCLUDE_CACHE $EXCLUDE_TRASH $EXCLUDE_SAMBA $FROM $TO2"
rsync $INFO $PRESERVE $SELECT $CLEAN $EXCLUDE_TEMP $EXCLUDE_CACHE $EXCLUDE_TRASH $EXCLUDE_SAMBA $FROM $TO2
sync
echo