154 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			154 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| ==========================================
 | |
| Using the RAM disk block device with Linux
 | |
| ==========================================
 | |
| 
 | |
| .. Contents:
 | |
| 
 | |
| 	1) Overview
 | |
| 	2) Kernel Command Line Parameters
 | |
| 	3) Using "rdev"
 | |
| 	4) An Example of Creating a Compressed RAM Disk
 | |
| 
 | |
| 
 | |
| 1) Overview
 | |
| -----------
 | |
| 
 | |
| The RAM disk driver is a way to use main system memory as a block device.  It
 | |
| is required for initrd, an initial filesystem used if you need to load modules
 | |
| in order to access the root filesystem (see Documentation/admin-guide/initrd.rst).  It can
 | |
| also be used for a temporary filesystem for crypto work, since the contents
 | |
| are erased on reboot.
 | |
| 
 | |
| The RAM disk dynamically grows as more space is required. It does this by using
 | |
| RAM from the buffer cache. The driver marks the buffers it is using as dirty
 | |
| so that the VM subsystem does not try to reclaim them later.
 | |
| 
 | |
| The RAM disk supports up to 16 RAM disks by default, and can be reconfigured
 | |
| to support an unlimited number of RAM disks (at your own risk).  Just change
 | |
| the configuration symbol BLK_DEV_RAM_COUNT in the Block drivers config menu
 | |
| and (re)build the kernel.
 | |
| 
 | |
| To use RAM disk support with your system, run './MAKEDEV ram' from the /dev
 | |
| directory.  RAM disks are all major number 1, and start with minor number 0
 | |
| for /dev/ram0, etc.  If used, modern kernels use /dev/ram0 for an initrd.
 | |
| 
 | |
| The new RAM disk also has the ability to load compressed RAM disk images,
 | |
| allowing one to squeeze more programs onto an average installation or
 | |
| rescue floppy disk.
 | |
| 
 | |
| 
 | |
| 2) Parameters
 | |
| ---------------------------------
 | |
| 
 | |
| 2a) Kernel Command Line Parameters
 | |
| 
 | |
| 	ramdisk_size=N
 | |
| 		Size of the ramdisk.
 | |
| 
 | |
| This parameter tells the RAM disk driver to set up RAM disks of N k size.  The
 | |
| default is 4096 (4 MB).
 | |
| 
 | |
| 2b) Module parameters
 | |
| 
 | |
| 	rd_nr
 | |
| 		/dev/ramX devices created.
 | |
| 
 | |
| 	max_part
 | |
| 		Maximum partition number.
 | |
| 
 | |
| 	rd_size
 | |
| 		See ramdisk_size.
 | |
| 
 | |
| 3) Using "rdev"
 | |
| ---------------
 | |
| 
 | |
| "rdev" is an obsolete, deprecated, antiquated utility that could be used
 | |
| to set the boot device in a Linux kernel image.
 | |
| 
 | |
| Instead of using rdev, just place the boot device information on the
 | |
| kernel command line and pass it to the kernel from the bootloader.
 | |
| 
 | |
| You can also pass arguments to the kernel by setting FDARGS in
 | |
| arch/x86/boot/Makefile and specify in initrd image by setting FDINITRD in
 | |
| arch/x86/boot/Makefile.
 | |
| 
 | |
| Some of the kernel command line boot options that may apply here are::
 | |
| 
 | |
|   ramdisk_start=N
 | |
|   ramdisk_size=M
 | |
| 
 | |
| If you make a boot disk that has LILO, then for the above, you would use::
 | |
| 
 | |
| 	append = "ramdisk_start=N ramdisk_size=M"
 | |
| 
 | |
| 4) An Example of Creating a Compressed RAM Disk
 | |
| -----------------------------------------------
 | |
| 
 | |
| To create a RAM disk image, you will need a spare block device to
 | |
| construct it on. This can be the RAM disk device itself, or an
 | |
| unused disk partition (such as an unmounted swap partition). For this
 | |
| example, we will use the RAM disk device, "/dev/ram0".
 | |
| 
 | |
| Note: This technique should not be done on a machine with less than 8 MB
 | |
| of RAM. If using a spare disk partition instead of /dev/ram0, then this
 | |
| restriction does not apply.
 | |
| 
 | |
| a) Decide on the RAM disk size that you want. Say 2 MB for this example.
 | |
|    Create it by writing to the RAM disk device. (This step is not currently
 | |
|    required, but may be in the future.) It is wise to zero out the
 | |
|    area (esp. for disks) so that maximal compression is achieved for
 | |
|    the unused blocks of the image that you are about to create::
 | |
| 
 | |
| 	dd if=/dev/zero of=/dev/ram0 bs=1k count=2048
 | |
| 
 | |
| b) Make a filesystem on it. Say ext2fs for this example::
 | |
| 
 | |
| 	mke2fs -vm0 /dev/ram0 2048
 | |
| 
 | |
| c) Mount it, copy the files you want to it (eg: /etc/* /dev/* ...)
 | |
|    and unmount it again.
 | |
| 
 | |
| d) Compress the contents of the RAM disk. The level of compression
 | |
|    will be approximately 50% of the space used by the files. Unused
 | |
|    space on the RAM disk will compress to almost nothing::
 | |
| 
 | |
| 	dd if=/dev/ram0 bs=1k count=2048 | gzip -v9 > /tmp/ram_image.gz
 | |
| 
 | |
| e) Put the kernel onto the floppy::
 | |
| 
 | |
| 	dd if=zImage of=/dev/fd0 bs=1k
 | |
| 
 | |
| f) Put the RAM disk image onto the floppy, after the kernel. Use an offset
 | |
|    that is slightly larger than the kernel, so that you can put another
 | |
|    (possibly larger) kernel onto the same floppy later without overlapping
 | |
|    the RAM disk image. An offset of 400 kB for kernels about 350 kB in
 | |
|    size would be reasonable. Make sure offset+size of ram_image.gz is
 | |
|    not larger than the total space on your floppy (usually 1440 kB)::
 | |
| 
 | |
| 	dd if=/tmp/ram_image.gz of=/dev/fd0 bs=1k seek=400
 | |
| 
 | |
| g) Make sure that you have already specified the boot information in
 | |
|    FDARGS and FDINITRD or that you use a bootloader to pass kernel
 | |
|    command line boot options to the kernel.
 | |
| 
 | |
| That is it. You now have your boot/root compressed RAM disk floppy. Some
 | |
| users may wish to combine steps (d) and (f) by using a pipe.
 | |
| 
 | |
| 
 | |
| 						Paul Gortmaker 12/95
 | |
| 
 | |
| Changelog:
 | |
| ----------
 | |
| 
 | |
| SEPT-2020 :
 | |
| 
 | |
|                 Removed usage of "rdev"
 | |
| 
 | |
| 10-22-04 :
 | |
| 		Updated to reflect changes in command line options, remove
 | |
| 		obsolete references, general cleanup.
 | |
| 		James Nelson (james4765@gmail.com)
 | |
| 
 | |
| 12-95 :
 | |
| 		Original Document
 |