Bagaimana saya bisa menggunakan penyimpanan RAM untuk direktori / tmp dan bagaimana mengatur jumlah maksimum penggunaan RAM untuk itu?

93

Setelah melihat komentar oleh Anonymous pada pertanyaan Bagaimana direktori / tmp dibersihkan? , Saya menemukan bahwa itu akan menjadi ide bagus untuk diimplementasikan pada sistem saya, karena saya memiliki 16GB RAM dan saya tidak pernah menggunakan semuanya.

File sementara saya tidak pernah bisa ditulis ke disk. Mereka ditulis ke disk RAM. Saya memasukkan tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0/ etc / fstab.

Pertanyaanku adalah:

Bisakah saya menetapkan nilai maksimum untuk Penggunaan RAM /tmp? Dan dalam hal itu, apa yang akan terjadi jika jumlah maksimumnya terlampaui, apakah akan menulis ke hard disk?

Saya telah membaca solusi yang menyatakan:

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

Tetapi dalam pemahaman saya, ini tidak akan menjadi solusi permanen. Jika saya membutuhkannya permanen, itu harus ditambahkan ke /etc/fstabfile konfigurasi.

Jika ini adalah solusi yang tepat, bagaimana saya bisa mengubah perintah mount itu menjadi sebuah baris /etc/fstab?

Dan
sumber
ini juga merupakan ide yang baik jika Anda memiliki dan SSD karena Anda tidak akan 'mengkonsumsinya' dengan tulisan yang tidak berguna ...
Postadelmaga
Ha ha persis pertanyaan yang sama membawaku ke sini: D
Teddy Markov

Jawaban:

80

Anda benar sekali. Entri fstab yang sesuai akan terlihat seperti ini:

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

Tolong dicatat:

Saat tmpfsterisi, itu akan berperilaku seperti hard drive fisik dengan memberikan kesalahan "tidak cukup ruang". Ketika mem-boot ulang (dan dengan demikian mengosongkan cache) akan memperbaikinya, Anda mungkin mengalami masalah ketika satu operasi menghabiskan lebih banyak ruang untuk memulai daripada ada ruang yang aktif tmpfs. Dalam hal ini komputer Anda akan mulai bertukar dari ram ke disk, yang akan membuat sistem Anda merayap berhenti, mengingat Anda sudah punya partisi swap untuk memulai, tentu saja.

Mempertimbangkan ini, ukuran 512MB mungkin jauh lebih sedikit saat ini, karena ram lebih banyak ada di mesin modern dan telah menjadi jauh lebih murah. Karena Anda sudah mendapatkan 16GB ram, menggunakan nilai default setengah ram Anda tmpfsharus lebih dari cukup untuk hampir semua skenario. Untuk menggunakan nilai default, cukup tinggalkan size=512Mentri di /etc/fstabfile Anda .

Catatan lain:

Anda dapat dengan mudah memasang folder sistem lain ke ramdisk juga, seperti

/var/cache

/var/games

/var/log/apt(gunakan hanya defaults,noatimetanpa mode=atau nosuid)

Namun berhati-hatilah: aturan yang sama berlaku seperti di atas, kehabisan ruang dapat menyebabkan masalah besar. Misalnya bayangkan kehabisan ruang untuk / var / log / apt akan membuat Anda tidak dapat menginstal program apa pun! Selain itu, memuat /var/logfolder ke ramdisk akan menghapus semua file log Anda saat reboot, jadi Anda tidak akan dapat melakukan debug sistem Anda jika terjadi sesuatu yang tidak terduga. Jadi gunakan pengaturan ini dengan risiko Anda sendiri!

Catatan Editorial: saya dihapus /rundi tmpfsmount option sejak folder ini dan subfoldernya sudah dipasang di tmpfssecara default.

FuzzyQ
sumber
11
Jika saya tidak salah, / var / tmp / untuk menyimpan file setelah reboot. Itulah perbedaan utama antara ini dan / tmp /, jadi ANDA seharusnya tidak memindahkan / var / tmp ke ram.
3
Jika Ubuntu kehabisan 4GB tmpfs, apakah ia akan menggunakan partisi SWAP 20GB saya?
loostro
3
Ya, saya harus menambahkan ini juga. Begitu tmpfs melampaui batasnya, tmpfs akan meluas ke partisi swap (berikan ada satu).
FuzzyQ
5
Apakah mengalokasikan setengah RAM Anda untuk ini berarti bahwa setengah RAM Anda dicadangkan untuk RAMDISK, atau hanya membatasi apa yang dapat dikonsumsi RAMDISK, dan apa pun yang tidak digunakan adalah RAM gratis yang ditugaskan untuk program apa pun yang membutuhkan RAM ??
matt
6
@ Matt Ini hanya topi.
FuzzyQ
35

Pada sistem yang menggunakan systemd, Anda memiliki opsi untuk menggunakan file unit systemd bukan fstab untuk mencapai tujuan menggunakan tmpfsuntuk me-mount tmp. Pada sistem Ubuntu 16.04 saya, saya berlari:

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

File tersebut /usr/share/systemd/tmp.mountterlihat seperti:

#  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

Menggunakan pendekatan fstab FuzzyQ, systemd menerjemahkan entri fstab Anda ke dalam unit mount secara dinamis. Saya tidak berpikir pendekatan mana yang lebih baik.

Dalam rangka untuk mengatur batas maksimum untuk RAM sebagai bertanya, orang akan perlu menambahkan size=512Mke Optionsbaris, dipisahkan dengan koma.

Rick Ramstetter
sumber
2
Anda akan perlu systemctl enable tmp.mountsetelah cp lain systemctl akan gagal dengan pesan " Failed to start tmp.mount: Unit tmp.mount not found."
vimdude
4
@ Rick, bahkan lebih baik menggunakan systemctl edit tmp.mountdistro-neutral. Itu menempatkan perubahan Anda ke override.conf sehingga Anda tidak mengubah tmp.mount default dan Anda dapat menghapus override.conf dengan mudah untuk kembali ke konfigurasi default.
Bulat M.
Ditto apa yang dikatakan Bulat tentang menggunakan edit systemctl, dan juga menggunakan ln -sdaripada cppada langkah pertama.
Michael Gratton