Chcę wykonać kopię zapasową 1 terabajta danych na dysku zewnętrznym.
Korzystam z tego polecenia: tar cf /media/MYDISK/backup.tar mydata
PROBLEM: Mój biedny laptop zawiesza się i ulega awarii, gdy używam 100% procesora lub 100% dysku (jeśli chcesz o tym zareagować, napisz tutaj ) . Więc chcę pozostać przy około 50% CPU i 50% dysku maks.
Moje pytanie: jak dławić procesor i dysk za pomocą tar
polecenia?
Rsync ma opcję --bwlimit, ale chcę archiwum, ponieważ 1) istnieje wiele małych plików 2) Wolę zarządzać pojedynczym plikiem zamiast drzewa. Dlatego używam tar
.
nice
nie zapobiegnie 100% zużyciu procesoraOdpowiedzi:
Możesz użyć
pv
do ograniczenia przepustowości rury. Ponieważ twój przypadek użycia jest silnie związany z IO, dodatkowe obciążenie procesora związane z przejściem przez potok nie powinno być zauważalne i nie musisz wykonywać żadnych operacji dławienia procesora.źródło
apt-get install pv
. Polecam dodanie `-b` po-L 1m
: w ten sposób będzie drukowany przyrostowy licznik bajtów, aktualizowany co sekundę. W ten sposób wiesz, ile bajtów zostało napisanych do tej porytar czf
zamiasttar cf
), limit odnosi się do danych skompresowanych (więc przy-L 1m
zapisie na dysku nie przekroczysz 1 MB / s .... ale odczyt dysku prawdopodobnie będzie wynosił między 1 MB / s i 5 MB / s, w zależności od typu zawartości)Możesz wypróbować narzędzie cpulimit, które ogranicza procent procesora. To nie jest standardowe narzędzie, więc musisz je zainstalować. Oto krótki fragment README:
W takim razie poleciłbym ionice do ograniczenia użycia IO, chociaż ograniczony byłby równoczesny dostęp, a nie maksymalna przepustowość ... Jednak nie mniej tutaj jest jak z niego korzystać:
źródło
Tak naprawdę nie można uzyskać mniejszego procesu . Możesz użyć,
nice
aby nadać mu niższy priorytet, ale dotyczy to innych procesów. Sposobem na uruchomienie procesora chłodzącego podczas działania procesu jestusleep(3)
wymuszenie przez proces określonego czasu, ale wymagałoby to łataniatar
lub użyciaLD_PRELOAD
mechanizmu w celu zapewnienia łatanej funkcji, któratar
często wykorzystuje (np.fopen(3)
).Podejrzewam, że twoje najlepsze obejścia to sprzętowe, o których wspomniałeś w SuperUser: utrzymywanie chłodu laptopa i / lub obniżanie zegara procesora.
Irytujące, ale prawdopodobnie realne obejście (kludge, naprawdę) działa na poziomie „makroskopowym”. Zamiast
tar
uruchamiać 100 ms co 200 ms, możesz sprawić, że będzie działać o jedną sekundę na każde dwa. Uwaga: to jest okropna, okropna kludge. Ale hej, to może nawet zadziałać!Pierwszy
sleep
dostosowuje czas snu, drugi dostosowuje czas działania. W obecnej postaci ma 50% cyklu pracy. Aby utrzymać niską temperaturę, najprawdopodobniej będziesz musiał zmniejszyć cykl pracy do około 25% lub mniej (1 sekunda pracy, 3 sekundy snu = 1 na każde 4 sekundy = 25% cyklu pracy). Nawiasemsleep
mówiąc, polecenie powłoki może zajmować ułamkowe czasy. Więc możesz nawet powiedziećsleep 0.1
. Dla pewności trzymaj go powyżej 0,001 i nie zapominaj, że wykonywanie skryptu również wydłuża czas.źródło
Bardziej ogólnym sposobem ograniczenia procesora jest użycie
/sys
. Wydaje się, że i tak chcesz, ponieważ rzeczy inne niżtar
są w stanie wykonywać kosztownie obliczeniowe zadania, po prostu to, co widzisz,tar
robi to najbardziej.Sposobem na to jest:
/sys/devices/system/cpu/cpuX/cpufreq
każdego procesora (zamień nacpuX
każdy procesor).scaling_available_frequencies
jakie częstotliwości obsługuje Twój procesor.echo 1234567 > scaling_max_freq
Zapobiegnie to przekroczeniu przez procesor częstotliwości powyżej określonej częstotliwości.
źródło