ฉันจะเปลี่ยนจำนวนและขนาดของ Linux ramdisks (/ dev / ram0 - / dev / ram15) ได้อย่างไร


27

การใช้ Linux เมื่อฉันบูตฉันมี ramdisks 16MB 16 เมกะไบต์โดยอัตโนมัติ แต่ฉันต้องการสร้าง ramdisk ขนาดใหญ่หนึ่งตัวเพื่อทดสอบซอฟต์แวร์บางตัว

ฉันพบว่าฉันสามารถปรับขนาดของ ramdisks ที่มีอยู่แล้วในระบบด้วยพารามิเตอร์ boot kernel ramdisk_sizeแต่สิ่งนี้ทำให้ ramdisks ทั้ง 16 (/ dev / ram0 - / dev / ram15) ขนาดที่ระบุไว้ ดังนั้นหากฉันต้องการสร้าง ramdisk ขนาด 1GB ฉันต้องการหน่วยความจำขนาด 16GB

โดยทั่วไปฉันต้องการสร้าง ramdisk 10GB หนึ่งอันซึ่งจะเป็น / dev / ram0 ฉันจะทำยังไงต่อไป? ฉันคิดว่ามีพารามิเตอร์การบูตเคอร์เนล แต่ฉันไม่พบมัน

คำตอบ:


18

เวลารวบรวมเคอร์เนล

มีตัวเลือกการกำหนดค่าเคอร์เนลสองตัวที่คุณสามารถตั้งค่าใน.configไฟล์ของคุณ:

CONFIG_BLK_DEV_RAM_COUNT=1
CONFIG_BLK_DEV_RAM_SIZE=10485760

สิ่งนี้กำหนดค่าเคอร์เนลของฉันเพื่อสร้าง ramdisk หนึ่งตัวซึ่งเป็น 10G ในเวลาบูต

หมายเหตุ:

  • CONFIG_BLK_DEV_RAM_SIZE อยู่ในหน่วย KB
  • อย่าระบุหน่วยความจำมากกว่าที่คุณมี RAM ในคอมพิวเตอร์ของคุณ
  • ในmenuconfigรูปลักษณ์ภายใต้อุปกรณ์ Drivers-> อุปกรณ์บล็อก

เวลาเปิดเครื่อง

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 [dead]
  2. https://www.kernel.org/doc/Documentation/blockdev/ramdisk.txt

16

คุณควรใช้tmpfsแทน

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

ฉันสามารถสร้างระบบไฟล์บน tmpfs ได้หรือไม่ ฉันต้องการอุปกรณ์บล็อกที่อยู่ในหน่วยความจำที่ฉันสามารถสร้างระบบไฟล์ได้ ฉันสามารถทำได้ด้วย tmpfs หรือไม่?
Kevin S.

tmpfs เป็นระบบไฟล์ มันเกิดขึ้นเพื่ออยู่ในหน่วยความจำ
Ignacio Vazquez-Abrams

3
ฉันขอขอบคุณคำตอบและโดยปกติแล้ว tmpfs จะทำเคล็ดลับ แต่ฉันต้องสร้างระบบไฟล์ xfs ในส่วนของหน่วยความจำที่ฉันเขียนถึง
Kevin S.

ปัญหาเกี่ยวกับ tmpfs คือมีการสำรองข้อมูลโดย swap หากคุณเริ่มใช้ swap แสดงว่าคุณสูญเสียสิทธิในการใช้งาน RAM จริง นอกจากนี้บางคนชอบที่จะมีพื้นที่ที่ไม่ได้รับการสนับสนุนสำหรับการใช้งาน crypto
drudru

คำตอบและรายละเอียดที่เกี่ยวข้องอยู่ที่นี่: unix.stackexchange.com/questions/66329/…
jocull

7

เพื่อให้ ram ดิสก์ขนาดใหญ่หลังจากบูตโดยไม่ต้องยุ่งกับพารามิเตอร์เคอร์เนล ใช้ 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

อีกทางเลือกหนึ่งคือการใช้อุปกรณ์วนรอบ (ตรงข้ามกับคุณสมบัติ loobpack ของการเมานต์ตามที่กล่าวไว้ก่อนหน้า):

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

Now / dev / loop เป็นอุปกรณ์บล็อกที่ถูกต้องซึ่งแอพของคุณจะทำหน้าที่เหมือนอุปกรณ์ฟิสิคัลหรือ ramdisk ยกเว้นว่ามันเป็นไฟล์สำรอง คุณสามารถเมานต์อยู่ที่ใดที่หนึ่งหรือให้แอปดำเนินการตามโหนดอุปกรณ์ซึ่งใช้ ioctls บล็อกมาตรฐาน บันทึก ram ระบบของคุณและมีประโยชน์เพื่อให้รอบสำหรับ testcases ฯลฯ

(คุณสามารถ fdisk myfs.img สร้างพาร์ติชั่นและใช้ --offset และ --sizelimit ด้วย losetup เพื่อชี้แต่ละ / dev / loopX ไปยังพาร์ติชั่นเฉพาะในภาพดังนั้น loop0, loop1 จึงกลายเป็นเหมือน sdc1, sdc2, ฯลฯ )


+1 เนื่องจากไม่จำเป็นต้องคอมไพล์เคอร์เนลอีกครั้ง
m-ric

3

คุณสามารถใช้ไฟล์วนซ้ำแทน เพียงแค่สร้างไฟล์วนรอบขนาดที่คุณต้องการ (หากคุณต้องการใส่ลงใน tmpfs ramdisk, ละเอียด) จากนั้นฟอร์แมตไฟล์ลูปแล้วติดตั้ง

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

ฉันลองทำจริงก่อนที่จะโพสต์คำถาม มันเป็นทางออกที่ดี แต่ซอฟต์แวร์ที่ฉันทดสอบทำหน้าที่แตกต่างกันเมื่อมันเกี่ยวข้องกับไฟล์และไม่ใช่อุปกรณ์บล็อคนั่นคือเหตุผลที่ฉันดูตัวเลือก ramdisk ขอบคุณ
Kevin S.

2
อุปกรณ์ลูปแบ็คเป็นอุปกรณ์บล็อคดังนั้นฉันไม่แน่ใจว่าเป็นไปได้อย่างไร
pjc50

2

วัตถุของ ramdrive คือความเร็ว Tmpfs ไม่ใช่ไดรฟ์ อุปกรณ์วนรอบไม่ใช่ไดรฟ์ แต่คุณสามารถใส่อิมเมจไดรฟ์ลงในอุปกรณ์วนรอบได้ ดิสก์ Ram "เป็น" ไดรฟ์และไดรฟ์ที่รวดเร็วมาก ลองใช้:

hdparm -t /dev/sda 

แล้ว:

hdparm -t /dev/ram0

คุณจะเห็นสิ่งที่ฉันหมายถึง! แต่บางครั้ง hdparm ทำลายไดรฟ์แรม ดังนั้นคุณต้องทำมันอีกครั้ง

บางครั้งไม่มีอุปกรณ์ / dev / ram ที่จะทำให้หนึ่ง:

mknod -m 0777 /dev/ram0 b 1 0 

แต่มันจะไม่มีขนาดใด เพื่อให้มันมีขนาด:

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

และจะหยุดเมื่อไดรฟ์เต็ม ขนาดสูงสุดจะถูกกำหนดโดยการกำหนดค่าเคอร์เนล CONFIG_BLK_DEV_RAM_SIZEparm:

จากนั้นเพียงแค่จัดรูปแบบเช่น

mke2fs /dev/ram0

และติดมัน

mount /dev/ram0 /mnt/ramdrive

สิ่งที่โปรดปรานของฉันคือการแก้ไขข้อบกพร่องรหัสที่เก็บไว้ใน ramdrive คอมไพล์อย่างน้อย 10 เท่าของรหัสที่เก็บไว้ในฮาร์ดไดรฟ์ ตารางฐานข้อมูลที่เก็บใน ramdrive ยังบินได้ แต่คุณต้องมีสคริปต์ที่เขียนไปยังฮาร์ดดิสก์เป็นระยะ ผู้ดูแลระบบส่วนใหญ่ไม่มีความกล้าที่จะใส่ข้อมูลลงในดิสก์แรม และบางตารางมีขนาดใหญ่เกินไป


1

บนประภาคาร 64 (puupy linux ที่อิงจาก slackware) ฉันทำสิ่งนี้;

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/

ที่นั่นคุณมี ramdisk ติดตั้งเป็นไดเรกทอรี/mnt/dvdซึ่งคุณสามารถคัดลอกแปะทำทุกอย่างได้เหมือนที่คุณทำในไดเรกทอรี hd ยกเว้นใน ram อย่าลืมบันทึกไฟล์เป็น hd ก่อนปิดเครื่อง

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