“Echo 3> / proc / sys / vm / drop_caches” - у дозволі відхилено як root


26

Наразі у мене є деякі проблеми з кешем. Зараз це занадто багато, тому я хотів це очистити. Я гугл і знайшов цю маленьку команду: sync && echo 3 > /proc/sys/vm/drop_caches.
Я увійшов як root через SSH (не використовуючи sudo). Ось такі спроби, які я робив:

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

Це віддалена машина, на якій працює Debian. Наскільки я знаю, в цій машині є деякі vCores, і він використовує Virtuozzo для віртуалізації.
Я дуже просто хочу очистити кеш (тому я можу отримати доступ до нього лише за допомогою SSH) .
Я також спробував зареєструвати це як кронбук. Але це теж просто не вдається!


1
Ви запускаєте це як root або використовуєте sudo?
— terdon

2
Я запускаю це як корінь. Але судо теж не вдається.
— BrainStone

Не працює також. Вже спробував. Те саме повідомлення про помилку
— BrainStone

Дивіться у цьому записі A на цьому , це може допомогти.
— Рісто Салмінен

Це вкрай малоймовірно, але ти ніколи не знаєш, чи /proc/sys/vm/drop_cachesіснує насправді?
— terdon

Відповіді:


27

Я увійшов як root через SSH ... Це віддалена машина, на якій працює Debian.

Це насправді віддалена машина чи просто віддалена система ? Якщо десь це фрагмент VPS , (принаймні деякі форми) віртуалізація ОС (наприклад, openVZ) не дозволить цього зсередини контейнера. Ви не запускаєте апарат, ви просто запускаєте фрагмент.


2
Немає ніякого способу ???
— BrainStone

1
Можливо, ні, оскільки не було б сенсу не дозволяти цього, якби існували альтернативні методи.
— золотинки

2
@BrainStone - я використовую OpenVZ, це неможливо!
— slm

36

sudo має охоплювати ціле перенаправлення, щоб воно могло бути повністю виконане коренем:

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

5
це насправді спрацювало для мене (з правильним бінарним розташуванням для відлуння)
— orm

у OpenVZ не працюють
— шиловк

1
Ви також можете замість цього використати трійник:echo 3 | sudo tee /proc/sys/vm/drop_caches
— mchid

1
@mchid, розгляньте, як додати коментар як відповідь. Він також працював для мене на Azure VM.
— Ерік Шильц

Це вже корінь, дивіться # на початку рядка. Випуск із судо варто відзначити, але для іншого питання.
— Олексій Мартьянов

13

Це нормальна поведінка при віртуалізації на рівні ОС. Це може виконати лише хтось із кореневим доступом до апаратного вузла.

Наприклад, OpenVZ , ви не отримуєте власний екземпляр ядра і, як такий, обмежуєте виконувати такі команди.

Усі мають спільний кеш сторінок, тому, щоб скидати кеші лише вашого примірника, ядро ​​повинно перевірити, належить ли вам сторінка, і якщо інші екземпляри теж не використовують цю сторінку.

З іншою технікою віртуалізації, такою як KVM або Xen, це може працювати.


1
Тож я міг / повинен / повинен зв’язатися зі своїм хостером, щоб очистити кеш для мене? І як я дізнаюся, на якій «техніці віртуалізації» використовується моя система?
— BrainStone

Так, ви можете не обійтись цим ...
— хаос

Я не заперечую, чи правильно це. Я запускаю кілька VM в Aws і Xen, і я в змозі drop_caches.

2
Різниця полягає у віртуалізації ОС (OpenVZ, LXC) і віртуалізації платформи (QEMU, Xen), які мають переваги та недоліки порівняно з іншими.
— золотинки

1
@bersch Xen використовує власне ядро ​​для VM. OpenVZ цього не робить. Ви можете думати про OpenVZ як кращий "chroot".
— Нілс

8

Ви можете використовувати echopiped, щоб sudo teeдозволити належний дозвіл, необхідний, коли вам потрібно відлунювати як root.

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

Використовуйте tee --helpдля переліку додаткових варіантів.


1

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

Ця команда працює для мене без /usr/bin/echomchid відповіді. Це дало помилку sh: 1: /usr/bin/echo: not found. Тож використовується лише "відлуння"


-1

У мене була така ж проблема, коли я намагався використовувати судо так:

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

Моє рішення полягало в тимчасовому переході на root. Очевидно, що цей дозвіл повинен бути включений у вашій системі:

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

-2

Використання усміхнених налаштувань VM з OpenStack, і це працює (працює під управлінням Debian):

sync && sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.