मैं लिनक्स रैमडिस्क (/ dev / ram0 - / dev / ram15) की राशि और आकार कैसे बदल सकता हूं?


27

लिनक्स का उपयोग करते हुए, जब मैं बूट करता हूं तो मेरे पास स्वचालित रूप से 16 16 एमबी रैमडिस्क होते हैं, हालांकि, मैं कुछ सॉफ़्टवेयर का परीक्षण करने के लिए वास्तव में एक बड़ी रैमडिस्क बनाना चाहता हूं।

मैंने पाया कि मैं कर्नेल बूट पैरामीटर के साथ सिस्टम पर पहले से मौजूद रैमडिस्क के आकार को समायोजित कर सकता हूं ramdisk_size, लेकिन इससे सभी 16 रैमडिस्क (/ dev / ram0 - / dev / ram15) आकार निर्दिष्ट हो जाते हैं। इसलिए अगर मैं 1GB रैमडिस्क बनाना चाहता हूं, तो मुझे 16GB मेमोरी की आवश्यकता होगी।

मूल रूप से, मैं एक 10GB रैमडिस्क बनाना चाहता हूं जो / dev / ram0 होगा। मुझसे यह कैसे होगा? मुझे लगता है कि एक कर्नेल बूट पैरामीटर है, लेकिन मुझे अभी यह नहीं मिला है।

जवाबों:


18

गिरी संकलन समय

दो कर्नेल कॉन्फ़िगरेशन विकल्प हैं जिन्हें आप अपनी .configफ़ाइल में सेट कर सकते हैं :

CONFIG_BLK_DEV_RAM_COUNT=1
CONFIG_BLK_DEV_RAM_SIZE=10485760

इसने मेरे कर्नेल को एक रैमडिस्क बनाने के लिए कॉन्फ़िगर किया है जो बूट समय पर 10G है।

टिप्पणियाँ:

  • CONFIG_BLK_DEV_RAM_SIZE केबी में है।
  • वास्तव में आपके कंप्यूटर में रैम की तुलना में अधिक मेमोरी निर्दिष्ट न करें।
  • में menuconfigडिवाइस चालकों> ब्लॉक डिवाइस के अंतर्गत देखो।

बूट समय

आप कर्नेल बूट पैरामीटर के माध्यम से आपके द्वारा बनाए गए राम डिस्क का आकार निर्दिष्ट कर सकते हैं ramdisk_size। उदाहरण के लिए:

kernel /vmlinuz-2.6.32.24 ro root=LABEL=/ rhgb quiet ramdisk_size=10485760

अब मैं अपनी मशीन को बूट कर सकता हूं और उस पर एक फाइल सिस्टम बना सकता हूं, इसे माउंट कर सकता हूं और इसे बिल्कुल ब्लॉक डिवाइस की तरह इस्तेमाल कर सकता हूं।

# mkfs.xfs /dev/ram0
# mount /dev/ram0 /mnt/ramdisk

सूत्रों का कहना है:

  1. http://www.vanemery.com/Linux/Ramdisk/ramdisk.html [मृत]
  2. https://www.kernel.org/doc/Documentation/blockdev/ramdisk.txt

16

आपको इसके बजाय tmpfs का उपयोग करना चाहिए ।

mount -t tmpfs -o size=10g none /mnt/point

क्या मैं tmpfs पर एक फाइल सिस्टम बना सकता हूँ? मुझे एक ब्लॉक डिवाइस की आवश्यकता है जो मेमोरी में रहता है जिसे मैं एक फाइल सिस्टम बना सकता हूं। क्या मैं एक tmpfs पर ऐसा कर सकता हूँ?
केविन एस।

tmpfs है एक फाइल सिस्टम। यह सिर्फ स्मृति में निवास करता है।
इग्नासियो वाज़क्वेज़-अब्राम्स

3
मैं उत्तर की सराहना करता हूं और आम तौर पर एक tmpfs चाल करता है, लेकिन मुझे स्मृति के भाग पर एक xfs फाइल सिस्टम बनाने की आवश्यकता है जिसे मैं लिख रहा हूं।
केविन एस।

Tmpfs के साथ समस्या यह है कि यह स्वैप द्वारा समर्थित है। यदि आप स्वैप का उपयोग करना शुरू करते हैं, तो आप शुद्ध रैम में होने का लाभ खो रहे हैं। इसके अलावा, कुछ लोग एक ऐसा क्षेत्र रखना पसंद करते हैं जो क्रिप्टो अनुप्रयोगों के लिए समर्थित नहीं है।
drudru

संबंधित उत्तर और विवरण यहां हैं: unix.stackexchange.com/questions/66329/…
15

7

कर्नेल मापदंडों के साथ खिलवाड़ किए बिना बूट के बाद एक बड़ी रैम डिस्क बनाने के लिए। Tmpfs का प्रयोग करें, एक फाइल बनाएं, इसे लूप के माध्यम से माउंट करें, और एक फाइल सिस्टम के माध्यम से माउंट करें:

mount -t tmpfs -o size=200M tmpfs temp/
cd temp/
dd if=/dev/zero of=disk.img bs=1M count=199
losetup /dev/loop0 disk.img
mkfs.ext4 /dev/loop0
cd ..
mount /dev/loop0 temp2/

संभवतः कई अलग-अलग परतों के माध्यम से प्रदर्शन जुर्माना का एक सा ... लेकिन कम से कम यह काम करता है।


6

एक अन्य विकल्प लूप उपकरणों का उपयोग करना है (जैसा कि पहले उल्लेखित माउंट के लोबपैक फीचर के विपरीत है):

dd if=dev/zero of=myfs.img bs=1M count=1024
losetup /dev/loop0 myfs.img
mkfs.xfs /dev/loop0

अब / देव / लूप एक वैध ब्लॉक डिवाइस है जो आपके ऐप को एक भौतिक डिवाइस या रैमडिस्क की तरह काम करेगा, सिवाय इसके कि यह फ़ाइल समर्थित है। आप कहीं भी माउंट कर सकते हैं या आपके पास डिवाइस नोड पर ऐप एक्ट है, जो मानक ब्लॉक ioctls को लागू करता है। आपके सिस्टम को राम बचाता है और टेस्टकेस आदि के लिए चारों ओर रखने के लिए उपयोगी है।

(आप भी myfs.img को fdisk कर सकते हैं, इस पर विभाजन बना सकते हैं और उपयोग कर सकते हैं - छवि में विशिष्ट विभाजनों के लिए प्रत्येक / dev / loopX को इंगित करने के लिए losetup के साथ --offset और --sizelimit का उपयोग करें, इसलिए loop0, looped sdc1, sdc2, आदि की तरह ही बन जाएगा। )


+1 क्योंकि इससे कर्नेल को पुन: स्थापित करने की आवश्यकता नहीं है
m-ric

3

आप इसके बजाय लूप फ़ाइल का उपयोग कर सकते हैं। बस एक लूप फ़ाइल बनाएं जिसका आकार आप चाहते हैं (यदि आप इसे टैम्प्स रैमडिस्क, फाइन में डालना चाहते हैं), और फिर लूप फ़ाइल को प्रारूपित करें और इसे माउंट करें।

dd if=/dev/zero of=myfile bs=1G count=10
mkfs.xfs -d file myfile
mount -t xfs -o loop myfile mymntpoint

अपना प्रश्न पोस्ट करने से पहले मैंने वास्तव में यह कोशिश की थी। यह एक महान समाधान है, लेकिन मैं जिस सॉफ्टवेयर का परीक्षण कर रहा हूं वह अलग तरह से काम करता है जब यह एक फाइल के साथ काम कर रहा होता है और ब्लॉक डिवाइस नहीं होता है, यही कारण है कि मैं रैमडिस्क विकल्प को देख रहा था। धन्यवाद।
केविन एस।

2
लूपबैक डिवाइस ब्लॉक डिवाइस हैं, इसलिए मुझे यकीन नहीं है कि यह कैसे संभव है?
pjc50

2

रैमड्राइव की वस्तु गति है। Tmpfs ड्राइव नहीं है। लूप डिवाइस ड्राइव नहीं हैं, लेकिन आप लूप डिवाइस पर ड्राइव की छवि डाल सकते हैं। राम डिस्क "ड्राइव, और बहुत तेज ड्राइव हैं। चलाने की कोशिश करें:

hdparm -t /dev/sda 

और फिर:

hdparm -t /dev/ram0

आप देखेंगे कि मेरा क्या मतलब है! लेकिन एचडीपीआर कभी-कभी रैम ड्राइव को नष्ट कर देता है। तो, आपको इसे फिर से बनाना होगा।

कभी-कभी कोई / देव / राम डिवाइस नहीं होते हैं। एक बनाने के लिए:

mknod -m 0777 /dev/ram0 b 1 0 

लेकिन इसका कोई आकार नहीं होगा। इसे आकार देने के लिए:

dd if=/dev/zero of=/dev/ram0

और जब ड्राइव भर जाएगा तो यह बंद हो जाएगा। अधिकतम आकार कर्नेल कॉन्फिगर परम द्वारा निर्धारित किया जाता है CONFIG_BLK_DEV_RAM_SIZE:।

फिर, इसे प्रारूपित करें, अर्थात

mke2fs /dev/ram0

और इसे माउंट करें:

mount /dev/ram0 /mnt/ramdrive

मेरा एक पसंदीदा एक रैमड्राइव पर संग्रहित डिबगिंग कोड है। संकलन हार्ड ड्राइव पर संग्रहीत कोड की कम से कम 10x गति है। रैमड्राइव पर संग्रहीत डेटाबेस टेबल भी उड़ते हैं, लेकिन आपके पास एक स्क्रिप्ट होनी चाहिए जो समय-समय पर हार्ड डिस्क को लिखती है। अधिकांश एडम्स में रैम डिस्क पर डेटा डालने की हिम्मत नहीं होती है। और कुछ टेबल बहुत बड़ी हैं।


1

लाइटहाउस 64 पर (स्लैकवेयर पर आधारित प्यूपी लाइनक्स) मैंने ऐसा किया;

mke2fs /dev/ram1 4096000 # nearly 4G ramdisk, choose the size of ramdisk less than actual ram!
mount /dev/ram1 /mnt/dvd # dvd on my laptop is unused choose your device from /mnt/

वहां आपके पास एक निर्देशिका के रूप में एक रैमडिस्क माउंट है, /mnt/dvdजहां आप पेस्ट को बचाने के लिए सब कुछ कर सकते हैं जैसा कि आप एक एचडी डायरेक्टरी में राम के अलावा करेंगे। बंद करने से पहले अपनी फ़ाइलों को एचडी में सहेजना याद रखें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.