Làm cách nào tôi có thể sử dụng bộ nhớ RAM cho thư mục / tmp và cách đặt mức sử dụng RAM tối đa cho nó?


92

Sau khi xem bình luận của Anonymous về câu hỏi Thư mục / tmp được dọn sạch như thế nào? , Tôi thấy rằng sẽ là một ý tưởng tuyệt vời để thực hiện trên hệ thống của mình, vì tôi có 16GB RAM và tôi chưa bao giờ sử dụng tất cả.

Các tập tin tạm thời của tôi không bao giờ được ghi vào đĩa. Chúng được ghi vào đĩa RAM. Tôi đã đặt tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0/ etc / fstab.

Câu hỏi của tôi là:

Tôi có thể đặt giá trị tối đa cho Sử dụng RAM /tmpkhông? Và trong trường hợp đó, điều gì sẽ xảy ra nếu vượt quá số lượng tối đa, nó có ghi vào ổ đĩa cứng không?

Tôi đã đọc một giải pháp trong đó nêu:

mkdir -p /tmp/ram
sudo mount -t tmpfs -o size=512M tmpfs /tmp/ram/

Nhưng theo hiểu biết của tôi, đây sẽ không phải là một giải pháp lâu dài. Nếu tôi cần nó là vĩnh viễn, nó phải được thêm vào /etc/fstabtập tin cấu hình.

Nếu đây là giải pháp chính xác, làm thế nào tôi có thể chuyển đổi lệnh mount đó thành một dòng trong /etc/fstab?


đây cũng là một ý tưởng tốt nếu bạn có và SSD vì bạn sẽ không 'tiêu thụ' nó với những bài viết không hữu ích ...
Postadelmaga

Ha ha chính xác cùng một câu hỏi đã đưa tôi đến đây: D
Teddy Markov

Câu trả lời:


80

Bạn hoàn toàn đúng. Mục nhập theo fstab sẽ như thế này:

tmpfs /tmp tmpfs defaults,noatime,nosuid,nodev,noexec,mode=1777,size=512M 0 0

Xin lưu ý:

Khi tmpfsđược lấp đầy, nó sẽ hoạt động như bất kỳ ổ cứng vật lý nào bằng cách đưa ra lỗi "không đủ dung lượng". Trong khi khởi động lại (và do đó làm trống bộ đệm) sẽ khắc phục điều này, bạn có thể gặp rắc rối khi một thao tác duy nhất tiêu tốn nhiều không gian hơn để bắt đầu với không gian trên đó tmpfs. Trong trường hợp này, máy tính của bạn sẽ bắt đầu hoán đổi từ ram sang đĩa, điều này sẽ khiến hệ thống của bạn thu thập dữ liệu tạm dừng, do bạn đã có một phân vùng trao đổi để bắt đầu, tất nhiên.

Xem xét điều này, kích thước 512MB ngày nay có thể là quá ít, vì nhiều ram đã tồn tại trong các máy móc hiện đại và nó đã trở nên rẻ hơn nhiều. Vì bạn đã có 16GB ram, nên việc sử dụng giá trị mặc định của một nửa ram của bạn tmpfssẽ không đủ cho hầu hết các tình huống. Để sử dụng giá trị mặc định, chỉ cần bỏ qua size=512Mmục trong /etc/fstabtệp của bạn .

Một lưu ý khác:

Bạn cũng có thể dễ dàng gắn các thư mục hệ thống khác vào ramdisk, chẳng hạn như

/var/cache

/var/games

/var/log/apt(chỉ sử dụng defaults,noatimemà không có mode=hoặc nosuid)

Nhưng hãy cẩn thận: các quy tắc tương tự được áp dụng như trên, hết không gian có thể gây ra rắc rối lớn. Ví dụ, hãy tưởng tượng hết dung lượng cho / var / log / apt sẽ khiến bạn không thể cài đặt bất kỳ chương trình nào! Hơn nữa, tải /var/logcác thư mục vào ramdisk sẽ xóa tất cả các tệp nhật ký của bạn khi khởi động lại, do đó bạn sẽ không thể gỡ lỗi hệ thống của mình nếu có bất cứ điều gì bất ngờ xảy ra. Vì vậy, sử dụng các cài đặt này có nguy cơ của riêng bạn!

Biên tập lưu ý: tôi loại bỏ các /runtrong tmpfsnúi tùy chọn từ thư mục này và các thư mục con của nó đã được gắn vào tmpfstheo mặc định.


11
Nếu tôi không sai, / var / tmp / là để giữ các tệp sau khi khởi động lại. Đó là sự khác biệt chính giữa cái này và / tmp /, vì vậy BẠN không nên di chuyển / var / tmp sang ram.

3
Nếu Ubuntu hết 4GB tmpfs, nó có sử dụng phân vùng SWAP 20 GB của tôi không?
loostro

3
Vâng, tôi cũng cần thêm cái này. Ngay khi tmpfs vượt quá giới hạn của nó, nó sẽ mở rộng sang phân vùng trao đổi (cung cấp một cái).
FuzzyQ

5
Việc phân bổ một nửa RAM của bạn có nghĩa là một nửa RAM của bạn được dành riêng cho RAMDISK hay chỉ là giới hạn cho những gì RAMDISK có thể tiêu thụ, và bất cứ thứ gì không được sử dụng là RAM miễn phí được gán cho bất kỳ chương trình nào cần RAM ??
matt

6
@matt Nó chỉ là một cái mũ.
FuzzyQ

35

Trên các hệ thống sử dụng systemd, bạn có tùy chọn sử dụng tệp đơn vị systemd thay vì fstab để hoàn thành mục tiêu sử dụng tmpfsđể gắn kết tmp. Trên hệ thống Ubuntu 16.04 của tôi, tôi đã chạy:

sudo cp /usr/share/systemd/tmp.mount /etc/systemd/system/tmp.mount
sudo systemctl enable tmp.mount
sudo systemctl start tmp.mount

Các tập tin /usr/share/systemd/tmp.mounttrông như:

#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.
[Unit]
Description=Temporary Directory
Documentation=man:hier(7)
Documentation=http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
ConditionPathIsSymbolicLink=!/tmp
DefaultDependencies=no
Conflicts=umount.target
Before=local-fs.target umount.target
After=swap.target

[Mount]
What=tmpfs
Where=/tmp
Type=tmpfs
Options=mode=1777,strictatime

[Install]
WantedBy=local-fs.target

Sử dụng phương pháp tiếp cận fstab của FuzzyQ, systemd chuyển các mục fstab của bạn thành các đơn vị gắn kết một cách linh hoạt. Tôi không nghĩ một trong hai cách tiếp cận là tốt hơn.

Để đặt giới hạn tối đa cho RAM theo yêu cầu, người ta sẽ cần thêm size=512Mvào Optionsdòng, cách nhau bằng dấu phẩy.


2
Bạn sẽ cần systemctl enable tmp.mountsau khi cp khác systemctl sẽ thất bại với thông báo " Failed to start tmp.mount: Unit tmp.mount not found."
vimdude

4
@Rick, tốt hơn nữa là sử dụng systemctl edit tmp.mountnó sẽ không trung tính. Điều đó đặt các thay đổi của bạn thành override.conf để bạn không thay đổi tmp.mount mặc định và bạn có thể dễ dàng xóa override.conf để quay lại cấu hình mặc định.
Bulat M.

Ditto những gì Bulat nói về việc sử dụng chỉnh sửa systemctl, và cũng sử dụng ln -schứ không phải cptrong bước đầu tiên.
Michael Gratton
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.