Bagaimana saya bisa mengubah jumlah dan ukuran ramdisks Linux (/ dev / ram0 - / dev / ram15)?

27

Menggunakan Linux, ketika saya boot saya secara otomatis memiliki 16 ramdisks 16MB, namun, saya ingin membuat ramdisk yang sangat besar untuk menguji beberapa perangkat lunak.

Saya menemukan bahwa saya dapat menyesuaikan ukuran ramdisks yang sudah ada di sistem dengan parameter boot kernel ramdisk_size, ini membuat 16 ramdisks (/ dev / ram0 - / dev / ram15) menjadi ukuran yang ditentukan. Jadi jika saya ingin membuat ramdisk 1GB, saya membutuhkan 16GB memori.

Pada dasarnya, saya ingin membuat satu ramdisk 10GB yang akan menjadi / dev / ram0. Bagaimana saya bisa melakukan itu? Saya berasumsi ada parameter boot kernel, tapi saya belum menemukannya.

Kevin S.
sumber

Jawaban:

18

Waktu kompilasi kernel

Ada dua opsi konfigurasi kernel yang dapat Anda atur di .configfile Anda :

CONFIG_BLK_DEV_RAM_COUNT=1
CONFIG_BLK_DEV_RAM_SIZE=10485760

Ini mengkonfigurasi kernel saya untuk membuat satu ramdisk yang 10G pada saat boot.

Catatan:

  • CONFIG_BLK_DEV_RAM_SIZE dalam KB.
  • Jangan tentukan lebih banyak memori daripada RAM yang sebenarnya Anda miliki di komputer.
  • Dalam menuconfigtampilan di bawah Perangkat Drivers-> Block Device.

Waktu boot

Anda dapat menentukan ukuran disk ram yang Anda buat melalui parameter boot kernel ramdisk_size. Sebagai contoh:

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

Sekarang saya dapat mem-boot mesin saya dan membuat sistem file di atasnya, mount dan menggunakannya persis seperti perangkat blok.

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

Sumber:

  1. http://www.vanemery.com/Linux/Ramdisk/ramdisk.html [mati]
  2. https://www.kernel.org/doc/Documentation/blockdev/ramdisk.txt
Kevin S.
sumber
16

Anda harus menggunakan tmpfs untuk itu.

mount -t tmpfs -o size=10g none /mnt/point
Ignacio Vazquez-Abrams
sumber
Bisakah saya membuat sistem file pada tmpfs? Saya membutuhkan perangkat blok yang berada di memori yang saya dapat membuat sistem file aktif. Bisakah saya melakukan ini pada tmpfs?
Kevin S.
tmpfs adalah sistem file. Kebetulan berada di memori.
Ignacio Vazquez-Abrams
3
Saya menghargai jawabannya dan biasanya tmpfs akan melakukan trik, tetapi saya perlu membuat sistem file xfs pada bagian memori yang saya tulis.
Kevin S.
Masalahnya dengan tmpfs adalah ia didukung oleh swap. Jika Anda mulai menggunakan swap, maka Anda kehilangan keuntungan karena menggunakan RAM murni. Juga, beberapa orang lebih suka memiliki area yang tidak didukung untuk aplikasi kripto.
drudru
Jawaban dan perincian terkait ada di sini: unix.stackexchange.com/questions/66329/…
jocull
7

Untuk membuat ram ram besar setelah boot tanpa mengacaukan dengan parameter kernel. Gunakan tmpfs, buat file, pasang melalui loop, dan pasang itu melalui sistem file:

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/

Mungkin sedikit penalti kinerja melalui berbagai lapisan ... tapi setidaknya itu berhasil.

pengguna39725
sumber
6

Pilihan lain adalah menggunakan perangkat loop (sebagai lawan dari fitur loobpack mount seperti yang disebutkan sebelumnya):

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

Sekarang / dev / loop adalah perangkat blok yang sah yang aplikasi Anda akan bertindak seperti perangkat fisik atau ramdisk, kecuali bahwa itu didukung file. Anda dapat memasang di suatu tempat atau aplikasi Anda bertindak pada node perangkat, yang mengimplementasikan ioctls blok standar. Menghemat ram sistem Anda dan berguna untuk menjaga testcases, dll.

(Anda bahkan dapat fdisk myfs.img, membuat partisi di atasnya dan menggunakan --offset dan --sizelimit dengan losetup untuk menunjuk masing-masing / dev / loopX ke partisi tertentu dalam gambar, jadi loop0, loop1 menjadi seperti sdc1, sdc2, dll. )

David Mirabito
sumber
1 karena ini tidak perlu mengkompilasi ulang kernel
m-ric
3

Anda bisa menggunakan file loop sebagai gantinya. Buat saja file loop sesuai ukuran yang Anda inginkan (jika Anda ingin memasukkannya ke dalam tmpfs ramdisk), lalu format file loop tersebut dan pasang.

dd if=/dev/zero of=myfile bs=1G count=10
mkfs.xfs -d file myfile
mount -t xfs -o loop myfile mymntpoint
KFro
sumber
Saya benar-benar mencoba ini sebelum saya memposting pertanyaan saya. Ini adalah solusi yang bagus, tetapi perangkat lunak yang saya uji bertindak berbeda ketika berurusan dengan file dan bukan perangkat blok, itu sebabnya saya melihat opsi ramdisk. Terima kasih.
Kevin S.
2
Perangkat loopback adalah perangkat blok, jadi saya tidak yakin bagaimana itu mungkin?
pjc50
2

Objek ramdrive adalah kecepatan. Tmpfs bukan drive. Perangkat loop bukan drive, tetapi Anda dapat menempatkan gambar drive pada perangkat loop. Disk Ram "adalah" drive, dan drive yang sangat cepat. Coba jalankan:

hdparm -t /dev/sda 

lalu:

hdparm -t /dev/ram0

Anda akan melihat apa yang saya maksud! Tetapi hdparm terkadang menghancurkan drive ram. Jadi, Anda harus membuatnya lagi.

Terkadang tidak ada perangkat / dev / ram. Untuk membuatnya:

mknod -m 0777 /dev/ram0 b 1 0 

tetapi tidak akan memiliki ukuran apa pun. Untuk memberikan ukuran:

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

dan itu akan berhenti ketika drive sudah penuh. Ukuran maksimum ditentukan oleh konfigurasi kernel parm: CONFIG_BLK_DEV_RAM_SIZE.

Kemudian, cukup format, yaitu

mke2fs /dev/ram0

Dan pasang:

mount /dev/ram0 /mnt/ramdrive

Favorit saya adalah kode debug yang disimpan di ramdrive. Kompilasi setidaknya 10x kecepatan kode yang disimpan di hard drive. Tabel database yang disimpan di ramdrive juga dapat digunakan, tetapi Anda harus memiliki skrip yang menulis ke hard disk secara berkala. Sebagian besar admin tidak memiliki nyali untuk menaruh data pada ram ram. Dan beberapa meja terlalu besar.

Swansword
sumber
1

Di mercusuar 64 (puupy linux berdasarkan slackware) saya melakukan ini;

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/

Di sana Anda memiliki ramdisk yang dipasang sebagai direktori di /mnt/dvdmana Anda dapat menyalin paste simpan melakukan segalanya seperti yang Anda lakukan di direktori hd kecuali di ram. ingatlah untuk menyimpan file Anda ke hd sebelum shutdown.

Marcos
sumber