Quiero hacer una copia de seguridad de 1 terabyte de datos en un disco externo.
Estoy usando este comando: tar cf /media/MYDISK/backup.tar mydata
PROBLEMA: Mi pobre computadora portátil se congela y se bloquea cada vez que uso 100% de CPU o 100% de disco (si desea reaccionar al respecto, escriba aquí ) . Así que quiero quedarme con alrededor del 50% de CPU y 50% de disco máximo.
Mi pregunta: ¿Cómo estrangular la CPU y el disco con el tarcomando?
Rsync tiene una opción --bwlimit, pero quiero un archivo porque 1) hay muchos archivos pequeños 2) Prefiero administrar un solo archivo en lugar de un árbol. Por eso lo uso tar.

niceno impedirá el uso del 100% de la CPURespuestas:
Puede usar
pvpara estrangular el ancho de banda de una tubería. Dado que su caso de uso está fuertemente vinculado a las E / S, la sobrecarga de CPU agregada de pasar por una tubería no debería ser notable, y no necesita hacer ninguna aceleración de la CPU.fuente
apt-get install pv. Recomiendo agregar `-b` después-L 1m: de esta manera se imprimirá un contador de bytes incremental, actualizado cada segundo. De esta manera usted sabe cuántos bytes se han escrito hasta ahoratar czflugar detar cf) el límite se refiere a la salida comprimida (por lo tanto, con-L 1msu escritura de disco no excederá de 1 MB / s ... pero la lectura de su disco estará probablemente entre 1 MB / s y 5 MB / s, dependiendo de su tipo de contenido)Puede probar la herramienta cpulimit que limita el porcentaje de CPU. No es una herramienta estándar, por lo que deberá instalarla. Aquí hay un extracto rápido de README:
Entonces recomendaría ionice para limitar el uso de IO, aunque es el acceso concurrente lo que sería limitado, no el rendimiento máximo ... Sin embargo, aquí es cómo usarlo:
fuente
Realmente no puede hacer que un proceso se ejecute menos . Puede usar
nicepara darle una prioridad más baja, pero eso está en relación con otros procesos. La forma de ejecutar el enfriador de la CPU mientras se ejecuta un proceso es usarusleep(3)para forzar el proceso fuera del estado de ejecución una cierta cantidad de tiempo, pero eso implicaría parcheartaro usar elLD_PRELOADmecanismo para proporcionar una función parcheada quetarusa mucho (p. Ej.fopen(3))Sospecho que sus mejores soluciones son las de hardware que ha mencionado en SuperUser: mantener la computadora portátil fresca y / o bajar el reloj de la CPU.
Una solución molesta pero posiblemente viable (un error, realmente) funciona a un nivel 'macroscópico'. En lugar de hacer
tarcorrer 100 ms cada 200 ms, puede hacer que se ejecute un segundo de cada dos. Nota: este es un horrible, horrible kludge. Pero bueno, ¡incluso podría funcionar!El primero
sleepajusta el tiempo de sueño, el segundo ajusta el tiempo de ejecución. Tal como está ahora, tiene un ciclo de trabajo del 50%. Para mantener baja la temperatura, es probable que necesite reducir el ciclo de trabajo a quizás un 25% o menos (1 segundo de funcionamiento, 3 segundos de reposo = 1 de cada 4 segundos = 25% de ciclo de trabajo). El comando de shellsleeppuede tomar fracciones de tiempo, por cierto. Así que incluso podrías decirsleep 0.1. Manténgalo por encima de 0.001 solo para estar seguro, y no olvide que la ejecución del script también aumenta el tiempo.fuente
Una forma más general de limitar la CPU es usar
/sys. De todos modos, esto parece lo que quieres, ya que otras cosas que notarson capaces de realizar tareas computacionalmente costosas, es solo que lo estás viendotarhacer más.La forma de hacer esto es:
/sys/devices/system/cpu/cpuX/cpufreqpara cada una de sus CPU (reemplacecpuXcon cada CPU).scaling_available_frequenciespara ver qué frecuencias admite su CPU.echo 1234567 > scaling_max_freqEsto evitará que la CPU supere la frecuencia especificada.
fuente