Bagaimana cara membuat ramdisk Linux ukuran tetap yang tidak pernah bertukar ke disk?

9

Saya ingin membuat ramdisk Linux ukuran tetap yang tidak pernah bertukar ke disk. Perhatikan bahwa pertanyaan saya bukan "mengapa" saya ingin melakukan ini (katakanlah, misalnya, bahwa ini untuk tujuan edukatif atau untuk penelitian): pertanyaannya adalah bagaimana melakukannya.

Seperti yang saya pahami ramfstidak dapat dibatasi dalam ukuran, sehingga tidak sesuai dengan kebutuhan saya untuk memiliki ramdisk ukuran tetap.

Tampaknya juga tmpfs dapat ditukar ke disk. Jadi tidak cocok dengan persyaratan saya untuk tidak pernah menukar ke disk.

Bagaimana Anda bisa membuat ramdisk Linux ukuran tetap yang tidak pernah bertukar ke disk?

Apakah mungkin, misalnya, untuk membuat tmpfsdi dalam ramfs(apakah solusi seperti itu sesuai dengan persyaratan saya) dan jika demikian bagaimana?

Perhatikan bahwa kinerja bukan masalah dan ramdisk menjadi penuh dan memicu kesalahan "disk penuh" juga bukan masalah.

pengguna57725
sumber
Saya kira ini menjawab keprihatinan Anda cyberciti.biz/faq/howto-create-linux-ram-disk-filesystem
Kiwy
kemungkinan duplikat dari Membuat disk ram di Linux
Kiwy
Untuk menggunakan ramdisk yang sebenarnya (dan bukan tmpfs atau ramfs), Anda akan memerlukan dukungan yang dibangun di dalam kernel Anda, yang beberapa kernel distro tidak dapat melakukannya lagi - atau ini adalah modul. Lihat apakah Anda memiliki ramperangkat dev. Jika tidak, coba modprobe rd.
goldilocks
1
Saya tidak berpikir pertanyaan ini adalah duplikat karena tidak ada jawaban yang membahas batasan ukuran dan pertukaran.
Marco
3
Ketika orang bertanya kepada Anda mengapa Anda ingin melakukan sesuatu, itu karena apa yang Anda minta terdengar sedikit (atau banyak) gila bagi mereka. "Hmmm, dia meminta cara yang benar-benar berbelit-belit untuk mencapai X, apakah dia tahu tentang perintah do-X?" Terkadang ini juga karena ada beberapa cara, dan yang benar tergantung pada mengapa Anda melakukannya. Misalnya, jika Anda bertanya cara menghapus banyak file, cara melakukannya tergantung pada mengapa — rm bagus jika Anda perlu mengosongkan ruang disk, tetapi tidak terlalu banyak jika Anda perlu mengosongkan disk untuk dibuang. Jadi, secara ringkas, saya akan melanjutkan dan bertanya ... mengapa?
derobert

Jawaban:

5

Ini hanya pemikiran dan memiliki lebih dari satu kelemahan, tetapi mungkin bisa digunakan juga.

Bagaimana dengan membuat file gambar dan sistem file di dalamnya di atas ramfs, kemudian mount gambar sebagai perangkat loop? Dengan begitu Anda bisa membatasi ukuran ramdisk hanya dengan membatasi ukuran file gambar. Sebagai contoh:

$ mkdir -p /ram/{ram,loop}
$ mount -t ramfs none /ram/ram
$ dd if=/dev/zero of=/ram/ram/image bs=2M count=1
1+0 records in
1+0 records out
2097152 bytes (2.1 MB) copied, 0.00372456 s, 563 MB/s
$ mke2fs /ram/ram/image
mke2fs 1.42 (29-Nov-2011)
/ram/ram/image is not a block special device.
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
256 inodes, 2048 blocks
102 blocks (4.98%) reserved for the super user
First data block=1
Maximum filesystem blocks=2097152
1 block group
8192 blocks per group, 8192 fragments per group
256 inodes per group

Allocating group tables: done                            
Writing inode tables: done                            
Writing superblocks and filesystem accounting information: done
$ mount -o loop /ram/ram/image /ram/loop
$ dd if=/dev/zero of=/ram/loop/test bs=1M count=5
dd: writing `/ram/loop/test': No space left on device
2+0 records in
1+0 records out
2027520 bytes (2.0 MB) copied, 0.00853692 s, 238 MB/s
$ ls -l /ram/loop
total 2001
drwx------ 2 root root   12288 Jan 27 17:12 lost+found
-rw-r--r-- 1 root root 2027520 Jan 27 17:13 test

Dalam (agak terlalu lama) contoh di atas file gambar dibuat menjadi 2 megabyte dan ketika mencoba untuk menulis lebih dari 2 megabyte di atasnya, menulis gagal karena sistem file penuh.

Satu pengurangan yang jelas untuk semua ini tentu saja ada banyak kerumitan yang ditambahkan, tetapi setidaknya untuk tujuan akademis ini sudah cukup.

Sami Laine
sumber
File yang dipasang loopback dapat ditukar ...
vonbrand
1

Buku (tanggal!) "Linux Device Drivers" oleh Corbet, Rubini dan Kroah-Hartman memiliki contoh driver yang hanya mengalokasikan area memori tetap untuk bermain-main. Bukan sistem file, tapi ...

vonbrand
sumber
-1

Tidak bisa dilakukan Semua RAM tunduk pada paging oleh desain perangkat keras CPU dan desain microkernel Linux. Tidak ada alasan sah untuk memperlakukan memori sebaliknya. SEMUA algoritma perangkat lunak BISA diadaptasi untuk menggunakan skema caching file dan memori halaman. Virtual SELALU lebih baik dan lebih efisien.

Disk RAM dengan ukuran terbatas bertentangan dengan prinsip dasar dunia virtual. Anda harus mengasumsikan bahwa hanya permintaan file yang berguna yang dibuat untuk sistem file host dan bahwa semua permintaan tersebut memiliki kepentingan dan prioritas yang sama di dunia virtual (satu-satunya model yang diperhitungkan).

Telah terbukti secara matematis bahwa bahkan proses waktu nyata sesuai dengan aturan ini. Jika Anda mengalami masalah kecepatan, maka TIDAK BISA dipecahkan dengan menggunakan RAM sebagai penyimpanan == seluruh sistem host perlu beroperasi lebih cepat dari CPU ke bus I / O ke perangkat penyimpanan permanen. Semua kecuali masalah komputasi degenerasi buatan memiliki cabang yang cukup dan persyaratan I / O file bahwa peningkatan kecepatan rata-rata cache RAM adalah yang terbaik yang dapat Anda lakukan.

Super Troll
sumber
Tidak bisa dilakukan Semua RAM tunduk pada paging oleh desain perangkat keras CPU dan desain microkernel Linux. Salah : " mlock(),, mlock2()dan mlockall()mengunci sebagian atau semua ruang alamat virtual proses pemanggilan ke dalam RAM, mencegah agar memori tersebut tidak diarahkan ke area swap."
Andrew Henle