/ tmpディレクトリにRAMストレージを使用するにはどうすればよいですか?また、RAMの最大使用量を設定するにはどうすればよいですか?


92

質問についての匿名によるコメントを、/ tmpディレクトリはどのようにクリーンアップされますか?、16GBのRAMがあり、それをすべて使用したことがないため、システムに実装するのは素晴らしいアイデアであることがわかりました。

一時ファイルがディスクに書き込まれることはありません。RAMディスクに書き込まれます。tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0/ etc / fstabに入れました。

私の質問は:

のRAM使用量の最大値を設定できます/tmpか?そして、その場合、最大量を超えた場合はどうなりますか?ハードディスクドライブに書き込みますか?

私は次のような解決策を読みました:

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

しかし、私の理解では、これは永続的な解決策ではありません。永続的にする必要がある場合は、/etc/fstab構成ファイルに追加する必要があります。

これが正しい解決策である場合、そのマウントコマンドをどのように行に変換でき/etc/fstabますか?


あなたが有用ではない執筆...でそれを「消費」ではないだろうと、あなたが持っているとSSDあれば、これも良いアイデアです
Postadelmaga

ハハとまったく同じ質問はここに私をもたらした:D
テディマルコフ

回答:


80

あなたは、絶対に正しい。それに応じたfstabエントリは次のようになります。

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

ご注意ください:

tmpfs埋めます、それが「ない十分なスペース」エラーを与えることによって、任意の物理ハードドライブとして動作します。再起動(したがってキャッシュを空にする)はこれを修正しますが、1つの操作がのスペースよりも多くのスペースを最初に消費すると問題が発生する可能性がありますtmpfs。この場合、コンピュータはRAMからディスクへのスワップを開始します。当然、スワップパーティションがあると、システムはクロールを停止します。

これを考慮すると、最近のマシンでははるかに多くのRAMが存在し、はるかに安価になっているため、512MBのサイズは今日でははるかに少ないかもしれません。すでに16GBのRAMを持っているのでtmpfs、ほぼすべてのシナリオでRAMの半分のデフォルト値を使用するだけで十分です。デフォルト値を使用するにsize=512Mは、/etc/fstabファイル内のエントリを省略します。

別のメモ:

以下のように、他のシステムフォルダーをRAMディスクに簡単にマウントすることもできます。

/var/cache

/var/games

/var/log/apt(のみを使用defaults,noatimeすることなくmode=又はnosuid

ただし、上記と同じルールが適用されるため、スペースが不足すると重大な問題が発生する可能性があります。たとえば、/ var / log / aptのスペースが不足すると、プログラムをインストールできなくなります。さらに、/var/logフォルダをRAMディスクにロードすると、再起動時にすべてのログファイルが削除されるため、予期しないことが発生した場合にシステムをデバッグできなくなります。したがって、これらの設定は自己責任で使用してください。

編集者注記:このフォルダとそのサブフォルダはデフォルトですでにマウント されているため/runtmpfsマウントオプションを削除しましたtmpfs


11
私が間違っていなければ、/ var / tmp /は再起動後にファイルを保持するためのものです。これが/ tmp /との主な違いなので、/ var / tmpをramに移動しないでください。

3
Ubuntuが4GBのtmpfsを使い果たした場合、20GBのSWAPパーティションを使用しますか?
lostro 14年

3
はい、これも追加する必要があります。tmpfsがその制限を超えるとすぐに、swapパーティションに拡張されます(パーティションがある場合)。
FuzzyQ 14年

5
これにRAMの半分を割り当てると、RAMDISKにRAMの半分が予約されますか、それともRAMDISKが消費する可能性のある上限に過ぎず、使用されていないものはRAMを必要とするプログラムに割り当てられる無料のRAMですか?
マット

6
@mattただのキャップです。
-FuzzyQ

35

を使用するシステムでsystemdは、tmpfsマウントに使用するという目標を達成するために、fstabではなくsystemdユニットファイルを使用するオプションがありますtmp。Ubuntu 16.04システムで、次を実行しました。

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

ファイル/usr/share/systemd/tmp.mountは次のようになります。

#  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

systemdは、FuzzyQのfstabアプローチを使用して、fstabエントリをマウントユニットに動的に変換します。どちらのアプローチも優れているとは思いません。

求められたとおりにRAMの最大制限を設定するsize=512MにはOptions、コンマで区切って行に追加する必要があります。


2
あなたは必要になりますsystemctl enable tmp.mount「というメッセージで失敗しますCP他systemctl後にFailed to start tmp.mount: Unit tmp.mount not found.
vimdude

4
@Rick、それはsystemctl edit tmp.mount中立的なものを使用するのがさらに良いです。これにより、変更がoverride.confに反映されるため、デフォルトのtmp.mountを変更せず、override.confを簡単に削除してデフォルトの構成に戻すことができます。
ブラットM.

systemctl editの使用についてBulatが言ったことと同じで、最初のステップではln -sなく使用しますcp
マイケルグラトン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.