NAME | DESCRIPTION | ATTRIBUTES | SEE ALSO
You can use RAM to house a file system.
To use RAM to house a file system, you must first label part of the available space using disklabel(1M). disklabel uses entries in disktab(4CC) to label the disk. The following disktab entry serves to label a 4 megabyte area of RAM as a disk:
# This label can be used for a 4 megabyte RAM disk. # The corresponding # newfs command to be used with this RAM disk is: # rsh target newfs -o space -c 26 -m 0 /dev/rd0a rd4MegBSD:\ :ns#32:nt#1:nc#256 \ :pa#8192:oa#0:ta=4.2BSD:ba#8192:fa#8192 \ :pc#8192:oc#0:tc=unused:
The default system initialization file, sysadm.ini(4CC), creates special files to access the RAM, so you probably do not need to create them yourself. The entries to create special files may appear as follows in sysadm.ini:
# Create special files for RAM disk mknod /dev/rrd0a c 13 0 mknod /dev/rrd0b c 13 1 mknod /dev/rrd0c c 13 2 mknod /dev/rd0a b 13 0 mknod /dev/rd0b b 13 1 mknod /dev/rd0c b 13 2
The above example creates both raw and block mode special files for two user-accessible partitions, a and b, and one partition, c, for use by the system only.
Assuming the special files exist, you can proceed to label the disk and so forth. The following commands label the disk, read the label, create a file system on the disk and check the file system:
$ rsh target disklabel -w -r rd0 rd4MegBSD $ rsh target disklabel -r rd0 # /dev/rrd0c: type: unknown disk: rd16Meg label: flags: bytes/sector: 512 sectors/track: 4 tracks/cylinder: 4 sectors/cylinder: 16 cylinders: 32768 rpm: 3600 interleave: 1 trackskew: 0 cylinderskew: 0 headswitch: 0 # milliseconds track-to-track seek: 0 # milliseconds drivedata: 0 3 partitions: # size offset fstype [fsize bsize cpg] a: 32768 0 4.2BSD 0 0 0 # (Cyl. 0 - 2047) c: 32768 0 unused 0 0 # (Cyl. 0 - 2047) $ rsh target newfs /dev/rd0a /dev/rrd0a: 32768 sectors in 8 cylinders of 1 tracks, 4096 sectors 16MB in 1 cyl groups (16 c/g, 32MB/g, 7680 i/g) super-block backups (for fsck -b #) at: 32, $ rsh target fsck -y /dev/rd0a ** /dev/rrd0a ** Last Mounted on ** Phase 1 - Check Blocks and Sizes ** Phase 2 - Check Pathnames ** Phase 3 - Check Connectivity ** Phase 4 - Check Reference Counts ** Phase 5 - Check Cyl groups 1 files, 1 used, 15390 free (14 frags, 1922 blocks, 0.1% fragmentation) |
Once you have checked the new file system and it is ready to use, mount it in the current file system hierarchy. As the current root file system is located on the host workstation, create the mount point on the host and then mount the RAM file system there:
$ cd target_root_dir $ mkdir ram $ rsh target mount -t ufs /dev/rd0a /ram /dev/rd0a on /ram |
Next, populate the RAM file system with the contents of all file systems except the /dev, /image, /tmp and /ram directories. Create mount points for the /dev, /image and /tmp file systems:
$ rsh target cp -R bin etc lib ram/ $ rsh target mkdir /ram/dev $ rsh target mkdir /ram/image $ rsh target mkdir /ram/tmp |
The RAM file system, mounted under the /ram directory, now contains everything needed
to serve as the main system disk. Take advantage of the fact that the mount command is built into the C_INIT
system actor.
Unmount the root file system.
The following commands unmount the root file system on the target and remount the RAM file system in its place:
$ rsh target umount /ram $ rsh target umount / $ rsh target mount -t ufs /dev/rd0a / $ rsh target fsck /dev/rrd0a $ rsh target mount -t ufs -o update /dev/rd0a / |
The target is now independent of the host, using the RAM disk as the main disk:
$ rsh target ls bin dev etc image lib tmp |
Note that the ls actor used above is located in the RAM disk file system.
The following script is meant to run on the host workstation (or other system) and summarizes the above scenario:
#! /sh # # Reboot the target and give it some time to come up. # rsh target reboot sleep 60 # # While the host 'sleeps', the target downloads the system image, and # executes system initialization commands in sysadm.ini, mounting # the root file system through NFS. # # # Label the RAM disk, then create the file system and check it. # rsh target disklabel -w -r rd0 rd16Meg MyRamDisk rsh target newfs /dev/rrd0a rsh target fsck -y /dev/rrd0a # # Mount the RAM file system and populate it with the rest of the root # directory. # rsh target mount -t ufs /dev/rd0a /ram rsh target cp -R bin etc lib ram/ rsh target mkdir /ram/dev rsh target mkdir /ram/image rsh target mkdir /ram/tmp # # Unmount everything, then mount the RAM file system at the root. # rsh target umount /ram rsh target umount / rsh target mount -t ufs /dev/rd0a / rsh target fsck /dev/rrd0a rsh target mount -t ufs -o update /dev/rd0a /
After adapting the above script for your environment, run it to make your ChorusOS target self-sufficient.
The RAM disk slices can be as follows:
RAM disks x=0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
Major Minor /dev/rdxa 14 0 + 8 * x /dev/rdxb 14 1 + 8 * x /dev/rdxc 14 2 + 8 * x # Whole disk /dev/rdxd 14 3 + 8 * x /dev/rdxe 14 4 + 8 * x /dev/rdxf 14 5 + 8 * x /dev/rdxg 14 6 + 8 * x /dev/rdxh 14 7 + 8 * x /dev/rrdxa 13 0 + 8 * x /dev/rrdxb 13 1 + 8 * x /dev/rrdxc 13 2 + 8 * x # Whole disk /dev/rrdxd 13 3 + 8 * x /dev/rrdxe 13 4 + 8 * x /dev/rrdxf 13 5 + 8 * x /dev/rrdxg 13 6 + 8 * x /dev/rrdxh 13 7 + 8 * x |
See attributes(5) for descriptions of the following attributes:
ATTRIBUTE TYPE | ATTRIBUTE VALUE |
---|---|
Interface Stability | Evolving |
NAME | DESCRIPTION | ATTRIBUTES | SEE ALSO