"Echo 3> / proc / sys / vm / drop_caches" - Autorisation refusée en tant que root

26

J'ai actuellement quelques problèmes avec le cache. C'est un peu trop en ce moment donc je voulais le clarifier. J'ai googlé et trouvé cette petite commande: sync && echo 3 > /proc/sys/vm/drop_caches.
Je suis connecté en tant que root sur SSH (sans utiliser sudo). Ce sont les tentatives que j'ai faites:

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

Il s'agit d'une machine distante exécutant Debian. Autant que je sache, il y a des vCores dans cette machine et elle utilise Virtuozzo pour la virtualisation.
Je veux vraiment simplement vider le cache (donc je ne peux y accéder qu'en utilisant SSH) .
J'ai également essayé de l'enregistrer en tant que cronjob. Mais cela échoue tout simplement aussi!

BrainStone
la source
1
Exécutez-vous cela en tant que root ou utilisez-vous sudo?
terdon
2
Je lance ceci en tant que root. Mais sudo échoue également.
BrainStone
Ne fonctionne pas non plus. Je l'ai déjà essayé. Même message d'erreur.
BrainStone
Voir le slm A sur cette question , cela pourrait aider.
Risto Salminen
C'est extrêmement improbable, mais vous ne savez jamais, /proc/sys/vm/drop_cachesexiste-t- il réellement?
terdon

Réponses:

27

Je suis connecté en tant que root sur SSH ... C'est une machine distante exécutant Debian.

S'agit-il en fait d'une machine distante ou simplement d'un système distant ? S'il s'agit d'une tranche VPS quelque part, (au moins certaines formes de) virtualisation du système d'exploitation (par exemple openVZ) ne permettra pas cela à partir du conteneur. Vous ne lancez pas la machine, vous exécutez simplement votre tranche.

boucle d'or
la source
2
Il n'y a pas moyen ???
BrainStone
1
Probablement pas, car il ne servirait à rien de ne pas le permettre s'il y avait d'autres méthodes qui fonctionnaient.
goldilocks
2
@BrainStone - J'utilise OpenVZ, ce n'est pas possible!
slm
36

sudo doit couvrir toute la redirection pour pouvoir être complètement exécutée par root:

$ sudo sh -c "/usr/bin/echo 3 > /proc/sys/vm/drop_caches"
rasty.g
la source
5
cela a réellement fonctionné pour moi (avec le bon emplacement binaire pour l'écho)
orm
dans OpenVZ ne fonctionne pas
shilovk
1
Alternativement, vous pouvez utiliser le tee à la place:echo 3 | sudo tee /proc/sys/vm/drop_caches
mchid
1
@mchid, pensez à ajouter votre commentaire comme réponse. Cela a également fonctionné pour moi sur Azure VM.
Erik Shilts du
C'est déjà root, voir # au début de la ligne. Le problème avec sudo mérite d'être noté, mais pour une autre question.
Alexei Martianov
13

Il s'agit d'un comportement normal sous la virtualisation au niveau du système d'exploitation. Cela ne peut être exécuté que par une personne ayant un accès root au nœud matériel.

Avec par exemple OpenVZ , vous n'avez pas votre propre instance de noyau et en tant que tel, vous n'êtes pas autorisé à exécuter des commandes comme celle-ci.

Tous partagent le même cache de page, donc pour supprimer les caches de votre instance uniquement, le noyau doit vérifier si la page vous appartient et si les autres instances n'utilisent pas également cette page.

Avec une autre technique de virtualisation comme KVM ou Xen, cela pourrait fonctionner.

le chaos
la source
1
Donc je pourrais / devrais / dois contacter mon hébergeur pour vider le cache pour moi? Et comment connaître la «technique de virtualisation» de mon système?
BrainStone
Oui, vous ne pouvez pas contourner cela ...
chaos
Je ne suis pas sûr si c'est vrai. J'utilise des vm sur aws et Xen et je suis en mesure de drop_caches.
2
La différence est entre la virtualisation du système d'exploitation (OpenVZ, LXC) et la virtualisation de plate - forme (QEMU, Xen), qui ont toutes deux des avantages et des inconvénients par rapport à l'autre.
goldilocks
1
@bersch Xen utilise un propre noyau pour les machines virtuelles. OpenVZ ne fonctionne pas. Vous pouvez penser à OpenVZ comme un meilleur "chroot".
Nils
8

Vous pouvez utiliser echopiped pour sudo teeautoriser l'autorisation appropriée requise lorsque vous devez faire écho en tant que root.

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

Utilisez tee --helppour lister plus d'options.

mchid
la source
1

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

Cette commande fonctionne pour moi sans /usr/bin/echoréponse en mchid. Cela donnait une erreur sh: 1: /usr/bin/echo: not found. Donc utilisé uniquement «écho»

ascii_walker
la source
-1

J'ai eu le même problème lorsque j'ai essayé d'utiliser sudo comme ceci:

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

Ma solution était de passer temporairement en root. Manifestement, cette autorisation doit être activée sur votre système:

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

Utiliser les paramètres d'une VM smilar avec OpenStack et cela fonctionne (exécuter Debian):

sync && sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"
Secko
la source