home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / misc / volume1 / 8706 / 8 < prev    next >
Text File  |  1993-09-01  |  7KB  |  191 lines

  1. Article 88 of comp.sources.misc:
  2. Relay-Version: version B 2.10.3 alpha 5/22/85; site osu-eddie.UUCP
  3. Path: osu-eddie!cbosgd!hal!ncoast!allbery
  4. From: mouse@mcgill-vision.UUCP (der Mouse )
  5. Newsgroups: comp.sources.misc
  6. Subject: filedisk: make a file into a filesystem (1 of 2) (BSD4.3)
  7. Message-ID: <2741@ncoast.UUCP>
  8. Date: 30 Jun 87 00:09:44 GMT
  9. Date-Received: 3 Jul 87 00:47:15 GMT
  10. Sender: allbery@ncoast.UUCP
  11. Lines: 174
  12. Approved: allbery@ncoast.UUCP
  13. X-Archive: comp.sources.misc/8706/8
  14.  
  15. [Comment on the below:  it sure as heck isn't seismo, so it must be sun.
  16. I try to avoid that site anyway, as the cwruecmp!sun link has been marked
  17. DEAD in cwruecmp's map for quite a while now.  ++bsa]
  18.  
  19. This is part 1 of 2.  Read the README (first thing in the archive) to
  20. see what it's part 1 of.  I had to split up even this tiny thing
  21. because someone, either sun or seismo (not sure which), has a 10000
  22. byte limit on mail (yes, only ten thousand bytes).
  23.                     der Mouse
  24.  
  25.                 (mouse@mcgill-vision.uucp)
  26.  
  27. #! /bin/sh
  28. #
  29. # Shar: Shell Archiver
  30. #
  31. # This archive created Sun Jun 28 17:50:43 1987
  32. # Run this through sh to create:
  33. #    README
  34. echo x - README \(5589 characters\)
  35. sed 's/^X//' > README << \SHAR_EOF
  36. Xfiledisk: a pseudo disk driver for UNIX.  This driver makes a normal
  37. X    file look like a filesystem volume.
  38. X
  39. X    Currently in use on 4.3BSD.  Originally developed on 4.2BSD,
  40. X    but the 4.2 version is buried in the mists of the past, so all
  41. X    this says is that it won't take much to make it work on 4.2.  I
  42. X    have attempted to use a somewhat modified version of this under
  43. X    mtXinu 4.3+NFS but unfortunately it keeps crashing the system
  44. X    for reasons yet to be discovered.  I haven't dared even try to
  45. X    make it work on a Sun.  I won't, either, until we get source.
  46. X
  47. XYou should have received:
  48. X
  49. X    - README (this file)
  50. X    - filedisk.c
  51. X    - fdconn.c
  52. X    - fddisc.c
  53. X
  54. XYou will need to:
  55. X
  56. X    - Put filedisk.c somewhere; I'll assume it's in
  57. X       ../local/filedisk.c (that's where we have it).  If you put
  58. X       it somewhere else, change the filename in the next item to
  59. X       point to wherever you did put it.
  60. X
  61. X    - Put a line
  62. Xlocal/filedisk.c    optional memdisk
  63. X       in ../conf/files.YOURSYSTEMNAME.  For example, our
  64. X       configuration is in ../conf/LARRY and the kernel is built in
  65. X       ../LARRY; the file with the above line is then
  66. X       ../conf/files.LARRY (clear enough?).
  67. X
  68. X    - Put a line
  69. Xpseudo-device    filedisk    1
  70. X       in ../conf/YOURSYSTEMNAME.  The 1 specifies how many pseudo
  71. X       disk devices you want to configure in; you may want to
  72. X       increase it.
  73. X
  74. X    - Edit conf.c.  This file is in ../vax for VAX and MicroVAX
  75. X       configurations and seems to be in ../sun (rather than
  76. X       ../machine, which is a link to sun2 or sun3 depending on
  77. X       which sort of Sun you have) for Suns.  You will need to
  78. X       insert the following, somewhere early (before both cdevsw[]
  79. X       and bdevsw[]).
  80. X#include "filedisk.h"
  81. X#if NFILEDISK > 0
  82. Xextern int filediskopen();
  83. Xextern int filediskstrategy();
  84. Xextern int filediskread();
  85. Xextern int filediskwrite();
  86. Xextern int filediskioctl();
  87. Xextern int filedisksize();
  88. X#else
  89. X#define filediskopen nodev
  90. X#define filediskstrategy nodev
  91. X#define filediskread nodev
  92. X#define filediskwrite nodev
  93. X#define filediskioctl nodev
  94. X#define filedisksize nodev
  95. X#endif
  96. X       Now you need to add a device to each of bdevsw[] and
  97. X       cdevsw[].  The bdevsw entry should look like
  98. X    { filediskopen,    nulldev,    filediskstrategy,nodev,        /* 10 */
  99. X      filedisksize,    0 },
  100. X       (the 10 should be changed to whatever number you choose to
  101. X       put it at).  The cdevsw entry should look like
  102. X    filediskopen,    nulldev,    filediskread,    filediskwrite,    /* 34 */
  103. X    filediskioctl,    nulldev,    nulldev,    0,
  104. X    seltrue,    0,
  105. X       again, with the 34 changed to whatever is appropriate.
  106. X
  107. X    - add two #define lines to ../h/ioctl.h:
  108. X#define LIOC_FSF_SET    _IOW(l,1,char *)        /* setup filedisk */
  109. X#define LIOC_FSF_CLEAR    _IO(l,2)            /* clear filedisk */
  110. X
  111. XYou can now re-run config and rebuild your kernel.
  112. X
  113. XIf I haven't forgotten anything (:-), it should run fine.  Test the new
  114. Xkernel.  When you are satisfied that adding the filedisk driver hasn't
  115. Xbroken anything else, you can try it out:
  116. X
  117. X    - Create entries in /dev.  We use /dev/filedisk0 and
  118. X       /dev/rfiledisk0 (just 0 since we have just one configured
  119. X       in; if we had two, they'd be filedisk0/rfiledisk0 and
  120. X       filedisk1/rfiledisk1).
  121. X
  122. X    - Compile fdconn.c and fddisc.c; put the binaries wherever you
  123. X       feel appropriate.  As with any disk drive, the /dev entries
  124. X       should be mode xx0, probably mode 600 is best, unless you
  125. X       wouldn't mind entrusting all your users with your root
  126. X       password.  Fdconn and fddisc must be able to open the raw
  127. X       device /dev/rfiledisk0 (or rfiledisk1, or 2, or...) in order
  128. X       to function.
  129. X
  130. XNow to test it.  I should explain what fdconn and fddisc do.  Fdconn
  131. Xconnects a pseudo-disk unit to a file; fddisc breaks the connection
  132. Xcreated by fdconn.  A pseudo-disk unit must be connected to a file
  133. Xbefore it can do anything useful, of course.
  134. X
  135. XLet's test it by just creating a half-meg file and using that as our
  136. Xfilesystem.  First let's create the half-meg file:
  137. X
  138. Xdd if=/dev/full bs=....uh, what, you mean this is the filedisk
  139. Xdistribution rather than the /dev/full driver distribution? ;-)
  140. X
  141. Xyes | dd conv=sync bs=65536 count=8 > bigfile
  142. X
  143. X(65536*8 is 512k; conv=sync makes dd pad each bufferful to the bs=
  144. Xfigure.)  After a few seconds, dd will report 0+8 records in, 8+0
  145. Xrecords out.  Then you will get a "Broken pipe" message, which you
  146. Xshould ignore.  Now we connect this to unit 0:
  147. X
  148. X# fdconn 0 bigfile
  149. X
  150. XNow /dev/filedisk0 and /dev/rfiledisk0 are pseudo-filesystems
  151. Xcontaining lots of junk.  Let's make a filesystem there:
  152. X
  153. X# /etc/mkfs /dev/rfiledisk0 1024
  154. X....mkfs messages....
  155. X
  156. XNow sync the disk just to be safe.  It works just as well to run fsck
  157. Xon it, I find; but if you do neither, I have had it crash mysteriously
  158. Xsometimes (I suspect that some critical filesystem data, like
  159. Xsuperblocks, is still waiting to be written to the disk, because the
  160. Xmkfs used /dev/rfiledisk0 instead of /dev/filedisk0).
  161. X
  162. X# sync
  163. X
  164. XNow we can mount it somewhere:
  165. X
  166. X# /etc/mount /dev/filedisk0 /mnt
  167. X
  168. XAnd away we go!  Note that you pay two penalties for using this driver.
  169. XOne is speed, of course; the other is storage space, since there is all
  170. Xthe usual filesystem overhead.  Most of the uses for this driver are
  171. Xsuch that these really don't matter.  For example, recently I wanted to
  172. Xbuild a boot tape with a slightly non-standard mini-root filesystem on
  173. Xit.  So I just used dd to copy the mini-root off the tape onto a disk
  174. Xfile and then used this driver to mount the mini-root filesystem
  175. Xsomewhere.  Then of course it was trivial to arrange things on the
  176. Xmini-root as I wanted them.  Then just unmount and run fddisc, and use
  177. Xdd to put it back on tape.
  178. X
  179. X                    der Mouse
  180. X
  181. X                (mouse@mcgill-vision.uucp)
  182. SHAR_EOF
  183. if test 5589 -ne "`wc -c README`"
  184. then
  185. echo shar: error transmitting README \(should have been 5589 characters\)
  186. fi
  187. exit 0
  188. # end of shell archive
  189.  
  190.  
  191.