| 1 | ==========================================
|
| 2 | Using the RAM disk block device with Linux
|
| 3 | ==========================================
|
| 4 |
|
| 5 | |
| 6 |
|
| 7 | 1) Overview
|
| 8 | 2) Kernel Command Line Parameters
|
| 9 | 3) Using "rdev"
|
| 10 | 4) An Example of Creating a Compressed RAM Disk
|
| 11 |
|
| 12 |
|
| 13 | 1) Overview
|
| 14 | -----------
|
| 15 |
|
| 16 | The RAM disk driver is a way to use main system memory as a block device. It
|
| 17 | is required for initrd, an initial filesystem used if you need to load modules
|
| 18 | in order to access the root filesystem (see Documentation/admin-guide/initrd.rst). It can
|
| 19 | also be used for a temporary filesystem for crypto work, since the contents
|
| 20 | are erased on reboot.
|
| 21 |
|
| 22 | The RAM disk dynamically grows as more space is required. It does this by using
|
| 23 | RAM from the buffer cache. The driver marks the buffers it is using as dirty
|
| 24 | so that the VM subsystem does not try to reclaim them later.
|
| 25 |
|
| 26 | The RAM disk supports up to 16 RAM disks by default, and can be reconfigured
|
| 27 | to support an unlimited number of RAM disks (at your own risk). Just change
|
| 28 | the configuration symbol BLK_DEV_RAM_COUNT in the Block drivers config menu
|
| 29 | and (re)build the kernel.
|
| 30 |
|
| 31 | To use RAM disk support with your system, run './MAKEDEV ram' from the /dev
|
| 32 | directory. RAM disks are all major number 1, and start with minor number 0
|
| 33 | for /dev/ram0, etc. If used, modern kernels use /dev/ram0 for an initrd.
|
| 34 |
|
| 35 | The new RAM disk also has the ability to load compressed RAM disk images,
|
| 36 | allowing one to squeeze more programs onto an average installation or
|
| 37 | rescue floppy disk.
|
| 38 |
|
| 39 |
|
| 40 | 2) Parameters
|
| 41 | ---------------------------------
|
| 42 |
|
| 43 | 2a) Kernel Command Line Parameters
|
| 44 |
|
| 45 | ramdisk_size=N
|
| 46 | Size of the ramdisk.
|
| 47 |
|
| 48 | This parameter tells the RAM disk driver to set up RAM disks of N k size. The
|
| 49 | default is 4096 (4 MB).
|
| 50 |
|
| 51 | 2b) Module parameters
|
| 52 |
|
| 53 | rd_nr
|
| 54 | /dev/ramX devices created.
|
| 55 |
|
| 56 | max_part
|
| 57 | Maximum partition number.
|
| 58 |
|
| 59 | rd_size
|
| 60 | See ramdisk_size.
|
| 61 |
|
| 62 | 3) Using "rdev"
|
| 63 | ---------------
|
| 64 |
|
| 65 | "rdev" is an obsolete, deprecated, antiquated utility that could be used
|
| 66 | to set the boot device in a Linux kernel image.
|
| 67 |
|
| 68 | Instead of using rdev, just place the boot device information on the
|
| 69 | kernel command line and pass it to the kernel from the bootloader.
|
| 70 |
|
| 71 | You can also pass arguments to the kernel by setting FDARGS in
|
| 72 | arch/x86/boot/Makefile and specify in initrd image by setting FDINITRD in
|
| 73 | arch/x86/boot/Makefile.
|
| 74 |
|
| 75 | Some of the kernel command line boot options that may apply here are::
|
| 76 |
|
| 77 | ramdisk_start=N
|
| 78 | ramdisk_size=M
|
| 79 |
|
| 80 | If you make a boot disk that has LILO, then for the above, you would use::
|
| 81 |
|
| 82 | append = "ramdisk_start=N ramdisk_size=M"
|
| 83 |
|
| 84 | 4) An Example of Creating a Compressed RAM Disk
|
| 85 | -----------------------------------------------
|
| 86 |
|
| 87 | To create a RAM disk image, you will need a spare block device to
|
| 88 | construct it on. This can be the RAM disk device itself, or an
|
| 89 | unused disk partition (such as an unmounted swap partition). For this
|
| 90 | example, we will use the RAM disk device, "/dev/ram0".
|
| 91 |
|
| 92 | Note: This technique should not be done on a machine with less than 8 MB
|
| 93 | of RAM. If using a spare disk partition instead of /dev/ram0, then this
|
| 94 | restriction does not apply.
|
| 95 |
|
| 96 | a) Decide on the RAM disk size that you want. Say 2 MB for this example.
|
| 97 | Create it by writing to the RAM disk device. (This step is not currently
|
| 98 | required, but may be in the future.) It is wise to zero out the
|
| 99 | area (esp. for disks) so that maximal compression is achieved for
|
| 100 | the unused blocks of the image that you are about to create::
|
| 101 |
|
| 102 | dd if=/dev/zero of=/dev/ram0 bs=1k count=2048
|
| 103 |
|
| 104 | b) Make a filesystem on it. Say ext2fs for this example::
|
| 105 |
|
| 106 | mke2fs -vm0 /dev/ram0 2048
|
| 107 |
|
| 108 | c) Mount it, copy the files you want to it (eg: /etc/* /dev/* ...)
|
| 109 | and unmount it again.
|
| 110 |
|
| 111 | d) Compress the contents of the RAM disk. The level of compression
|
| 112 | will be approximately 50% of the space used by the files. Unused
|
| 113 | space on the RAM disk will compress to almost nothing::
|
| 114 |
|
| 115 | dd if=/dev/ram0 bs=1k count=2048 | gzip -v9 > /tmp/ram_image.gz
|
| 116 |
|
| 117 | e) Put the kernel onto the floppy::
|
| 118 |
|
| 119 | dd if=zImage of=/dev/fd0 bs=1k
|
| 120 |
|
| 121 | f) Put the RAM disk image onto the floppy, after the kernel. Use an offset
|
| 122 | that is slightly larger than the kernel, so that you can put another
|
| 123 | (possibly larger) kernel onto the same floppy later without overlapping
|
| 124 | the RAM disk image. An offset of 400 kB for kernels about 350 kB in
|
| 125 | size would be reasonable. Make sure offset+size of ram_image.gz is
|
| 126 | not larger than the total space on your floppy (usually 1440 kB)::
|
| 127 |
|
| 128 | dd if=/tmp/ram_image.gz of=/dev/fd0 bs=1k seek=400
|
| 129 |
|
| 130 | g) Make sure that you have already specified the boot information in
|
| 131 | FDARGS and FDINITRD or that you use a bootloader to pass kernel
|
| 132 | command line boot options to the kernel.
|
| 133 |
|
| 134 | That is it. You now have your boot/root compressed RAM disk floppy. Some
|
| 135 | users may wish to combine steps (d) and (f) by using a pipe.
|
| 136 |
|
| 137 |
|
| 138 | Paul Gortmaker 12/95
|
| 139 |
|
| 140 | Changelog:
|
| 141 | ----------
|
| 142 |
|
| 143 | SEPT-2020 :
|
| 144 |
|
| 145 | Removed usage of "rdev"
|
| 146 |
|
| 147 | 10-22-04 :
|
| 148 | Updated to reflect changes in command line options, remove
|
| 149 | obsolete references, general cleanup.
|
| 150 | James Nelson ([email protected])
|
| 151 |
|
| 152 | 12-95 :
|
| 153 | Original Document
|