“Echo 3> / proc / sys / vm / drop_caches” - Autorizzazione negata come root


26

Attualmente sto riscontrando alcuni problemi con la cache. È un po 'troppo in questo momento, quindi volevo cancellarlo. Ho cercato su google e ho trovato questo piccolo comando: sync && echo 3 > /proc/sys/vm/drop_caches.
Ho effettuato l'accesso come root su SSH (non usando sudo). Questi sono i tentativi che ho fatto:

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

È una macchina remota che esegue Debian. Per quanto ne so ci sono alcuni vCores in questa macchina e utilizza Virtuozzo per la virtualizzazione.
Voglio solo cancellare la cache (quindi posso accedervi solo tramite SSH) .
Ho anche provato a registrarlo come cronjob. Ma fallisce anche semplicemente!


1
Lo stai eseguendo come root o stai usando sudo?
terdon

2
Sto eseguendo questo come root. Ma anche sudo fallisce.
BrainStone,

Non funziona neanche. Già provato. Stesso messaggio di errore.
BrainStone,

Vedi la A in questa domanda , potrebbe essere d'aiuto.
Risto Salminen,

Questo è estremamente improbabile, ma non si sa mai, esiste /proc/sys/vm/drop_cachesdavvero?
terdon

Risposte:


27

Ho effettuato l'accesso come root su SSH ... È una macchina remota che esegue Debian.

In realtà è una macchina remota o solo un sistema remoto ? Se questa è una sezione VPS da qualche parte, (almeno alcune forme di) virtualizzazione del sistema operativo (ad esempio openVZ) non lo consentirà all'interno del contenitore. Non si esegue la macchina, si esegue solo la fetta.


2
Non c'è modo ???
BrainStone,

1
Probabilmente no, dal momento che non avrebbe molto senso non permetterlo se esistessero metodi alternativi che funzionavano.
Riccioli d'oro,

2
@BrainStone - Uso OpenVZ, non è possibile!
slm

36

sudo deve coprire l'intero reindirizzamento in modo che possa essere eseguito completamente da root:

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

5
questo in realtà ha funzionato per me (con la giusta posizione binaria per l'eco)
orm

in OpenVZ non funziona
shilovk

1
in alternativa, potresti usare tee invece:echo 3 | sudo tee /proc/sys/vm/drop_caches
mchid

1
@mchid, considera di aggiungere il tuo commento come risposta. Ha funzionato anche per me nella macchina virtuale di Azure.
Erik Shilts,

È già root, vedi # all'inizio della riga. Vale la pena notare il problema con sudo, ma per un'altra domanda.
Alexei Martianov,

13

Questo è un comportamento normale nella virtualizzazione a livello di sistema operativo. Questo può essere eseguito solo da qualcuno con accesso root al nodo hardware.

Con ad esempio OpenVZ , non si ottiene la propria istanza del kernel e, in quanto tale, non è possibile eseguire comandi come questo.

Tutti condividono la stessa cache di pagina, quindi per eliminare le cache solo della tua istanza, il kernel deve verificare se la pagina appartiene a te e se anche le altre istanze non utilizzano questa pagina.

Con un'altra tecnica di virtualizzazione come KVM o Xen questo potrebbe funzionare.


1
Quindi potrei / dovrei / devo contattare il mio hoster per cancellare la cache per me? E come faccio a sapere su quale "tecnica di virtualizzazione" si trova il mio sistema?
BrainStone,

Sì, potresti non venire in questo ...
caos,

Non sono sicuro se questo è giusto. Sto eseguendo alcuni VM su aws e Xen e sono in grado di eseguire drop_caches.

2
La differenza è tra la virtualizzazione del sistema operativo (OpenVZ, LXC) e la virtualizzazione della piattaforma (QEMU, Xen), entrambe con vantaggi e svantaggi rispetto all'altra.
Riccioli d'oro,

1
@bersch Xen utilizza un proprio kernel per le macchine virtuali. OpenVZ no. Puoi pensare a OpenVZ come a un "chroot" migliore.
Nils,

8

È possibile utilizzare echopiped per sudo teeconsentire l'autorizzazione appropriata necessaria quando è necessario eseguire l'eco come root.

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

Utilizzare tee --helpper elencare più opzioni.


1

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

Questo comando funziona per me senza /usr/bin/echouna risposta mchid. Stava dando errore sh: 1: /usr/bin/echo: not found. Quindi usato solo 'echo'


-1

Ho avuto lo stesso problema quando ho provato ad usare sudo in questo modo:

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

La mia soluzione era passare temporaneamente al root. Obbedientemente, tale autorizzazione deve essere abilitata sul tuo sistema:

sudo su -  #temporarily switch to root user
echo 1 > /proc/sys/vm/overcommit_memory
exit # Exit as root.  

-2

Utilizzando una piccola macchina virtuale con OpenStack e questo funziona (eseguendo Debian):

sync && sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.