Comment créer un ramdisk Linux de taille fixe qui ne s'intercale jamais sur le disque?

Je veux créer un ramdisk Linux de taille fixe qui ne s'intervertit jamais sur le disque. Notez que ma question n'est pas «pourquoi» je veux le faire (disons, par exemple, que c'est pour un but éducatif ou pour la search): la question est de savoir comment le faire.

Si je comprends bien que les ramfs ne peuvent pas être limités en taille, cela ne correspond pas à mon exigence d'avoir un disque virtuel de taille fixe.

Il semble également que tmpfs puisse être échangé sur le disque. Donc, cela ne correspond pas à ma condition de ne jamais échanger sur le disque.

Comment pouvez-vous créer un disque virtuel Linux de taille fixe qui ne peut jamais être échangé sur le disque?

Est-il possible, par exemple, de créer des tmpfs intérieur d'un ramfs (une telle solution répondrait-elle à mes deux exigences) et si oui, comment?

Notez que les performances ne sont pas un problème et que le disque virtuel est plein et que le triggersment des erreurs "disque plein" n'est pas un problème non plus.

C'est juste une pensée et a plus d'un inconvénient, mais il pourrait être assez utilisable de toute façon.

Que diriez-vous de créer un file image et un système de files au-dessus de ramfs, puis monter l'image en tant que périphérique en boucle? De cette façon, vous pouvez limiter la taille du disque virtuel en limitant simplement la taille du file image. Par exemple:

 $ 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) copyd, 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) Ssortingde=0 blocks, Ssortingpe 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) copyd, 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 

Dans l'exemple (un peu trop long) ci-dessus, le file image est créé pour être de 2 mégaoctets et, en essayant d'écrire plus de 2 mégaoctets, l'écriture échoue parce que le système de files est plein.

Il est évident que la réduction des effectifs est évidemment due à une complexité accrue, mais au less à des fins académiques, cela devrait suffire.

Le livre (daté!) "Linux Device Drivers" de Corbet, Rubini et Kroah-Hartman a un exemple de pilote qui alloue juste une zone de memory fixe pour tromper. Pas un système de files, mais …