patch-1.3.54 linux/Documentation/ramdisk.txt

Next file: linux/Makefile
Previous file: linux/Documentation/networking/alias.txt
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v1.3.53/linux/Documentation/ramdisk.txt linux/Documentation/ramdisk.txt
@@ -0,0 +1,197 @@
+
+Using the RAM disk block device with Linux
+------------------------------------------
+
+Contents:
+
+	1) Overview
+	2) Kernel Command Line Parameters
+	3) Using "rdev -r" With New Kernels
+	4) An Example of Creating a Compressed ramdisk 
+
+
+1) Overview
+-----------
+
+As of kernel v1.3.48, the ramdisk driver was substantially changed.
+
+The older versions would grab a chunk of memory off the top before
+handing the remainder to the kernel at boot time. Thus a size parameter
+had to be specified via "ramdisk=1440" or "rdev -r /dev/fd0 1440" so
+that the driver knew how much memory to grab.
+
+Now the ramdisk 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 with a new "BH_Protected" flag so that the kernel does 
+not try to reuse them later. This means that the old size parameter
+is no longer used, new command line parameters exist, and the behavior
+of the "rdev -r" or "ramsize" (usually a symbolic link to "rdev")
+command has changed.
+
+The old "ramdisk=<ram_size>" is now obsolete. The kernel will ignore
+such old commands, and thus they will be passed on through to the init
+program, which will then complain. You should remove any of these old
+style commands from config files such as "/etc/lilo.config".
+
+The new ramdisk also has the ability to load compressed ramdisk images,
+allowing one to squeeze more programs onto an average installation or 
+rescue floppy disk.
+
+Notes: You may have "dev/ram" or "/dev/ramdisk" or both. They are
+equivalent from the standpoint of this document. Also, the new ramdisk
+is a config option. When running "make config", make sure you enable
+ramdisk support for the kernel you intend to use the ramdisk with.
+
+
+2) Kernel Command Line Parameters
+---------------------------------
+
+	ramdisk_start=NNN
+	=================
+
+To allow a kernel image to reside on a floppy disk along with a compressed
+ramdisk image, the "ramdisk_start=<offset>" command was added. The kernel
+can't be included into the compressed ramdisk filesystem image, because
+it needs to be stored starting at block zero so that the BIOS can load the 
+bootsector and then the kernel can bootstrap itself to get going.
+
+Note: If you are using an uncompressed ramdisk image, then the kernel can
+be a part of the filesystem image that is being loaded into the ramdisk,
+and the floppy can be booted with LILO, or the two can be separate as
+is done for the compressed images.
+
+If you are using a two-disk boot/root setup (kernel on #1, ramdisk image
+on #2) then the ramdisk would start at block zero, and an offset of
+zero would be used. Since this is the default value, you would not need
+to actually use the command at all.
+
+If instead, you have a "zImage" of about 350k, and a "fs_image.gz" of
+say about 1MB, and you want them both on the same disk, then you
+would use an offset. If you stored the "fs_image.gz" onto the floppy
+starting at an offset of 400kB, you would use "ramdisk_start=400".
+
+
+	load_ramdisk=N
+	==============
+
+This parameter tells the kernel whether it is to try and load a
+ramdisk image or not. Specifying "load_ramdisk=1" will tell the
+kernel to load a floppy into the ramdisk. The default value is
+zero, meaning that the kernel should not try to load a ramdisk.
+
+
+	prompt_ramdisk=N
+	================
+
+This parameter tells the kernel whether or not to give you a prompt
+asking you to insert the floppy containing the ramdisk image. In
+a single floppy configuration the ramdisk image is on the same floppy
+as the kernel that just finished loading/booting and so a prompt
+is not needed. In this case one can use "prompt_ramdisk=0". In a
+two floppy configuration, you will need the chance to switch disks,
+and thus "prompt_ramdisk=1" can be used. Since this is the default 
+value, it doesn't really need to be specified.
+
+
+3) Using "rdev -r" With New Kernels
+-----------------------------------
+
+The usage of the word (two bytes) that "rdev -r" sets in the kernel image
+has changed. The low 11 bits (0 -> 10) specify an offset (in 1k blocks) 
+of up to 2MB (2^11) of where to find the ramdisk (this used to be the 
+size). Bit 14 indicates that a ramdisk is to be loaded, and bit 15
+indicates whether a prompt/wait sequence is to be given before trying
+to read the ramdisk. Since the ramdisk dynamically grows as data is
+being written into it, a size field is no longer required. Bits 11
+to 13 are not presently used and may as well be zero. These numbers
+are no magical secrets, as seen below:
+
+./arch/i386/kernel/setup.c:#define RAMDISK_IMAGE_START_MASK     0x07FF
+./arch/i386/kernel/setup.c:#define RAMDISK_PROMPT_FLAG          0x8000
+./arch/i386/kernel/setup.c:#define RAMDISK_LOAD_FLAG            0x4000
+
+Consider a typical two floppy disk setup, where you will have the 
+kernel on disk one, and have already put a ramdisk image onto disk #2.
+
+Hence you want to set bits 0 to 13 as zero, meaning that your ramdisk
+starts at an offset of zero kB from the beginning of the floppy.
+The command line equivalent is: "ramdisk_start=0"
+
+You want bit 14 as one, indicating that a ramdisk is to be loaded.
+The command line equivalent is: "load_ramdisk=1"
+
+You want bit 15 as one, indicating that you want a prompt/keypress
+sequence so that you have a chance to switch floppy disks.
+The command line equivalent is: "prompt_ramdisk=1"
+
+Putting that together gives 2^15 + 2^14 + 0 = 49152 for an rdev word.
+So to create disk one of the set, you would do:
+
+	/usr/src/linux# cat arch/i386/boot/zImage > /dev/fd0
+	/usr/src/linux# rdev /dev/fd0 /dev/fd0
+	/usr/src/linux# rdev -r /dev/fd0 49152
+
+If you make a boot disk that has LILO, then for the above, you would use:
+	append = "ramdisk_start=0 load_ramdisk=1 prompt_ramdisk=1"
+Since the default start = 0 and the default prompt = 1, you could use:
+	append = "load_ramdisk=1"
+
+
+4) An Example of Creating a Compressed ramdisk 
+----------------------------------------------
+
+To create a ramdisk image, you will need a spare block device to
+construct it on. This can be the ramdisk device itself, or an
+unused disk partition (such as an unmounted swap partition). For this 
+example, we will use the ramdisk device, "/dev/ram".
+
+Note: This technique should not be done on a machine with less than 8MB
+of RAM. If using a spare disk partition instead of /dev/ram, then this
+restriction does not apply.
+
+a) Decide on the ramdisk size that you want. Say 2MB for this example.
+   Create it by writing to the ramdisk device. (This step is not presently
+   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/ram bs=1k count=2048
+
+b) Make a filesystem on it. Say ext2fs for this example.
+
+	mke2fs -vm0 /dev/ram 2048
+
+c) Mount it, copy the files you want to it (eg: /etc/* /dev/* ...)
+   and unmount it again.
+
+d) Compress the contents of the ramdisk. The level of compression
+   will be approximately 50% of the space used by the files. Unused
+   space on the ramdisk will compress to almost nothing.
+
+	dd if=/dev/ram bs=1k count=2048 | gzip -v9 > /tmp/ram_image.gz
+
+e) Put the kernel onto the floppy
+
+	cat zImage > /dev/fd0
+
+f) Put the ramdisk 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 ramdisk image. An offset of 400kB for kernels about 350kB in
+   size would be reasonable. Make sure offset+size of ram_image.gz is
+   not larger than the total space on your floppy (usually 1440kB).
+
+	dd if=/tmp/ram_image.gz of=/dev/fd0 bs=1k skip=400
+
+g) Use "rdev" to set the boot device, ramdisk offset, prompt flag, etc.
+   For ramdisk_start=400, load_ramdisk=1, ramdisk_start=400, one would
+   have 2^15 + 2^14 + 400 = 49552.
+
+	rdev /dev/fd0 /dev/fd0
+	rdev -r /dev/fd0 49552
+
+That is it. You now have your boot/root compressed ramdisk floppy. Some
+users may wish to combine steps (d) and (f) by using a pipe.
+
+--------------------------------------------------------------------------
+						Paul Gortmaker 12/95	

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov with Sam's (original) version
of this