„Echo 3> / proc / sys / vm / drop_caches” - Odmowa dostępu jako root

26

Mam obecnie problemy z pamięcią podręczną. To trochę za dużo, więc chciałem to wyjaśnić. Google i znalazłem ten mały komendę: sync && echo 3 > /proc/sys/vm/drop_caches.
Jestem zalogowany jako root przez SSH (nie używam sudo). Oto próby, które podjąłem:

root@server: ~ # ll /proc/sys/vm/drop_caches
-rw-r--r-- 1 root root 0 15. Jan 20:21 /proc/sys/vm/drop_caches

root@server: ~ # echo 3 > /proc/sys/vm/drop_caches
-bash: /proc/sys/vm/drop_caches: Permission denied

root@server: ~ # sudo su -c "echo 3 > /proc/sys/vm/drop_caches"
bash: /proc/sys/vm/drop_caches: Permission denied

root@server: ~ # echo 3 | sudo tee /proc/sys/vm/drop_caches
tee: /proc/sys/vm/drop_caches: Permission denied
3

Jest to zdalna maszyna z systemem Debian. O ile wiem, w tej maszynie jest kilka vCores i do wirtualizacji używa Virtuozzo.
Naprawdę chcę po prostu wyczyścić pamięć podręczną (więc mogę uzyskać do niej dostęp tylko za pomocą SSH) .
Próbowałem też zarejestrować to jako koleżankę. Ale to też po prostu zawodzi!

BrainStone
źródło
1
Czy używasz tego jako root, czy używasz sudo?
terdon
2
Używam tego jako root. Ale sudo również zawodzi.
BrainStone
To też nie działa. Już próbowałem. Ten sam komunikat o błędzie.
BrainStone
Zobacz slm's A na to pytanie , to może pomóc.
Risto Salminen
Jest to bardzo mało prawdopodobne, ale nigdy nie wiadomo, czy /proc/sys/vm/drop_cachesnaprawdę istnieje?
terdon

Odpowiedzi:

27

Jestem zalogowany jako root przez SSH ... To zdalna maszyna z systemem Debian.

Czy to rzeczywiście zdalna maszyna, czy tylko zdalny system ? Jeśli jest to gdzieś wycinek VPS , (przynajmniej niektóre formy) wirtualizacji systemu operacyjnego (np. OpenVZ) nie pozwoli na to z poziomu kontenera. Nie uruchamiasz maszyny, po prostu uruchamiasz swój kawałek.

Złotowłosa
źródło
2
Nie ma mowy ?
BrainStone
1
Prawdopodobnie nie, ponieważ nie byłoby sensu na to pozwalać, gdyby działały alternatywne metody.
goldilocks
2
@BrainStone - Używam OpenVZ, nie jest to możliwe!
slm
36

sudo musi obejmować całe przekierowanie, aby można je było całkowicie wykonać przez root:

$ sudo sh -c "/usr/bin/echo 3 > /proc/sys/vm/drop_caches"
rasty.g
źródło
5
to faktycznie działało dla mnie (z poprawną lokalizacją binarną dla echa)
orm
w OpenVZ nie działa
shilovk
1
alternatywnie możesz zamiast tego użyć tee:echo 3 | sudo tee /proc/sys/vm/drop_caches
mchid
1
@mchid, rozważ dodanie komentarza jako odpowiedzi. Działa również dla mnie na maszynie Wirtualnej platformy Azure.
Erik Shilts
Jest już zrootowany, patrz # na początku wiersza. Warto zwrócić uwagę na problem z sudo, ale na inne pytanie.
Aleksiej Martianow
13

Jest to normalne zachowanie w przypadku wirtualizacji na poziomie systemu operacyjnego. Może to wykonać tylko osoba z dostępem root do węzła sprzętowego.

Na przykład w OpenVZ nie dostajesz własnej instancji jądra i jako takie nie masz możliwości wykonywania takich poleceń.

Wszystkie współużytkują tę samą pamięć podręczną strony, więc aby upuścić pamięć podręczną tylko Twojej instancji, jądro musi sprawdzić, czy strona należy do Ciebie i czy inne instancje również nie korzystają z tej strony.

W przypadku innej techniki wirtualizacji, takiej jak KVM lub Xen, może to działać.

chaos
źródło
1
Czy mogę / powinnam / muszę skontaktować się z moim hosterem, aby wyczyścić pamięć podręczną? I jak mogę dowiedzieć się, na jakiej „technice wirtualizacji” działa mój system?
BrainStone
Tak, nie możesz tego obejść ...
chaos
Nie jestem pewien, czy to prawda. Używam vm na aws i Xen i jestem w stanie drop_caches.
2
Różnica polega na wirtualizacji systemu operacyjnego (OpenVZ, LXC) i wirtualizacji platformy (QEMU, Xen), które mają zalety i wady w porównaniu do innych.
goldilocks
1
@bersch Xen używa własnego jądra dla maszyn wirtualnych. OpenVZ nie. Możesz myśleć o OpenVZ jak o lepszym „chroot”.
Nils,
8

Możesz użyć echopotokowania, aby sudo teezezwolić na odpowiednie pozwolenie potrzebne, gdy potrzebujesz echa jako root.

echo 3 | sudo tee /proc/sys/vm/drop_caches

Użyj, tee --helpaby wyświetlić więcej opcji.

mchid
źródło
1

sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"

To polecenie działa dla mnie bez /usr/bin/echoodpowiedzi w mchid. To dawało błąd sh: 1: /usr/bin/echo: not found. Tak używany tylko „echo”

ascii_walker
źródło
-1

Miałem ten sam problem, gdy próbowałem użyć sudo w ten sposób:

sudo echo 1 > /proc/sys/vm/overcommit_memory

Moim rozwiązaniem było tymczasowe przejście do rootowania. Oczywiście, to uprawnienie musi być włączone w twoim systemie:

sudo su -  #temporarily switch to root user
echo 1 > /proc/sys/vm/overcommit_memory
exit # Exit as root.  
thebiggestlebowski
źródło
-2

Używanie podobnych ustawień VM z OpenStack i to działa (działa Debian):

sync && sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"
Secko
źródło