Linux ramdisksinin miktarını ve boyutunu nasıl değiştirebilirim (/ dev / ram0 - / dev / ram15)?


27

Linux kullanırken, önyükleme yaptığımda otomatik olarak 16 MB RAM diskim var, ancak bazı yazılımları test etmek için gerçekten büyük bir RAM disk oluşturmak istiyorum.

Sistemde zaten ramdisk_sizeramdisks boyutunu çekirdek boot parametresiyle ayarlayabildiğimi buldum, ancak bu, tüm 16 ramdisks'i (/ dev / ram0 - / dev / ram15) belirtilen boyutta yapıyor. Yani 1GB ramdisk oluşturmak istersem 16GB belleğe ihtiyacım olacak.

Temel olarak, / dev / ram0 olabilecek bir 10GB ramdisk oluşturmak istiyorum. Bunu nasıl yapacağım? Bir çekirdek önyükleme parametresi olduğunu varsayıyorum, ancak henüz bulamadım.

Yanıtlar:


18

Çekirdek derleme zamanı

.configDosyanızda ayarlayabileceğiniz iki çekirdek yapılandırma seçeneği vardır :

CONFIG_BLK_DEV_RAM_COUNT=1
CONFIG_BLK_DEV_RAM_SIZE=10485760

Bu, çekirdeğimi önyükleme sırasında 10G olan tek bir ramdisk oluşturmak için yapılandırdı.

Notlar:

  • CONFIG_BLK_DEV_RAM_SIZE KB’de.
  • Bilgisayarınızda RAM olduğundan daha fazla bellek belirtmeyin.
  • Gelen menuconfigCihaz Drivers-> Blok Aygıtlar altında görünüm.

Önyükleme süresi

Çekirdek önyükleme parametresi aracılığıyla oluşturduğunuz ram disklerinin boyutunu belirleyebilirsiniz ramdisk_size. Örneğin:

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

Artık makinemi önyükleyebilir ve üzerinde bir dosya sistemi oluşturabilir, monte edebilir ve tam olarak bir blok cihaz gibi kullanabilirim.

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

Kaynaklar:

  1. http://www.vanemery.com/Linux/Ramdisk/ramdisk.html [ölü]
  2. https://www.kernel.org/doc/Documentation/blockdev/ramdisk.txt

16

Bunun için tmpfs kullanmalısınız.

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

Bir tmpfs dosya sistemi yapabilir miyim? Bellekte bulunan bir dosya sistemini açabileceğim bir blok aygıtına ihtiyacım var. Bunu bir TMPF'de yapabilir miyim?
Kevin S.

tmpfs olan bir dosya sistemi. Sadece bellekte kalıyor.
Ignacio Vazquez-Abrams

3
Cevabı takdir ediyorum ve normalde bir tmpfs işe yarayacaktı ama yazdığım hafızada bir xfs dosya sistemi oluşturmam gerekiyor.
Kevin S.

Tmpfs ile ilgili sorun takas tarafından desteklenmesidir. Eğer takas kullanmaya başlarsanız, saf RAM olmanın yararlarını kaybedersiniz. Ayrıca, bazı insanlar kripto uygulamaları için desteklenmeyen bir alana sahip olmayı tercih eder.
drudru,

İlgili cevaplar ve detaylar burada: unix.stackexchange.com/questions/66329/…
jocull

7

Önyüklemeden sonra çekirdek parametreleriyle uğraşmadan büyük bir ram diski yapmak. Tmpfs kullanın, bir dosya oluşturun, onu döngü yoluyla bağlayın ve bir dosya sistemi ile bağlayın:

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/

Muhtemelen biraz farklı katmanlardan geçen bir miktar performans cezası ... ama en azından işe yarıyor.


6

Başka bir seçenek döngü aygıtlarını kullanmaktır (daha önce belirtildiği gibi mount'un loobpack özelliğinin aksine):

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

Şimdi / dev / loop, uygulamanızın dosya destekli olması dışında fiziksel bir cihaz veya ramdisk gibi davranacağı meşru bir blok cihazdır. Bir yere monte edebilirsiniz ya da uygulamanızın standart blok ioctls'i uygulayan cihaz düğümü üzerinde hareket etmesini sağlayın. Test koçanı vb.

(Myfs.img komutunu bile kullanabilirsiniz, üzerinde bölümler oluşturabilir ve --offset ve --sizelimit komutunu kullanarak her / dev / loopX komutunu görüntüdeki belirli bölümlere yönlendirebilirsiniz, böylece loop0, loop1 tıpkı sdc1, sdc2, vb. )


Bu, çekirdeği yeniden derlemeye gerek duymadığından +1
m-ric

3

Bunun yerine bir döngü dosyası kullanabilirsiniz. İstediğiniz boyutta bir döngü dosyası oluşturun (eğer onu bir tmpfs ramdisk içine koymak istiyorsanız, sorun yok) ve ardından döngü dosyasını biçimlendirin ve bağlayın.

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

Aslında sorumu göndermeden önce bunu denedim. Harika bir çözüm, ancak test ettiğim yazılım bir blok cihazla değil bir dosyayla çalışırken farklı davranıyor, bu yüzden ramdisk seçeneğine bakıyordum. Teşekkürler.
Kevin S.

2
Geridöngü aygıtları blok aygıtlarıdır, bunun nasıl mümkün olduğundan emin değilim?
pjc50

2

Bir ramdrive'ın nesnesi hızdır. Tmpfs bir sürücü değil. Döngü aygıtları sürücü değildir, ancak bir döngü aygıtına sürücü görüntüsü yerleştirebilirsiniz. RAM diskler "sürücüler" ve çok hızlı sürücülerdir. Koşmayı dene:

hdparm -t /dev/sda 

ve sonra:

hdparm -t /dev/ram0

Ne demek istediğimi anlayacaksın! Ancak hdparm bazen ram sürücüsünü tahrip eder. Yani tekrar yapmalısın.

Bazen / dev / ram cihazı yoktur. Bir tane yapmak için:

mknod -m 0777 /dev/ram0 b 1 0 

ama herhangi bir boyuta sahip olmayacak. Boyutunu vermek için:

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

ve sürücü dolduğunda duracaktır. Maksimum boyut, çekirdek config parm: ile belirlenir CONFIG_BLK_DEV_RAM_SIZE.

Ardından, sadece biçimlendirin, yani

mke2fs /dev/ram0

Ve monte et:

mount /dev/ram0 /mnt/ramdrive

Bir favorim, bir ramdrive'da depolanan kodda hata ayıklama. Derlemeler, sabit sürücüde depolanan en az 10x kod hızıdır. Ramdrive'da depolanan veritabanı tabloları da uçuyor, ancak düzenli aralıklarla sabit diske yazan bir komut dosyasına sahip olmalısınız. Çoğu yöneticinin ram disklerine veri koyacak cesareti yoktur. Ve bazı masalar çok büyük.


1

Deniz feneri 64 (slackware dayalı puupy linux) Bunu yaptım;

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/

Burada /mnt/dvd, macun kaydetme işlemini kopyalayabileceğiniz bir dizin olarak monte edilmiş bir ramdisk'iniz , ram dışında bir hd dizininde yaptığınız her şeyi yaparsınız. kapatmadan önce dosyalarınızı hd'ya kaydetmeyi unutmayın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.