Jak mogę użyć pamięci RAM dla katalogu / tmp i jak ustawić dla niej maksymalną ilość pamięci RAM?


92

Po obejrzeniu komentarz przez Anonymous na pytanie, jaki jest katalog / tmp oczyścić? , Odkryłem, że to byłby świetny pomysł na wdrożenie w moim systemie, ponieważ mam 16 GB pamięci RAM i nigdy z niej nie korzystałem.

Moje pliki tymczasowe nigdy nie są zapisywane na dysku. Są zapisywane na dysku RAM. Włożyłem tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0/ etc / fstab.

Moje pytanie brzmi:

Czy mogę ustawić maksymalną wartość dla użycia pamięci RAM /tmp? A w takim przypadku, co by się stało, gdyby maksymalna ilość została przekroczona, czy zapisałby na dysk twardy?

Przeczytałem rozwiązanie, które stwierdza:

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

Ale w moim rozumieniu nie będzie to trwałe rozwiązanie. Jeśli potrzebuję, aby był stały, należy go dodać do /etc/fstabpliku konfiguracyjnego.

Jeśli jest to prawidłowe rozwiązanie, jak mogę przekształcić to polecenie montowania w linię /etc/fstab?


jest to również dobry pomysł, jeśli masz dysk SSD, ponieważ nie będziesz go „konsumować” przy pomocy nieprzydatnych pism ...
Postadelmaga,

Ha ha dokładnie to samo pytanie przyniosło mi tutaj: D
Teddy Markov

Odpowiedzi:


80

Masz absolutną rację. Odpowiedni wpis fstab wyglądałby tak:

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

Proszę zanotować:

Po tmpfszapełnieniu będzie się zachowywał jak każdy fizyczny dysk twardy, powodując błąd „niewystarczającej ilości miejsca”. Chociaż ponowne uruchomienie (a tym samym opróżnienie pamięci podręcznej) naprawi to, możesz wpaść w kłopoty, gdy pojedyncza operacja zużywa więcej miejsca na początku niż na nim tmpfs. W takim przypadku komputer zacznie się zamieniać z pamięci RAM na dysk, co spowoduje zatrzymanie się systemu, pod warunkiem, że oczywiście masz partycję wymiany.

Biorąc to pod uwagę, rozmiar 512 MB może być obecnie o wiele za mały, ponieważ w nowoczesnych maszynach istnieje znacznie więcej pamięci RAM i stało się znacznie tańsze. Ponieważ masz już 16 GB pamięci RAM, użycie domyślnej wartości połowy pamięci RAM na tmpfswięcej niż wystarcza dla prawie wszystkich scenariuszy. Aby użyć wartości domyślnej, po prostu pomiń size=512Mwpis w swoim /etc/fstabpliku.

Kolejna uwaga:

Równie łatwo możesz zamontować inne foldery systemowe na ramdysku, takie jak

/var/cache

/var/games

/var/log/apt(używaj tylko defaults,noatimebez mode=lub nosuid)

Ale uwaga: obowiązują te same zasady, co powyżej, brak miejsca może spowodować poważne problemy. Np. Wyobraź sobie, że zabraknie miejsca dla / var / log / apt spowoduje, że nie będziesz mógł zainstalować żadnych programów! Ponadto ładowanie /var/logfolderów do ramdysku spowoduje usunięcie wszystkich plików dziennika po ponownym uruchomieniu, więc nie będzie można debugować systemu, jeśli wydarzy się coś nieoczekiwanego. Korzystaj z tych ustawień na własne ryzyko!

Nota redakcyjna: usunąłem /runz tmpfsopcją montowania ponieważ tym folderze i jego podfolderach są już zamontowane w tmpfsdomyślnie.


11
Jeśli się nie mylę, / var / tmp / służy do przechowywania plików po ponownym uruchomieniu. Jest to główna różnica między tym a / tmp /, więc TY nie powinieneś przenosić / var / tmp do pamięci RAM.

3
Jeśli w Ubuntu zabraknie 4 GB tmpfs, czy użyje mojej partycji SWAP 20 GB?
loostro

3
Tak, też muszę to dodać. Gdy tylko tmpfs przekroczy swoje limity, rozszerzy się na partycję wymiany (daj taką, która istnieje).
FuzzyQ

5
Czy przydzielenie do tego połowy pamięci RAM oznacza, że ​​połowa pamięci RAM jest zarezerwowana dla RAMDISK, czy też jest to jedynie ograniczenie tego, co RAMDISK może zużyć, a cokolwiek nie jest używane, to wolna pamięć RAM, która jest przypisywana do dowolnego programu, który potrzebuje pamięci RAM?
mat.

6
@matt To tylko czapka.
FuzzyQ,

35

W systemach używających systemdmasz opcję użycia pliku jednostkowego systemd zamiast fstab, aby osiągnąć cel użycia tmpfsmontowania tmp. W moim systemie Ubuntu 16.04 uruchomiłem:

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

Plik /usr/share/systemd/tmp.mountwygląda następująco:

#  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

Używając metody fstab FuzzyQ, systemd dynamicznie przekształca wpisy fstab na jednostki montowania. Nie sądzę, aby którekolwiek podejście było lepsze.

Aby ustawić maksymalny limit pamięci RAM zgodnie z żądaniem, należałoby dodać size=512Mdo Optionswiersza, oddzielając go przecinkiem.


2
Będziesz potrzebował, systemctl enable tmp.mountgdy cp inaczej systemctl nie powiedzie się z komunikatem „ Failed to start tmp.mount: Unit tmp.mount not found.
vimdude,

4
@ Rick, jeszcze lepiej jest użyć systemctl edit tmp.mountneutralnej dystrybucji. Spowoduje to umieszczenie twoich zmian w pliku override.conf, dzięki czemu nie zmienisz domyślnego pliku tmp.mount i możesz łatwo usunąć plik override.conf, aby powrócić do domyślnej konfiguracji.
Bulat M.

To samo, co powiedział Bulat o używaniu edycji systemctl, a także użyj ln -sraczej niż cpw pierwszym kroku.
Michael Gratton,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.