ฉันจะใช้ที่เก็บข้อมูล RAM สำหรับไดเรกทอรี / tmp ได้อย่างไรและตั้งค่าปริมาณการใช้ RAM สูงสุดได้อย่างไร


92

หลังจากเห็นข้อคิดเห็นโดยAnonymousในคำถามไดเร็กทอรี / tmp จะถูกกำจัดได้อย่างไร ฉันพบว่ามันเป็นความคิดที่ดีที่จะนำไปใช้กับระบบของฉันเนื่องจากฉันมี RAM ขนาด 16GB และฉันไม่เคยใช้มันทั้งหมด

ไฟล์ชั่วคราวของฉันไม่เคยถูกเขียนลงดิสก์ พวกเขาเขียนไปยังดิสก์ 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ไฟล์การกำหนดค่า

หากนี่เป็นโซลูชันที่ถูกต้องฉันจะเปลี่ยนคำสั่ง mount เป็นบรรทัดได้/etc/fstabอย่างไร


นี่เป็นความคิดที่ดีถ้าคุณมีและ SSD เพราะคุณจะไม่ 'กิน' มันด้วยงานเขียนที่ไม่มีประโยชน์ ...
Postadelmaga

ฮ่าฮ่าคำถามเดียวกันนำฉันมาที่นี่: D
Teddy Markov

คำตอบ:


80

คุณพูดถูก รายการ fstab ตามจะมีลักษณะเช่นนี้:

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

โปรดทราบ:

เมื่อtmpfsเต็มแล้วมันจะทำงานเหมือนฮาร์ดไดรฟ์ทั่วไปโดยให้ข้อผิดพลาด "มีพื้นที่ไม่เพียงพอ" ในขณะที่การรีบูตเครื่อง (และล้างแคช) tmpfsจะแก้ไขปัญหานี้คุณอาจจะประสบปัญหาเมื่อการดำเนินการเดียวกินพื้นที่มากขึ้นในการเริ่มต้นด้วยกว่ามีพื้นที่บน ในกรณีนี้คอมพิวเตอร์ของคุณจะเริ่มสลับจาก ram ไปยังดิสก์ซึ่งจะทำให้ระบบของคุณรวบรวมข้อมูลหยุดชะงักเนื่องจากคุณมีพาร์ทิชัน swap เริ่มต้นแน่นอน

เมื่อพิจารณาถึงสิ่งนี้ขนาดของ 512MB อาจน้อยเกินไปในปัจจุบันเนื่องจาก RAM มีอยู่ในเครื่องจักรที่ทันสมัยกว่าและมีราคาถูกกว่ามาก เนื่องจากคุณมี RAM 16 GB อยู่แล้วการใช้ค่าเริ่มต้นครึ่ง ram ของคุณtmpfsควรจะเพียงพอสำหรับสถานการณ์เกือบทั้งหมด หากต้องการใช้ค่าเริ่มต้นเพียงแค่ออกจากsize=512Mรายการใน/etc/fstabไฟล์ของคุณ

หมายเหตุอื่น:

คุณสามารถเมานต์โฟลเดอร์ระบบอื่น ๆ ลงใน ramdisk ได้ง่ายเช่นกัน

/var/cache

/var/games

/var/log/apt(ใช้เฉพาะที่defaults,noatimeไม่มีmode=หรือnosuid)

แต่ระวัง:ใช้กฎเดียวกันกับข้างต้นการใช้พื้นที่ว่างอาจทำให้เกิดปัญหาใหญ่ เช่นลองนึกถึงพื้นที่ว่างสำหรับ / var / log / apt จะทำให้คุณไม่สามารถติดตั้งโปรแกรมใด ๆ ได้! นอกจากนี้การโหลด/var/logโฟลเดอร์ใน ramdisk จะลบไฟล์บันทึกทั้งหมดเมื่อรีบูทดังนั้นคุณจะไม่สามารถดีบักระบบของคุณได้หากมีสิ่งใดที่ไม่คาดคิดเกิดขึ้น ดังนั้นใช้การตั้งค่าเหล่านี้ด้วยความเสี่ยงของคุณเอง!

หมายเหตุบรรณาธิการ: ผมออก/runในtmpfsภูเขาตัวเลือกตั้งแต่โฟลเดอร์นี้และโฟลเดอร์ย่อยจะถูกติดตั้งอยู่แล้วในการtmpfsเริ่มต้น


11
หากฉันไม่ผิด / var / tmp / ใช้สำหรับเก็บไฟล์หลังจากรีบูต นั่นคือความแตกต่างหลักระหว่างสิ่งนี้กับ / tmp / ดังนั้นคุณไม่ควรย้าย / var / tmp ไปที่ ram

3
หาก Ubuntu หมด 4GB tmpfs มันจะใช้ 20GB SWAP partition ของฉันหรือไม่
loostro

3
ใช่ฉันจะต้องเพิ่มสิ่งนี้ด้วย ทันทีที่ tmpfs ใช้งานเกินขีด จำกัด ของมันมันจะขยายไปสู่การสลับพาร์ติชั่น
FuzzyQ

5
การจัดสรรแรมครึ่งหนึ่งให้กับสิ่งนี้หมายความว่าครึ่งหนึ่ง RAM ของคุณถูกจองไว้สำหรับ RAMDISK หรือเป็นเพียงแค่ฝาปิดที่ RAMDISK อาจใช้และสิ่งที่ไม่ได้ใช้งานคือ RAM ฟรีที่กำหนดให้กับโปรแกรมที่ต้องการ RAM หรือไม่
แมตต์

6
@matt เป็นเพียงหมวก
FuzzyQ

35

บนระบบที่ใช้systemdคุณมีตัวเลือกในการใช้ไฟล์ systemd unit แทน fstab เพื่อให้บรรลุเป้าหมายของการใช้tmpfsเพื่อเมา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

การใช้วิธี fstab ของ FuzzyQ นั้น systemd จะแปลรายการ fstab ของคุณเป็นหน่วยเมานท์แบบไดนามิก ฉันไม่คิดว่าวิธีใดวิธีหนึ่งจะดีกว่า

ในการตั้งค่าขีด จำกัด สูงสุดสำหรับ RAM ตามที่ถามหนึ่งจะต้องเพิ่มsize=512MในOptionsบรรทัดคั่นด้วยเครื่องหมายจุลภาค


2
คุณจะต้องsystemctl enable tmp.mountหลังจาก cp else systemctl จะล้มเหลวด้วยข้อความ " Failed to start tmp.mount: Unit tmp.mount not found."
vimdude

4
@ ริคจะดียิ่งขึ้นถ้าใช้systemctl edit tmp.mountที่จะเป็นแบบ distro-neutral สิ่งนี้จะนำการเปลี่ยนแปลงของคุณไปใช้กับ override.conf เพื่อที่คุณจะไม่เปลี่ยนค่า tmp.mount เริ่มต้นและคุณสามารถลบ override.conf ได้อย่างง่ายดายเพื่อกลับไปที่การกำหนดค่าเริ่มต้น
Bulat M.

เช่นเดียวกันกับที่ Bulat พูดเกี่ยวกับการใช้ systemctl edit และยังใช้ln -sแทนcpในขั้นตอนแรก
Michael Gratton
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.