📄 3.t
字号:
.\" Copyright (c) 1982, 1993.\" The Regents of the University of California. All rights reserved..\".\" Redistribution and use in source and binary forms, with or without.\" modification, are permitted provided that the following conditions.\" are met:.\" 1. Redistributions of source code must retain the above copyright.\" notice, this list of conditions and the following disclaimer..\" 2. Redistributions in binary form must reproduce the above copyright.\" notice, this list of conditions and the following disclaimer in the.\" documentation and/or other materials provided with the distribution..\" 3. All advertising materials mentioning features or use of this software.\" must display the following acknowledgement:.\" This product includes software developed by the University of.\" California, Berkeley and its contributors..\" 4. Neither the name of the University nor the names of its contributors.\" may be used to endorse or promote products derived from this software.\" without specific prior written permission..\".\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION).\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF.\" SUCH DAMAGE..\".\" @(#)3.t 8.1 (Berkeley) 6/5/93.\".ds RH Fixing corrupted file systems.NHFixing corrupted file systems.PPA file systemcan become corrupted in several ways.The most common of these ways areimproper shutdown proceduresand hardware failures..PPFile systems may become corrupted during an.I "unclean halt" .This happens when proper shutdownprocedures are not observed,physically write-protecting a mounted file system,or a mounted file system is taken off-line.The most common operator procedural failure is forgetting to.I syncthe system before halting the CPU..PPFile systems may become further corrupted if proper startupprocedures are not observed, e.g.,not checking a file system for inconsistencies,and not repairing inconsistencies.Allowing a corrupted file system to be used (and, thus, to be modifiedfurther) can be disastrous..PPAny piece of hardware can fail at any time.Failurescan be as subtle as a bad blockon a disk pack, or as blatant as a non-functional disk-controller..NH 2Detecting and correcting corruption.PPNormally.I fsckis run non-interactively.In this mode it will only fixcorruptions that are expected to occur from an unclean halt.These actions are a proper subset of the actions that .I fsckwill take when it is running interactively.Throughout this paper we assume that .I fsck is being run interactively,and all possible errors can be encountered.When an inconsistency is discovered in this mode,.I fsckreports the inconsistency for the operator tochose a corrective action..PPA quiescent\(dd.FS\(dd I.e., unmounted and not being written on..FEfile system may be checked for structural integrityby performing consistency checks on theredundant data intrinsic to a file system.The redundant data is either read fromthe file system,or computed from other known values.The file system.B mustbe in a quiescent state when.I fsckis run,since.I fsckis a multi-pass program..PPIn the following sections,we discuss methods to discover inconsistenciesand possible corrective actionsfor the cylinder group blocks, the inodes, the indirect blocks, andthe data blocks containing directory entries..NH 2Super-block checking.PPThe most commonly corrupted item in a file systemis the summary informationassociated with the super-block.The summary information is prone to corruptionbecause it is modified with every change to the filesystem's blocks or inodes,and is usually corruptedafter an unclean halt..PPThe super-block is checked for inconsistenciesinvolving file-system size, number of inodes,free-block count, and the free-inode count.The file-system size must be larger than thenumber of blocks used by the super-blockand the number of blocks used by the list of inodes.The file-system size and layout informationare the most critical pieces of information for.I fsck .While there is no way to actually check these sizes,since they are statically determined by.I newfs ,.I fsckcan check that these sizes are within reasonable bounds.All other file system checks require that these sizes be correct.If.I fsck detects corruption in the static parameters of the default super-block,.I fsckrequests the operator to specify the location of an alternate super-block..NH 2Free block checking.PP.I Fsckchecks that all the blocksmarked as free in the cylinder group block mapsare not claimed by any files.When all the blocks have been initially accounted for,.I fsckchecks thatthe number of free blocksplus the number of blocks claimed by the inodesequals the total number of blocks in the file system..PPIf anything is wrong with the block allocation maps,.I fsckwill rebuild them,based on the list it has computed of allocated blocks..PPThe summary information associated with the super-blockcounts the total number of free blocks within the file system..I Fsckcompares this count to thenumber of free blocks it found within the file system.If the two counts do not agree, then.I fsckreplaces the incorrect count in the summary informationby the actual free-block count..PPThe summary informationcounts the total number of free inodes within the file system..I Fsckcompares this count to the numberof free inodes it found within the file system.If the two counts do not agree, then.I fsckreplaces the incorrect count in thesummary information by the actual free-inode count..NH 2Checking the inode state.PPAn individual inode is not as likely to be corrupted asthe allocation information.However, because of the great number of active inodes,a few of the inodes are usually corrupted..PPThe list of inodes in the file systemis checked sequentially starting with inode 2(inode 0 marks unused inodes;inode 1 is saved for future generations)and progressing through the last inode in the file system.The state of each inode is checked forinconsistencies involving format and type,link count,duplicate blocks,bad blocks,and inode size..PPEach inode contains a mode word.This mode word describes the type and state of the inode.Inodes must be one of six types:regular inode, directory inode, symbolic link inode,special block inode, special character inode, or socket inode.Inodes may be found in one of three allocation states:unallocated, allocated, and neither unallocated nor allocated.This last state suggests an incorrectly formated inode.An inode can get in this state ifbad data is written into the inode list.The only possible corrective action is for.I fsckis to clear the inode..NH 2Inode links.PPEach inode counts thetotal number of directory entrieslinked to the inode..I Fsckverifies the link count of each inodeby starting at the root of the file system,and descending through the directory structure.The actual link count for each inodeis calculated during the descent..PPIf the stored link count is non-zero and the actuallink count is zero,then no directory entry appears for the inode.If this happens,.I fsckwill place the disconnected file in the.I lost+founddirectory.If the stored and actual link counts are non-zero and unequal,a directory entry may have been added or removed without the inode beingupdated.If this happens,.I fsckreplaces the incorrect stored link count by the actual link count..PPEach inode contains a list,or pointers tolists (indirect blocks),of all the blocks claimed by the inode.Since indirect blocks are owned by an inode,inconsistencies in indirect blocks directlyaffect the inode that owns it..PP.I Fsckcompares each block number claimed by an inodeagainst a list of already allocated blocks.If another inode already claims a block number,then the block number is added to a list of.I "duplicate blocks" .Otherwise, the list of allocated blocksis updated to include the block number..PPIf there are any duplicate blocks,.I fsckwill perform a partial secondpass over the inode listto find the inode of the duplicated block.The second pass is needed,since without examining the files associated withthese inodes for correct content,not enough information is availableto determine which inode is corrupted and should be cleared.If this condition does arise(only hardware failure will cause it),then the inode with the earliestmodify time is usually incorrect,and should be cleared.If this happens,.I fsckprompts the operator to clear both inodes.The operator must decide which one should be keptand which one should be cleared..PP.I Fsckchecks the range of each block number claimed by an inode.If the block number islower than the first data block in the file system,or greater than the last data block,then the block number is a.I "bad block number" .Many bad blocks in an inode are usually caused byan indirect block that was not written to the file system,a condition which can only occur if there has been a hardware failure.If an inode contains bad block numbers,.I fsckprompts the operator to clear it..NH 2Inode data size.PPEach inode contains a count of the number of data blocksthat it contains.The number of actual data blocksis the sum of the allocated data blocksand the indirect blocks..I Fsckcomputes the actual number of data blocksand compares that block count againstthe actual number of blocks the inode claims.If an inode contains an incorrect count.I fsckprompts the operator to fix it..PPEach inode contains a thirty-two bit size field.The size is the number of data bytesin the file associated with the inode.The consistency of the byte size field is roughly checkedby computing from the size field the maximum number of blocksthat should be associated with the inode,and comparing that expected block count againstthe actual number of blocks the inode claims..NH 2Checking the data associated with an inode.PPAn inode can directly or indirectlyreference three kinds of data blocks.All referenced blocks must be the same kind.The three types of data blocks are:plain data blocks, symbolic link data blocks, and directory data blocks.Plain data blockscontain the information stored in a file;symbolic link data blockscontain the path name stored in a link.Directory data blocks contain directory entries..I Fsckcan only check the validity of directory data blocks..PPEach directory data block is checked forseveral types of inconsistencies.These inconsistencies includedirectory inode numbers pointing to unallocated inodes,directory inode numbers that are greater thanthe number of inodes in the file system,incorrect directory inode numbers for ``\fB.\fP'' and ``\fB..\fP'',and directories that are not attached to the file system.If the inode number in a directory data blockreferences an unallocated inode,then.I fsckwill remove that directory entry.Again,this condition can only arise when there has been a hardware failure..PPIf a directory entry inode number referencesoutside the inode list, then.I fsckwill remove that directory entry.This condition occurs if bad data is written into a directory data block..PPThe directory inode number entry for ``\fB.\fP''must be the first entry in the directory data block.The inode number for ``\fB.\fP''must reference itself;e.g., it must equal the inode numberfor the directory data block.The directory inode number entryfor ``\fB..\fP'' must bethe second entry in the directory data block.Its value must equal the inode number for theparent of the directory entry(or the inode number of the directorydata block if the directory is theroot directory).If the directory inode numbers areincorrect,.I fsckwill replace them with the correct values.If there are multiple hard links to a directory,the first one encountered is considered the real parentto which ``\fB..\fP'' should point;\fIfsck\fP recommends deletion for the subsequently discovered names..NH 2File system connectivity.PP.I Fsckchecks the general connectivity of the file system.If directories are not linked into the file system, then.I fscklinks the directory back into the file system in the.I lost+founddirectory.This condition only occurs when there has been a hardware failure..ds RH "References".SH\s+2Acknowledgements\s0.PPI thank Bill Joy, Sam Leffler, Robert Elz and Dennis Ritchie for their suggestions and help in implementing the new file system.Thanks also to Robert Henry for his editorial input toget this document together.Finally we thank our sponsors,the National Science Foundation under grant MCS80-05144,and the Defense Advance Research Projects Agency (DoD) underArpa Order No. 4031 monitored by Naval Electronic System Command underContract No. N00039-82-C-0235. (Kirk McKusick, July 1983).PPI would like to thank Larry A. Wehr for advice that leadto the first version of.I fsckand Rick B. Brandt for adapting.I fscktoUNIX/TS. (T. Kowalski, July 1979).sp 2.SH\s+2References\s0.LP.IP [Dolotta78] 20Dolotta, T. A., and Olsson, S. B. eds.,.I "UNIX User's Manual, Edition 1.1\^" ,January 1978..IP [Joy83] 20Joy, W., Cooper, E., Fabry, R., Leffler, S., McKusick, M., and Mosher, D.4.2BSD System Manual,.I "University of California at Berkeley" ,.I "Computer Systems Research Group Technical Report"#4, 1982..IP [McKusick84] 20McKusick, M., Joy, W., Leffler, S., and Fabry, R.A Fast File System for UNIX,\fIACM Transactions on Computer Systems 2\fP, 3.pp. 181-197, August 1984..IP [Ritchie78] 20Ritchie, D. M., and Thompson, K.,The UNIX Time-Sharing System,.I "The Bell System Technical Journal".B 57 ,6 (July-August 1978, Part 2), pp. 1905-29..IP [Thompson78] 20Thompson, K.,UNIX Implementation,.I "The Bell System Technical Journal\^".B 57 ,6 (July-August 1978, Part 2), pp. 1931-46..ds RH Appendix A \- Fsck Error Conditions.bp
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -