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 tar
comando?
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
.
nice
no impedirá el uso del 100% de la CPURespuestas:
Puede usar
pv
para 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 czf
lugar detar cf
) el límite se refiere a la salida comprimida (por lo tanto, con-L 1m
su 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
nice
para 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 parcheartar
o usar elLD_PRELOAD
mecanismo para proporcionar una función parcheada quetar
usa 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
tar
correr 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
sleep
ajusta 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 shellsleep
puede 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 notar
son capaces de realizar tareas computacionalmente costosas, es solo que lo estás viendotar
hacer más.La forma de hacer esto es:
/sys/devices/system/cpu/cpuX/cpufreq
para cada una de sus CPU (reemplacecpuX
con cada CPU).scaling_available_frequencies
para ver qué frecuencias admite su CPU.echo 1234567 > scaling_max_freq
Esto evitará que la CPU supere la frecuencia especificada.
fuente