diff options
Diffstat (limited to 'Documentation/blockdev/ramdisk.txt')
-rw-r--r-- | Documentation/blockdev/ramdisk.txt | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/Documentation/blockdev/ramdisk.txt b/Documentation/blockdev/ramdisk.txt new file mode 100644 index 000000000000..6c820baa19a6 --- /dev/null +++ b/Documentation/blockdev/ramdisk.txt | |||
@@ -0,0 +1,165 @@ | |||
1 | Using the RAM disk block device with Linux | ||
2 | ------------------------------------------ | ||
3 | |||
4 | Contents: | ||
5 | |||
6 | 1) Overview | ||
7 | 2) Kernel Command Line Parameters | ||
8 | 3) Using "rdev -r" | ||
9 | 4) An Example of Creating a Compressed RAM Disk | ||
10 | |||
11 | |||
12 | 1) Overview | ||
13 | ----------- | ||
14 | |||
15 | The RAM disk driver is a way to use main system memory as a block device. It | ||
16 | is required for initrd, an initial filesystem used if you need to load modules | ||
17 | in order to access the root filesystem (see Documentation/initrd.txt). It can | ||
18 | also be used for a temporary filesystem for crypto work, since the contents | ||
19 | are erased on reboot. | ||
20 | |||
21 | The RAM disk dynamically grows as more space is required. It does this by using | ||
22 | RAM from the buffer cache. The driver marks the buffers it is using as dirty | ||
23 | so that the VM subsystem does not try to reclaim them later. | ||
24 | |||
25 | The RAM disk supports up to 16 RAM disks by default, and can be reconfigured | ||
26 | to support an unlimited number of RAM disks (at your own risk). Just change | ||
27 | the configuration symbol BLK_DEV_RAM_COUNT in the Block drivers config menu | ||
28 | and (re)build the kernel. | ||
29 | |||
30 | To use RAM disk support with your system, run './MAKEDEV ram' from the /dev | ||
31 | directory. RAM disks are all major number 1, and start with minor number 0 | ||
32 | for /dev/ram0, etc. If used, modern kernels use /dev/ram0 for an initrd. | ||
33 | |||
34 | The new RAM disk also has the ability to load compressed RAM disk images, | ||
35 | allowing one to squeeze more programs onto an average installation or | ||
36 | rescue floppy disk. | ||
37 | |||
38 | |||
39 | 2) Kernel Command Line Parameters | ||
40 | --------------------------------- | ||
41 | |||
42 | ramdisk_size=N | ||
43 | ============== | ||
44 | |||
45 | This parameter tells the RAM disk driver to set up RAM disks of N k size. The | ||
46 | default is 4096 (4 MB) (8192 (8 MB) on S390). | ||
47 | |||
48 | ramdisk_blocksize=N | ||
49 | =================== | ||
50 | |||
51 | This parameter tells the RAM disk driver how many bytes to use per block. The | ||
52 | default is 1024 (BLOCK_SIZE). | ||
53 | |||
54 | |||
55 | 3) Using "rdev -r" | ||
56 | ------------------ | ||
57 | |||
58 | The usage of the word (two bytes) that "rdev -r" sets in the kernel image is | ||
59 | as follows. The low 11 bits (0 -> 10) specify an offset (in 1 k blocks) of up | ||
60 | to 2 MB (2^11) of where to find the RAM disk (this used to be the size). Bit | ||
61 | 14 indicates that a RAM disk is to be loaded, and bit 15 indicates whether a | ||
62 | prompt/wait sequence is to be given before trying to read the RAM disk. Since | ||
63 | the RAM disk dynamically grows as data is being written into it, a size field | ||
64 | is not required. Bits 11 to 13 are not currently used and may as well be zero. | ||
65 | These numbers are no magical secrets, as seen below: | ||
66 | |||
67 | ./arch/i386/kernel/setup.c:#define RAMDISK_IMAGE_START_MASK 0x07FF | ||
68 | ./arch/i386/kernel/setup.c:#define RAMDISK_PROMPT_FLAG 0x8000 | ||
69 | ./arch/i386/kernel/setup.c:#define RAMDISK_LOAD_FLAG 0x4000 | ||
70 | |||
71 | Consider a typical two floppy disk setup, where you will have the | ||
72 | kernel on disk one, and have already put a RAM disk image onto disk #2. | ||
73 | |||
74 | Hence you want to set bits 0 to 13 as 0, meaning that your RAM disk | ||
75 | starts at an offset of 0 kB from the beginning of the floppy. | ||
76 | The command line equivalent is: "ramdisk_start=0" | ||
77 | |||
78 | You want bit 14 as one, indicating that a RAM disk is to be loaded. | ||
79 | The command line equivalent is: "load_ramdisk=1" | ||
80 | |||
81 | You want bit 15 as one, indicating that you want a prompt/keypress | ||
82 | sequence so that you have a chance to switch floppy disks. | ||
83 | The command line equivalent is: "prompt_ramdisk=1" | ||
84 | |||
85 | Putting that together gives 2^15 + 2^14 + 0 = 49152 for an rdev word. | ||
86 | So to create disk one of the set, you would do: | ||
87 | |||
88 | /usr/src/linux# cat arch/i386/boot/zImage > /dev/fd0 | ||
89 | /usr/src/linux# rdev /dev/fd0 /dev/fd0 | ||
90 | /usr/src/linux# rdev -r /dev/fd0 49152 | ||
91 | |||
92 | If you make a boot disk that has LILO, then for the above, you would use: | ||
93 | append = "ramdisk_start=0 load_ramdisk=1 prompt_ramdisk=1" | ||
94 | Since the default start = 0 and the default prompt = 1, you could use: | ||
95 | append = "load_ramdisk=1" | ||
96 | |||
97 | |||
98 | 4) An Example of Creating a Compressed RAM Disk | ||
99 | ---------------------------------------------- | ||
100 | |||
101 | To create a RAM disk image, you will need a spare block device to | ||
102 | construct it on. This can be the RAM disk device itself, or an | ||
103 | unused disk partition (such as an unmounted swap partition). For this | ||
104 | example, we will use the RAM disk device, "/dev/ram0". | ||
105 | |||
106 | Note: This technique should not be done on a machine with less than 8 MB | ||
107 | of RAM. If using a spare disk partition instead of /dev/ram0, then this | ||
108 | restriction does not apply. | ||
109 | |||
110 | a) Decide on the RAM disk size that you want. Say 2 MB for this example. | ||
111 | Create it by writing to the RAM disk device. (This step is not currently | ||
112 | required, but may be in the future.) It is wise to zero out the | ||
113 | area (esp. for disks) so that maximal compression is achieved for | ||
114 | the unused blocks of the image that you are about to create. | ||
115 | |||
116 | dd if=/dev/zero of=/dev/ram0 bs=1k count=2048 | ||
117 | |||
118 | b) Make a filesystem on it. Say ext2fs for this example. | ||
119 | |||
120 | mke2fs -vm0 /dev/ram0 2048 | ||
121 | |||
122 | c) Mount it, copy the files you want to it (eg: /etc/* /dev/* ...) | ||
123 | and unmount it again. | ||
124 | |||
125 | d) Compress the contents of the RAM disk. The level of compression | ||
126 | will be approximately 50% of the space used by the files. Unused | ||
127 | space on the RAM disk will compress to almost nothing. | ||
128 | |||
129 | dd if=/dev/ram0 bs=1k count=2048 | gzip -v9 > /tmp/ram_image.gz | ||
130 | |||
131 | e) Put the kernel onto the floppy | ||
132 | |||
133 | dd if=zImage of=/dev/fd0 bs=1k | ||
134 | |||
135 | f) Put the RAM disk image onto the floppy, after the kernel. Use an offset | ||
136 | that is slightly larger than the kernel, so that you can put another | ||
137 | (possibly larger) kernel onto the same floppy later without overlapping | ||
138 | the RAM disk image. An offset of 400 kB for kernels about 350 kB in | ||
139 | size would be reasonable. Make sure offset+size of ram_image.gz is | ||
140 | not larger than the total space on your floppy (usually 1440 kB). | ||
141 | |||
142 | dd if=/tmp/ram_image.gz of=/dev/fd0 bs=1k seek=400 | ||
143 | |||
144 | g) Use "rdev" to set the boot device, RAM disk offset, prompt flag, etc. | ||
145 | For prompt_ramdisk=1, load_ramdisk=1, ramdisk_start=400, one would | ||
146 | have 2^15 + 2^14 + 400 = 49552. | ||
147 | |||
148 | rdev /dev/fd0 /dev/fd0 | ||
149 | rdev -r /dev/fd0 49552 | ||
150 | |||
151 | That is it. You now have your boot/root compressed RAM disk floppy. Some | ||
152 | users may wish to combine steps (d) and (f) by using a pipe. | ||
153 | |||
154 | -------------------------------------------------------------------------- | ||
155 | Paul Gortmaker 12/95 | ||
156 | |||
157 | Changelog: | ||
158 | ---------- | ||
159 | |||
160 | 10-22-04 : Updated to reflect changes in command line options, remove | ||
161 | obsolete references, general cleanup. | ||
162 | James Nelson (james4765@gmail.com) | ||
163 | |||
164 | |||
165 | 12-95 : Original Document | ||