Tiếng vang vọng 3> / Proc / sys / vm / drop_caches '- Quyền bị từ chối là root


26

Tôi hiện đang có một số vấn đề với bộ đệm. Đó là một chút quá nhiều ngay bây giờ vì vậy tôi muốn xóa nó. Tôi googled và tìm thấy lệnh nhỏ này : sync && echo 3 > /proc/sys/vm/drop_caches.
Tôi đã đăng nhập bằng root qua SSH (không sử dụng sudo). Đây là những nỗ lực tôi đã thực hiện:

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

Nó là một máy từ xa chạy Debian. Theo tôi biết có một số vCores trong máy này và nó sử dụng Virtuozzo để ảo hóa.
Tôi thực sự chỉ muốn xóa bộ nhớ cache (Vì vậy tôi chỉ có thể truy cập nó bằng SSH) .
Tôi cũng đã thử đăng ký này như là một cronjob. Nhưng đơn giản là nó cũng thất bại!


1
Bạn đang chạy cái này với quyền root hay bạn đang sử dụng sudo?
terdon

2
Tôi đang chạy này là root. Nhưng sudo cũng thất bại.
BrainStone

Cũng không hoạt động. Đã thử nó. Thông báo lỗi tương tự.
BrainStone

Xem slm A về câu hỏi này , nó có thể giúp.
Risto Salminen

Điều này là vô cùng khó, nhưng bạn không bao giờ biết, có /proc/sys/vm/drop_cachesthực sự tồn tại?
terdon

Câu trả lời:


27

Tôi đã đăng nhập bằng root qua SSH ... Đây là một máy từ xa chạy Debian.

Nó thực sự là một máy từ xa, hay chỉ là một hệ thống từ xa ? Nếu đây là một lát VPS ở đâu đó, (ít nhất là một số dạng) ảo hóa hệ điều hành (ví dụ openVZ) sẽ không cho phép điều này từ trong container. Bạn không chạy máy, bạn chỉ chạy lát của bạn.


2
Có giống như không có cách nào ???
BrainStone

1
Có lẽ là không, vì sẽ không có nhiều điểm trong việc không cho phép nó nếu có các phương pháp thay thế có hiệu quả.
goldilocks

2
@BrainStone - Tôi sử dụng OpenVZ, điều đó là không thể!
slm

36

sudo phải bao gồm toàn bộ chuyển hướng để nó có thể được thực thi hoàn toàn bằng root:

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

5
điều này thực sự hiệu quả với tôi (với vị trí nhị phân phù hợp cho tiếng vang)
orm

trong OpenVZ không hoạt động
shilovk

1
cách khác, bạn có thể sử dụng tee thay thế:echo 3 | sudo tee /proc/sys/vm/drop_caches
mchid

1
@mchid, xem xét thêm nhận xét của bạn như một câu trả lời. Nó cũng hoạt động với tôi trên Azure VM.
Erik Shilts

Nó đã root rồi, xem # ở đầu dòng. Vấn đề với sudo là đáng chú ý, nhưng cho một câu hỏi khác.
Alexei Martianov 18/03/18

13

Đây là hành vi bình thường trong ảo hóa cấp hệ điều hành. Điều này chỉ có thể được thực thi bởi người có quyền truy cập vào nút phần cứng.

Ví dụ như OpenVZ , bạn không nhận được cá thể kernel của riêng mình và do đó, bị hạn chế thực hiện các lệnh như thế này.

Tất cả đều chia sẻ cùng một bộ đệm trang, do đó, chỉ để xóa bộ nhớ cache của cá thể bạn, kernel phải kiểm tra xem trang đó có thuộc về bạn hay không và các trường hợp khác cũng không sử dụng trang này.

Với một kỹ thuật ảo hóa khác như KVM hoặc Xen, điều này có thể hoạt động.


1
Vì vậy, tôi có thể / nên / phải liên hệ với hoster của tôi để xóa bộ nhớ cache cho tôi? Và làm cách nào để tìm ra "kỹ thuật ảo hóa" hệ thống của tôi là gì?
BrainStone

Vâng, bạn có thể không đến đây ...
hỗn loạn

Tôi không shure nếu điều này là đúng. Tôi đang chạy một số vm tại aws và Xen và tôi có thể drop_caches.

2
Sự khác biệt là giữa ảo hóa hệ điều hành (OpenVZ, LXC) và ảo hóa nền tảng (QEMU, Xen), cả hai đều có ưu điểm và biến dạng so với cái khác.
goldilocks

1
@bersch Xen sử dụng kernel riêng cho VM. OpenVZ thì không. Bạn có thể nghĩ OpenVZ giống như một "chroot" tốt hơn.
Nils

8

Bạn có thể sử dụng echođường ống để sudo teecho phép quyền thích hợp cần thiết khi bạn cần lặp lại với quyền root.

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

Sử dụng tee --helpđể liệt kê nhiều tùy chọn hơn.


0

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

Lệnh này làm việc cho tôi mà không có /usr/bin/echotrong câu trả lời mchid. Đó là lỗi sh: 1: /usr/bin/echo: not found. Vì vậy, chỉ sử dụng 'echo'


-1

Tôi đã gặp vấn đề tương tự khi tôi cố gắng sử dụng sudo như thế này:

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

Giải pháp của tôi là tạm thời chuyển sang root. Nghiêm túc, quyền đó phải được kích hoạt trên hệ thống của bạn:

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

-2

Sử dụng cài đặt VM vui nhộn với OpenStack và điều này hoạt động (chạy Debian):

sync && sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.