[+] Bash - skrypt czyszcz

Potrzebujesz pomocy z C, C++, perl, python, itp.
Awatar użytkownika
saturno
Junior Member
Posty: 744
Rejestracja: 08 lipca 2008, 20:04

[+] Bash - skrypt czyszczący pamięć, np. przed uruchomieniem VirtualBoksa

Post autor: saturno »

Witam.

Często używam VirtualBoksa np. żeby coś przetestować bez obawy o utratę prywatnych danych.
Jednak posiadając niezbyt wiele pamięci w komputerze (1GB) i przy coraz bardziej zasobożernych systemach, coraz częściej przy braku zasobów system bierze się za partycję wymiany przez co od razu widać spadek wydajności.
Wpadłem na pomysł, żeby znaleźć jakiś skrypt lub polecenie, które w sposób bezpieczny zwolni maksymalną ilość pamięci (z partycją wymiany włącznie), przed uruchomieniem VirtualBoksa, przez co istnieje wtedy bardzo duże prawdopodobieństwo, że partycja wymiany w ogóle nie zostanie użyta.

Na stronie: http://www.scottklarr.com/topic/134/lin ... om-memory/ znalazłem skrypt:

Kod: Zaznacz cały

#!/bin/bash
clear
sync
su -c "echo 3 > /proc/sys/vm/drop_caches"
exit 
Do niego dołączyłem polecenie (swojego autorstwa) zwalniające partycję /swap:

Kod: Zaznacz cały

kdesu 'swapoff -a && swapon -a'
Po ,,zmiksowaniu'' powyższych wyszedł mi następujący skrypt:

Kod: Zaznacz cały

#!/bin/bash
clear
sync
kdesu 'swapoff -a && swapon -a && echo 3 > /proc/sys/vm/drop_caches'
VirtualBox
exit
Tłumaczenie (moje):
  • clear - czyszczenie czegoś, chyba terminala
  • sync - zapisywanie danych na dysku, które mogą (powinny) być zapisane
  • kdesu 'swapoff -a && swapon -a && echo 3 > /proc/sys/vm/drop_caches' - [podniesienie uprawnień (KDE) oraz wykonanie polecenia wyłączającego i włączającego ponownie partycję wymiany (/swap) ("-a" ponieważ mam tylko jedną partycję /swap), a po jego wykonaniu, wykonanie kolejnego polecenia (również z podwyższonymi uprawnieniami) zwalniającego maksymalną ilość zasobów pamięci.
  • VirtualBox - uruchomienie VirtualBoksa lub innego programu z uprawnieniami zwykłego użytkownika.
  • exit - po zamknięciu programu z powyższej linii wyłączenie czegoś tam.
    Skrypt ustawiam jako wykonywalny, więc nawet bez konsoli jest wykonywany po kliknięciu w niego.
    Koniec :)
Teraz w czym problem, bo podałem cały skrypt (chyba poprawnie działający).
No właśnie chyba poprawnie działający i w związku z tym mam prośbę o:
  1. Zweryfikowanie całego skryptu, czy nie zawiera on czegoś co mogłoby uszkodzić dane?
  2. Zweryfikowanie, czy któreś z powyższych poleceń nie jest pomijane oraz czy są wykonywane zgodnie z uprawnieniami podanymi w opisie pod skryptem?
Pozdrawiam.
saturno
LiTE
Beginner
Posty: 208
Rejestracja: 25 marca 2008, 13:22
Lokalizacja: Nowa Ruda

Post autor: LiTE »

Kod: Zaznacz cały

swapoff -a
Jeżeli będzie dużo zajętej pamięci to może Ci wyświetlić komunikat, że nie potrafi zaalokować pamięci bo jest jej za mało (tej fizycznej).
Awatar użytkownika
saturno
Junior Member
Posty: 744
Rejestracja: 08 lipca 2008, 20:04

Post autor: saturno »

Komunikatu nie wyświetli nawet gdybym skrypt uruchamiał w konsoli, bo ta jego część jest wykonywana tak jakby w tle (kdesu).
A ogólnie wiem o tym, ale to raczej nie jest wielkim problemem, bo skrypt ma zwalniać tylko tą pamięć swap która nie została zwolniona po wyłączeniu jakiejś aplikacji oraz tą która namnożyła się podczas kilkugodzinnego używania komputera.
Tak więc przypadek o którym piszesz nie powinien mieć raczej miejsca, jeśli przed uruchamianiem skryptu pozamykam wcześniej niepotrzebne programy (choćby tylko te najbardziej pamięciożerne).

Jednak przetestowałem nawet i taką sytuację i okazało się, że jeśli uruchomimy skrypt w czasie gdy uruchomione są jakieś aplikacje mocno obciążające pamięć (swap), to wtedy ta część skryptu jest pomijana i uruchamiany jest normalnie VirtualBox.
Nie jest, to chyba jakimś szczególnym problemem jeśli chodzi o ryzyko utraty danych, bo swap nie jest zwalniany i tyle (chyba, że o czymś nie wiem?).

Przy okazji zauważyłem ciekawą właściwość skryptu: jeśli w okienku gdzie wpisujemy hasło wciśniemy anuluj, to VirtualBox i tak się uruchomi tylko z tym, że pamięć przed jego uruchomieniem nie zostanie zwolniona. Miałem robić osobny aktywator uruchamiający skrypt jednak w takim układzie okazuje się, że nie będzie to potrzebne bo osoby nie znające hasła również będą mogły uruchomić VirtualBoksa.

Ps.: W dalszym ciągu czekam na odpowiedź na pytania zadane w pierwszym temacie (wystarczy krótko i konkretnie).

Dodane:
Lekko przerobiłem skrypt, bo przy większym obciążeniu pamięci jej czyszczenie może potrwać dłuższą chwilę, więc zamiast VirtualBoksa skrypt teraz na końcu uruchamia program: GKrellM i można od razu przejrzeć efekty działania.
Załączam zawartość skryptu w ostatecznej formie:

Kod: Zaznacz cały

#!/bin/bash
clear
sync
kdesu 'swapoff -a && swapon -a && echo 3 > /proc/sys/vm/drop_caches'
gkrellm
exit
Po prawie miesiącu codziennego testowania (na ext3) nie zauważyłem żadnych skutków ubocznych więc można przyjąć, że skrypt jest bezpieczny.
Temat uważam za rozwiązany.
Dziękuję za pomoc (choć myślałem, że będzie większe zainteresowanie).

Pozdrawiam
saturno
ODPOWIEDZ