Abstract:
A computer data backup method where copying of data blocks from one medium to another is deferred until a data structure, e.g. a bit map, is generated defining those data blocks that in fact contain data. The data structure is then read to copy to the backup medium the data-containing blocks as defined by the data structure. Since the data structure is generated before the copying is effected, a range of contiguous data-containing blocks is determinable such that all the blocks of that contiguous range may be copied as a single continuous operation. The magnitude of required backup storage is reduced by eliminating the copying of empty blocks in general unless the number of empty blocks between two ranges of contiguous data-containing blocks is less than a predefined number.

Description:
TECHNICAL FIELD 
     This invention relates to computer systems in general, and more specifically, to a method for copying computer data from a first medium to a second medium. 
     BACKGROUND OF THE INVENTION 
     A computer system generally maintains a copy of the operational program information (&#34;generic&#34;) and operational data information (&#34;data base&#34;) on a first medium, which is usually a disk system. Periodically, the information on the disk is copied to a second medium, usually magnetic tape, for the purpose of updating the system or archiving the information on the disk. In stored program controlled switching systems, for example, the generic information and the data base information are copied from the switching system&#39;s disk to a magnetic tape, sent to a central location where they are de-compiled, updated, re-compiled and sent back to the switching system. Also, most systems keep an archive tape copy of the disk information so that, if the disk information is damaged because of hardware or software errors or a computer &#34;virus&#34;, for example, the computer disk system may be restored to a known state from the tape copy. 
     Over the past several years, disk information storage capacity has increased dramatically. With known computer data backup arrangements, the time required to copy disk information onto tape and the magnitude of required tape storage become increasingly serious problems with increased capacity disk storage. 
     SUMMARY OF THE INVENTION 
     These problems are solved and a technical advance is achieved in accordance with the principles of the invention in an exemplary computer data backup method where any copying of data blocks from one medium to another--for example, from computer disk to magnetic tape--is advantageously deferred until a data structure, e.g. a bit map, is generated defining those data blocks that in fact contain data. The data structure is then read to copy to the backup medium only the data-containing blocks as defined by the data structure. Since the data structure is generated before the copying is effected, a range of contiguous data-containing blocks is determinable such that all the blocks of that contiguous range may be copied as a single continuous operation. The magnitude of required backup storage is reduced by eliminating the copying of empty blocks in general unless the number of empty blocks between two ranges of contiguous data-containing blocks is less than a predefined number. The predefined number corresponds to the size in blocks of media overhead that is occurs any time a copy operation is performed. In accordance with the exemplary data backup method herein, empty blocks are included as part of a single, continuous copy operation with preceding and succeeding ranges of contiguous data-containing blocks only when their elimination would waste both time in the copying operation and storage space on the tape because storing the empty blocks requires less time and storage space than the media overhead. 
     A method in accordance with the invention is used to copy information stored on a first medium to a second medium, where the information is stored on the first medium as a plurality of blocks. The stored blocks that contain data are determined and a data structure is generated defining those blocks. The data structure is then read and the data-containing blocks defined by the read data structure are copied to the second medium. 
     In the exemplary backup method a bit map representing data blocks containing data is generated by traversing the disk file organizational structure. For each data block that is allocated to a file, a bit corresponding to the disk address of the data block is set in the bit map. The bit map is then read to determine a first and a second contiguous range of allocated data blocks to be copied. A determination is made whether the number of contiguous unallocated data blocks between the first and second contiguous ranges is less than a predetermined number corresponding to the media overhead. If the number of contiguous unallocated data blocks is less than the predetermined number, then the first contiguous range, the unallocated data blocks and the second range of contiguous allocated data blocks are concatenated as the first range and the above steps are repeated. When the number of contiguous, non-allocated data blocks is not less than the predetermined number, then a header block is formatted, including the address of the first data block in the first range, and the header block and the first range are copied to tape. When the disk is restored from tape, the header block is read and the data blocks are copied from tape to disk, starting at the address recorded in the header. 
     To elaborate, the exemplary method is used to copy information from a computer disk to a magnetic tape. The information is stored as a plurality of files, where the files are organized into one or more file systems. Each of the file systems includes a list of file descriptors. The file descriptors include a list of the data blocks that store the information on the computer disk. The file systems to be copied to tape are determined and, for each determined file system, a bit map is generated by traversing the file descriptor list for that file system. A bit in the generated bit map is set to a given binary value for each data block in the file descriptor. Processing then proceeds as above. 
     In an alternative method of the invention, a bit map is made of data blocks allocated to files, as above. After the bit map is made, a copy of the bit map is copied to tape. Contiguous ranges of allocated data blocks are then determined and copied to tape. When the tape is copied back to disk, the bit map is first copied into main memory. Next, the data blocks stored on tape are copied to disk, at locations corresponding to the set bits in the bit map. 
    
    
     BRIEF DESCRIPTION OF THE DRAWINGS 
     FIG. 1 is a block diagram of a distributed telephone switching system with a heavy line block around the portions of the system where an exemplary computer data backup method of the invention is performed; 
     FIG. 2 is a block diagram representative of the data block layout of a disk memory included in the switching system of FIG. 1; 
     FIGS. 3-5 are block diagrams of typical file descriptors for organizing the data blocks of the disk memory included in the switching system of FIG. 1; 
     FIGS. 6-15 are flow charts describing the exemplary computer data backup method performed in the system of FIG. 1; and 
     FIGS. 16-17 are flow charts describing an alternative method of the invention. 
    
    
     DETAILED DESCRIPTION 
     FIG. 1 shows a simplified block diagram of a distributed telephone switching system such as a 5ESS® switching system as manufactured by AT&amp;T. This system is described in the November, 1981 Bell Laboratories Record, beginning at page 258 and in the December, 1981 Bell Laboratories Record, beginning at page 290. This system is used to illustrate the principles of this invention. 
     Fundamentally, the system comprises a central processor 101 and one or more switching modules 102-1-102-N. In the illustrative system, central processor 101 is a commercially available 3B-20D processor, also manufactured by AT&amp;T. Central processor 101 handles functions that require centralized intelligence, including allocation of resources and overall maintenance, and is interfaced with operation support systems for record keeping, trouble shooting, etc. 
     Continuing with FIG. 1, central processor 101 is connected to switch modules 102-1-102-N via a message switch 104 and a time-multiplexed switch 106. Message switch 104 directs the routing of control messages between central processor 101 and the switch modules, and between the switch modules themselves. These messages travel through the time-multiplexed switch 106. 
     Microprocessor controlled switch modules 102 provide most call processing functions. Switch modules 102 provide the interfaces between the system and telephone stations 108 and trunks 110. Connections involving more than a single switch module are provided by the time-multiplex switch 106. Further description of the architecture of the switching system of FIG. 1 is not important to the present invention and is not included herein. 
     Central processor 101 maintains a copy of generic 114 and data base 115 in disk memory 103, and also maintains a copy of the switch modules&#39; generics 118-1-118-N and data bases 120-1-120-N in disk memory 103. During system initialization, the disk copy of the generics and data bases are read into memory of the various processors and modules. Because of the critical nature of the disk information, it is necessary that a backup tape copy is maintained to restore the disk in case of hardware or software errors causing information on the disk to be lost or damaged. Furthermore, when the generic and the data base are updated, a tape copy of the disk is made and sent to a central location where it is updated. Therefore, a method is necessary to quickly and efficiently copy disk information to tape. 
     Heavy line block 100 defines the area of operation of a preferred embodiment of a method of copying information from one medium to a second medium according to this invention. As stated above, a copy of the generic and data base from the CP and the SM&#39;s is stored on disk memory 103. Each generic and data base is stored on disk memory 103 as sequentially addressed data blocks, as illustrated at 105. The numerals 2-15 represent data block addresses, and data blocks marked &#34;DATA&#34; indicate blocks that contain information. The unmarked data blocks are empty. One or more data blocks comprise a file, and one or more files comprise a file system. There may be more than one file system per disk memory 103. 
     Prior art copying methods copy all data blocks 2-15 regardless of whether the blocks contain data. According to this embodiment of this invention, only those blocks that contain data (i.e. 2-4, 6-8, 12-15) are copied to tape. A header block is prepended to each group of data blocks that is copied, and the tape stops after each block, resulting in media overhead, in this instance, two inter-record gaps for tape acceleration to read/write speed and a header block. In the case of data block 5, the media overhead wastes more space than copying the empty data block to tape does. This invention provides a method for solving the above problem. 
     According to an exemplary method of this invention, a bit map 115 is created in CP memory 112, a bit is set in bit map 113 for each data-containing data block in memory 103. For example, reading from the left, bits 2-4, 6-8 and 12-15 are set in bit map 113. The bit map is then read, and a first and second range of contiguous, non-empty data blocks are determined. In this example, data blocks 2-4 are the first range, and data blocks 6-8 are the second range. The number of data blocks between the first and second ranges is then determined, which in this example is one (data block 5). If a number representing the empty data blocks between the first range and the second range is less than the tape required for the media overhead that would be inserted between these two ranges if they were copied separately, then the first range, the empty data blocks and the second range are concatenated as the first range, and a new second range is determined. In this example, the tape required to write the empty data blocks (1) is less than the tape required for the media overhead, and data blocks 2-8 become the first range. These steps are repeated until the tape required to write empty data blocks between the first and second ranges is greater than or equal to the media overhead. In this example, a new second range is determined to be data blocks 12-15. The length of tape required to write data blocks between the first range and the second range (3) is, for purposes of this illustration, greater than the media overhead. A header block is created recording the disk address of the first data block in the first range and the number of data blocks in the first range. The first range is then copied to tape, and the second range becomes the first range. These steps repeat until all data blocks containing data have been copied. 
     The result is shown in 125, where a section of the tape is illustrated. Tape section 125 includes a header file followed by data blocks 2-8. Data block 5 was copied even though it was empty, because it was the only empty data block between two contiguous ranges and the tape required to store the block was shorter than tape required for the media overhead. A new header and range were copied to tape for data blocks 12-15, because the space required to store empty data blocks 9-11 on tape, for example, is larger than the tape space of the media overhead. 
     In order to build the bit map, the organizational structure of the disk memory 103 is traversed, and a bit is marked in the bit map for each data block that is allocated to a file. For purposes of this embodiment of this invention, a data block contains data if it is allocated to a file. Turning now to FIG. 2, the high level layout of the disk 103 is shown. First, the volume table of contents 210 (VTOC) of the disk is read. VTOC 210 lists and describes the file systems on disk 103, including the disk address of the first data block of the file system, the number of data blocks in the file system, and whether the file system contains generic or database data. 
     In this example, there are two file systems 220, 230 on disk 103. The file systems are then read, and a bit is set in bit map 116 (FIG. 1) for any organizational blocks. The first one or more data blocks comprise bootstrap 240 information, as known in the art. Each file system next includes a super block 250, or organization block. Super block 250 includes information regarding file system including size, an offset to the disk address of the first data block, a pointer to a list of free data blocks, etc. Following super block 250 is an array of file descriptors. A file descriptor 260 is a data structure which lists the data blocks belonging to a file. Following the file descriptor table is an array of data blocks. 
     In the file organizational structure of the preferred embodiment of this invention, files may have contiguous data blocks, random data blocks, or a combination of the two. To this end, three types of file descriptors are taken into account when the bit map is made. Turning now to FIG. 3, a regular or random data block file descriptor is illustrated. For each file descriptor 310 of this type there is an array of direct data block addresses ADDR 0-9, labeled 320. In this embodiment, the file descriptor contains, for example, ten entries ADDR 0-9 which directly list data block addresses 340. The last three entries ADDR 10-12, labeled 330, of file descriptor 310 indirectly list data block addresses. ADDR 10 references a data block 350 which is a singly indirect block. Indirect data block 350 lists the addresses of regular data blocks 360. ADDR 11 references a doubly indirect data block 370, which lists up to 128 singly indirect data blocks 375, each of which contains a list of up to 128 regular data blocks 379. Finally, ADDR 12 points to a triply indirect data block 380, which contains a list of up to 128 doubly indirect data blocks 385, each of which contain lists of up to 128 singly indirect data blocks 390, each of which contain lists of up to 128 regular data blocks 395. 
     In FIG. 4, a file descriptor that describes a file consisting of contiguous data blocks is shown. The file descriptor includes the address of the first data block 410, and an entry 420 for the length or number of contiguous data blocks. The rest of the file descriptor is not used. 
     In FIG. 5, a file descriptor of a mixed random and contiguous data blocks is shown. This type of file descriptor lists the address of the first data block 510 and a length or number of contiguous data blocks 520 for up to five different locations on the disk. 
     Turning now to FIG. 6, a flowchart of the exemplary embodiment of this invention is shown. Generally, the exemplary embodiment first initializes data structures and variables used in processing. Next, the specific file systems to be copied are developed into an ordered list. The ordered list of file systems is sequentially traversed and the copy operations are performed on each file system. The copy operations comprise allocating and clearing a bit map and then traversing the file system&#39;s file organizational structure, setting a bit in the bit map corresponding to data blocks allocated to files. After the file system&#39;s organizational structure has been traversed and the bit map made, the copy operation sequentially scans the bit map for set bits. The copy operation records the disk addresses of the first and last data blocks of a first range of allocated data blocks corresponding to contiguous set bits in the bit map. The copy operation next records the addresses of the first and last data blocks of a second range of allocated data blocks corresponding to contiguous set bits in the bit map. The number of contiguous unset bits corresponding to unallocated data blocks between the first and second ranges is calculated. If the calculated number of unset bits is less than a predetermined number corresponding to the size of the media overhead, then the unset bits are treated as if they were set, and the two ranges are combined including all unallocated data blocks. The media overhead is a predetermined constant, for example for a tape 12 blocks, determined by the data density of the tape, inter-record gap size and the distance needed for the tape to be accelerated to read/write speed. The ranges are then copied to tape. 
     Processing begins at circle 610, labeled &#34;start&#34;. Processing continues to action block 620, where variables and data structures used in this process are initialized. In this process, CP memory 112 (FIG. 1) is allocated and cleared, as is known in the art. 
     After initialization 620, processing continues to action block 630, wherein the volume table of contents (VTOC) of the disk being copied to tape is read. The VTOC contains information about the file systems on the disk, as discussed above in connection with FIG. 2, including the disk address of the first data block and the disk address of the last data block, and whether the partition is a generic or a database. Processing proceeds to action block 700 where control transfers to the subroutine of FIG. 7, to determine the file systems to copy. This subroutine will be discussed further in connection with FIG. 7. Processing continues in FIG. 6 to action block 800 where control transfers to the subroutine of FIG. 8 to write the tape. In this subroutine, the file systems to be copied, as determined by the previous subroutine, are read, and a bit map is generated of the blocks that contain data. The bit map is then read, and the data containing blocks are written to tape. This function will be discussed further in connection with FIG. 8. Processing ends in circle 660. 
     Turning now to with FIG. 7, a flow chart of the subroutine 700 is shown. Generally, this subroutine makes a list of the file systems on the disk to be copied to tape, and orders the list so that generic file systems are copied first, and then database file systems are copied. Processing starts in action block 710 where the VTOC block is added to the list of file systems to be copied. The VTOC block is always copied to the tape because it is used to determine target media compatibility when the data is restored from tape. 
     In the preferred embodiment of this invention, file systems on a disk may be selectively copied to tape, or all of the file systems on the disk may be copied. To this end, a specification file as is known in the art containing an alpha numeric string representing the file name of the file system to be copied is copied into a local data structure in action block 720 and read. Processing proceeds to action block 730 where the specification file entries are processed. In block 730 information regarding the file systems, including the starting and ending addresses, is retrieved from the VTOC and stored in the local data structure. A determination is made of each file system whether it is a generic or a database. In action block 740, the file system list is sorted to copy the generic partitions to tape first, and then the database. Processing continues to circle 750, where the program returns to block 700 of FIG. 6. 
     Turning now to FIG. 8 the write tape subroutine is shown starting at circle 800. The write tape subroutine sequentially traverses the previously generated list of file systems to be copied, opens the file system, calls a subroutine to copy the file system to tape, and closes the file system. Basically, this subroutine is a loop. 
     Processing proceeds to decision diamond 810 where a test is made whether there are more file systems to copy to tape. If there are no more file systems to copy, processing proceeds to circle 820 where the program returns. 
     If there are more file systems to copy in decision diamond 810, processing proceeds to action block 830 where the address of the first block and last block of the file system is read from the VTOC entry. Processing proceeds to action block 840 where a tape header for blocks for this file system is initialized. The tape header includes the physical disk address at which the first data block resides. The address is used to restore the data to its proper location on disk when the tape is read. Processing continues to action block 850, where the file system on the disk is opened for reading, in order to gain access to the file system. 
     Processing proceeds to circle 900 where control transfers to the copy file system subroutine. After the copy file system subroutine 900 returns, processing proceeds to block 870 where the file system is closed and the function loops back to decision diamond 810 where it is determined whether there are any more file systems to copy. 
     Turning now to FIG. 9, the copy file system subroutine 900 is shown. The copy file system subroutine first builds a block usage bit map for the file system being copied. Next, a first range of contiguous, allocated data blocks is determined from the bit map, then a second range of contiguous, allocated data blocks is determined from the bit map. If the number of unallocated data blocks between the first range and the second range is less than a predetermined number, then the first and second ranges are merged as the first range, and a new second range is determined. This loop continues until either the end of the file system is encountered, or the number of unallocated data blocks is greater than or equal to the predetermined number. The first range of data blocks is then copied to tape. 
     Processing starts in this subroutine at circle 900. Processing proceeds to circle 1200 where control transfers to the build block usage bit map subroutine 1200. The build block usage bit map subroutine 1200, as will be described below in connection with FIG. 12, builds a bit map of the data storage blocks containing data in this file system. When the build usage bit map subroutine 1200 returns, control transfers to the get disk block range subroutine 1100. The get disk block range subroutine 1100, as will be described below in connection with FIG. 11, determines the next contiguous group of data blocks by scanning the bit map. 
     When the get disk block range subroutine 1100 returns, processing continues to action block 940 where a first range variable is set to the range of disk blocks determined by subroutine 1100. Processing transfers a second time to the get disk block range subroutine 1100 where the next range of contiguous data blocks is determined. When subroutine 1100 returns, a second range variable is set to the next range of data blocks returned from subroutine 1100 in action block 950. 
     Processing continues to decision diamond 955. In decision diamond 955, the process branches if the second range is zero. If second range is zero, then the end of the file system has been encountered, and processing continues through connector A, as described below, in connection with FIG. 10. If the second range is not zero, processing continues to decision diamond 960. In decision diamond 960, the process branches if the number of empty data blocks would take less tape than the media overhead would. If the number of empty data blocks would take less tape than the media overhead would, then processing continues through connector A. If the number of empty data blocks would take less tape than the media overhead, for example, the minimum inter-record gap in decision diamond 960, processing continues to action block 965 where the end of the first range is set to the end of the second range. This action concatenates the first and second ranges, including the empty data blocks between them. Processing then loops around to the get disk block range subroutine 1100 to obtain a new second range. Also entering this loop is connector B, from FIG. 10. 
     Turning now to FIG. 10, processing starting at connector A is shown. Processing proceeds to decision diamond 1010. In decision diamond 1010, processing branches if the address of the first data block of the first range is less than the address of the last data block of the first range. If the address of the first data block is greater than or equal to the address of the last data block, then the entire first range has been copied to tape. Processing then proceeds to decision diamond 1020. In decision diamond 1020, processing branches if the second range is zero. If the second range is zero, all of the data blocks in this file system have been copied, and processing proceeds to circle 1030 where this subroutine returns. If the second range is not zero, then there is another contiguous group of data blocks to be copied in this file system, and the first range is set to the second range in action block 1040. Processing proceeds through junctor B to FIG. 9. 
     If the address of the first block is less than the address of the last block in decision diamond 1010, then there are more data blocks in the first range to copy to tape. A temporary variable labeled &#34;nblocks&#34; is set equal to the number of blocks in the first range in action block 1050. Processing continues to decision diamond 1060 where &#34;nblocks&#34; is checked against the maximum number of blocks that may be copied per tape record. If &#34;nblocks&#34; is greater than the maximum number of blocks that may be copied per tape record, then the first range cannot be copied as a whole. Processing continues to action block 1070 where the variable &#34;nblocks&#34; is set equal to the maximum number of blocks per tape record, and processing proceeds to action block 1080. 
     If in decision diamond 1060, &#34;nblocks&#34; was not greater than the maximum number of blocks that may be copied per tape record, then the first range contiguous group may be copied as a whole. Processing branches to action block 1080 where the header block and the number of blocks starting at the beginning of the first range is copied to tape as known in the art. Processing continues to action block 1090 where the address of the first data block of the first range is increased by the number of blocks copied to tape and processing loops to decision diamond 1010. 
     Turning now to FIG. 11, the get disk block range subroutine 1100 is shown. Processing enters at circle 1100 and proceeds to decision diamond 1110 where the address of the current block is compared to the address of the last block of the file system as determined by reading the superblock. If the address of the current block is greater than or equal to the address of the end of the file system, then processing branches to action block 1120 where the range is set to &#34;zero&#34;, and processing branches to circle 1130 where this subroutine returns. 
     If the address of the current data block is less than the address of the end of the file system, then processing proceeds to decision diamond 1140. If the bit map bit corresponding to the address of the current data block is not set in decision diamond 1140, then processing proceeds to action block 1150 where the current block is increased by one. At this point empty blocks between ranges are being skipped. 
     If the bit map bit for the current block is set in decision diamond 1140, then processing branches to action block 1160, where the starting address of the second range is set to the address of the current data block. Processing proceeds to action block 1170 where the address of the current data block is incremented by one. 
     Processing proceeds to decision diamond 1180 where the address of the current data block is again compared to the address of the end of the file system. If the address of the current data block is not greater than or equal to the end of the file system, a test is made in decision diamond 1190 whether the bit map bit for the current data block is not set. If the bit map bit is determined to be set in decision diamond 1190, then processing loops back to action block 1170. If the bit map bit is not set in decision diamond 1190, or if the address of the current data block is greater than or equal to the end of the file system in decision diamond 1180, then the end of the second range has been reached and the end of the second range is set to the address of the current data block in action block 1192 and the subroutine returns in circle 1196. 
     Turning now to FIG. 12, a flow chart of the build block usage bit map subroutine 1200 is shown. Processing proceeds to decision diamond 1210 where a sanity check is made on the super block of the file system. This test may include checking for a constant value in the super block data structure, or any other sanity check as is know in the art. If the super block does not pass the sanity check, then processing branches to action block 1220 where it is determined that the entire file system will be copied to tape and processing continues to circle 1230 where this subroutine returns. 
     If the super block passes the sanity check in decision diamond 1210 then processing branches to action block 1240. In action block 1240 memory 113 (FIG. 1) is allocated and cleared for the data block bit map. Processing continues to action block 1250 where the first several bits are set in the bit map, representing the super block and the file descriptor table, which are always copied. 
     Processing continues to a loop in which the file descriptor table is processed. In this embodiment of this invention, the file descriptors contain a list of all data-containing data blocks. Therefore, the file descriptor list is sequentially read, and a bit set in the bit map for each data block allocated to an file descriptor. 
     Processing proceeds to decision diamond 1260. In decision diamond 1260, the file descriptor table is checked to determine if there are any more file descriptors to read. If all of the file descriptors have been read, then processing branches to action block 1270 where this subroutine returns. 
     If it is determined there are more file descriptors to read in decision diamond 1260, then processing proceeds to the process file descriptor subroutine 1300. When the process file descriptor subroutine returns, processing loops to decision diamond 1260 to determine if there are any more file descriptors to read. 
     Turning now to FIG. 13, the process file descriptor subroutine 1300 is shown. In this subroutine, all data blocks allocated to an file descriptor are marked on the bit map. Processing enters at the process file descriptor circle 1300 and continues to action block 1310 where the file descriptor is read from disk so that the file descriptor may be processed. Processing continues to decision diamond 1315. In decision diamond 1315, the file descriptor is checked to determine whether the file descriptor is allocated to a file. If the file descriptor is not allocated to a file, then it contains no data blocks, and processing branches to circle 1320 and returns. 
     If the file descriptor is allocated in decision diamond 1315, then the type of file descriptor is checked. Processing continues to decision diamond 1325, where the type is checked if it is of type &#34;1 extent&#34;. If it is a type &#34;1 extent&#34;, a check is made in decision diamond 1330, to determine if the extent is empty. If the extent is empty in decision diamond 1330, then there are no data blocks allocated to this file descriptor, and the subroutine returns in circle 1335. If the extent is not empty in decision diamond 1330, then there are data blocks assigned to this file descriptor, and the data blocks are contiguous. All of the bits are set in the bit map, based on the start and length of the extent of data blocks. Processing continues from action block 1340 to the return circle 1345. 
     If the type is not &#34;1 extent&#34; in decision diamond 1325 processing proceeds to decision diamond 1350 where the type is checked for &#34;extent&#34;. If the type is type &#34;extent&#34; in decision diamond 1350, then processing continues to a loop controlled by decision diamond 1350. This loop processes all &#34;extents&#34; in the file descriptor. A test is made in decision diamond 1355 to determine if all &#34;extents&#34;  have been checked. If all &#34;extents&#34; have been checked in decision diamond 1355, then processing branches to the return circle 1360. If all of the extents have not been checked in decision diamond 1355, then the current extent is checked to determine if the current extent is empty in decision diamond 1365. If the extent is not empty, then all bits in the bit map based on the address of the start data block and length of the extent are set in action block 1370, and processing loops from action block 1370 to decision diamond 1355. 
     If in decision diamond 1350 the type is not &#34;extent&#34;, processing continues to decision diamond 1375 where the type &#34;regular&#34; is checked. If the type is not regular then the file descriptor has no associated data blocks and processing branches to the return circle 1380. 
     If the type is &#34;regular&#34; then processing continues to decision diamond 1385. In decision diamond 1385 a test is made to determine if all of the direct blocks of the file descriptor have been checked. A file descriptor in this embodiment may contain up to ten direct data block addresses. If all of the direct data blocks have not been checked in decision diamond 1385, then a check is made to determine if the next direct data block address is zero in decision diamond 1395. If the next direct block is empty in decision diamond 1395, then processing loops back to decision diamond 1385. If the direct block is not empty, then the bit in the bit map corresponding to the address of the data block is set in action block 1397. Processing then loops back to decision diamond 1385. 
     If in decision diamond 1385 all direct blocks have been checked, then processing proceeds to process the three indirect blocks. Processing continues to decision diamond 1387 where a check is made to determine if all three direct blocks have been processed. If not, processing proceeds to a subroutine 1400, where the indirect blocks are processed. Subroutine 1400 returns and processing loops to decision diamond 1387. Once all three indirect blocks have been processed, processing proceeds to the return circle 1389. 
     Turning now to FIG. 14, the processing of the indirect blocks subroutine 1400 is shown. The process indirect block subroutine performs a depth-first search of three layers of indirection possible in the file system according to this embodiment of this invention. Each indirect block is read from disk and a bit is set in the bit map corresponding to the address of the indirect block. Then the indirect block is sequentially examined, and a bit is set in the bit map corresponding to the address of each data block in the indirect block. This subroutine calls itself recursively until all three levels of indirect blocks have been examined. 
     Processing enters through circle 1400 and proceeds to action block 1410 where the bit map bit corresponding to the address of the indirect block is set. Processing continues to action block 1415, where the indirect block is read from the disk. Processing continues to decision diamond 1420, where a check is made to determine if the indirection level is one. If the indirection level is one, all of the indirect data blocks have been checked except for the first level. Processing proceeds to a loop controlled by decision diamond 1425, where the direct addresses of the data blocks listed in the indirect block are sequentially processed. In decision diamond 1425, a check is made to determine if all of the data blocks in the first indirect level have been checked. If they have, then processing branches to return circle 1430. If all of the data blocks have not been checked in decision diamond 1425, then processing proceeds to decision diamond 1435 where a test is made to determine if the address of the current data block is zero. If the address is zero, processing loops to decision diamond 1425. If the address is not zero, then in action block 1440 a bit in the bit map corresponding to the address of the data block is set and processing loops to decision diamond 1425. 
     If in decision diamond 1420 the indirection level was not one, then processing proceeds to a loop controlled by decision diamond 1445. This loop sequentially processes indirect blocks that contain a list of addresses of other indirect blocks. The indirect block address list is sequentially processed, and, for each non-zero disk address, the process indirect block subroutine is called. 
     In decision diamond 1445, a test is made to determine if all indirect blocks in the list have been checked. If all of the indirect blocks have been checked in decision diamond 1445, then processing proceeds to the return circle 1430. If all of the data blocks have not been checked, then a test is made to determine if address of the current data block is equal to zero in decision diamond 1450. If the address of the data block is equal to zero in decision diamond 1450 then processing loops to decision diamond 1445. If the address of the indirect block is not equal to zero in decision diamond 1450, then processing proceeds to subroutine call 1400, where the indirect block subroutine 1400 is recursively called. When subroutine 1400 returns, processing loops to decision diamond 1445. 
     Turning now to FIG. 15, the procedure for restoring the disk from the tape is shown. This procedure generally takes a tape as it was copied from the disk, and restores the disk blocks to their proper locations. To this end, a decision is made in decision diamond 1510 whether there are further tape records to copy from tape to the disk. If there are no further tape records to copy to the disk in decision diamond 1510, then the program returns in circle 1520. 
     If there are further tape records to copy as determined in decision diamond 1510, processing proceeds to action block 1530, where the header block is copied into memory. Processing proceeds to action block 1540 where the header block is examined for the starting address and the length of the tape record. Processing proceeds to action block 1550. In action block 1550 data blocks which were copied to the tape are copied from the tape to the disk in contiguous ranges, starting at the address read from the header block in action block 1530. Processing then loops to decision diamond 1510. 
     ALTERNATIVE EMBODIMENT 
     Turning now to FIG. 16, an alternative embodiment of a method according to this invention is shown. FIG. 16 shows a modified portion of FIG. 9. Processing proceeds as above through the generation of the bit map 1200, FIG. 12. After the block usage bit map is built 1200, processing proceeds to action block 1610, where a copy of the block usage bit map is written as the first record on the tape. As a result, a header block need not be generated for each data record on tape and tape records may contain non-contiguous blocks. Also, the second range is not required. 
     When the disk is being restored from the tape, FIG. 17, processing enters through circle 1700. As a first step, the bit map is read into memory, in action block 1710. A decision is made in decision diamond 1720 whether there are further tape records to copy. If there are no further tape records to copy to the disk in decision diamond 1720, then the program returns in circle 1730. 
     If there are further tape records to copy as determined in decision diamond 1710, processing proceeds to action block 1740. In action block 1740, data blocks are copied from tape into locations on the disk that correspond to the bit location in the bit map. Processing loops to decision diamond 1740. The tape is then read, and the blocks are copied from the tape to locations on the disk corresponding to the addresses of bits that were set in the bit map. 
     It is to be understood that the above-described embodiments are merely illustrative of the principles of the invention, and that many variations may be devised by those skilled in the art without departing from the spirit and scope of the invention. For example, after it has been determined that the number of empty data blocks is less than the predefined number, the bits representing the empty data blocks can also be set in the bit map, and the first range to be copied to disk determined accordingly. It is, therefore, intended that such variation be included within the scope of the claims.