5.8. 格式化

格式化 是在磁介质上写入标记的过程,这些标记用于标记磁道和扇区。在磁盘被格式化之前,其磁表面完全是一团混乱的磁信号。当它被格式化时,通过本质上绘制磁道走向和扇区划分的线,将一些秩序带入混乱之中。实际细节并非完全如此,但这并不重要。重要的是,磁盘必须经过格式化才能使用。

这里的术语有点令人困惑:在 MS-DOS 和 MS Windows 中,“formatting”(格式化)一词也用于涵盖创建文件系统的过程(这将在下面讨论)。在那里,这两个过程经常结合在一起,特别是对于软盘。当需要区分时,真正的格式化被称为 低级格式化,而创建文件系统被称为 高级格式化。在 UNIX 圈子里,这两者分别被称为格式化和创建文件系统,因此本书也使用这种说法。

对于 IDE 和一些 SCSI 磁盘,格式化实际上是在工厂完成的,不需要重复;因此大多数人很少需要担心它。事实上,格式化硬盘可能会导致其工作效果变差,例如,因为磁盘可能需要以某种非常特殊的方式进行格式化,以允许自动坏扇区替换工作。

需要或可以格式化的磁盘通常无论如何都需要一个特殊的程序,因为驱动器内部格式化逻辑的接口因驱动器而异。格式化程序通常在控制器 BIOS 上,或者作为 MS-DOS 程序提供;这些都不能轻易地在 Linux 中使用。

在格式化期间,可能会在磁盘上遇到坏点,称为 坏块坏扇区。这些有时由驱动器本身处理,但即使这样,如果出现更多坏点,也需要采取一些措施来避免使用磁盘的这些部分。执行此操作的逻辑内置于文件系统中;如何在文件系统中添加信息将在下面介绍。或者,可以创建一个小分区,仅覆盖磁盘的坏部分;如果坏点非常大,这种方法可能是一个好主意,因为文件系统有时可能难以处理非常大的坏区域。

软盘使用 fdformat 进行格式化。要使用的软盘设备文件作为参数给出。例如,以下命令将格式化第一个软盘驱动器中的高密度 3.5 英寸软盘

	$ fdformat /dev/fd0H1440
	Double-sided, 80 tracks, 18 sec/track. Total capacity 
	1440 kB.
	Formatting ... done
	Verifying ... done
	$
	
请注意,如果要使用自动检测设备(例如,/dev/fd0),您必须首先使用 setfdprm 设置设备的参数。为了达到与上述相同的效果,必须执行以下操作
	$ setfdprm /dev/fd0 1440/1440
	$ fdformat /dev/fd0
	Double-sided, 80 tracks, 18 sec/track. Total capacity 
	1440 KB.
	Formatting ... done
	Verifying ... done
	$
	
通常更方便的做法是选择与软盘类型匹配的正确设备文件。请注意,将软盘格式化为包含超出其设计容量的信息是不明智的。

fdformat 还会验证软盘,即检查其是否有坏块。它会多次尝试坏块(通常可以听到,驱动器噪音会发生显著变化)。如果软盘只是轻微损坏(由于读/写磁头上的灰尘,某些错误是错误信号),fdformat 不会报错,但真正的错误会中止验证过程。内核将为它发现的每个 I/O 错误打印日志消息;这些消息将发送到控制台,或者如果正在使用 syslog,则发送到文件/var/log/messagesfdformat 本身不会告知错误在哪里(通常人们并不关心,软盘足够便宜,坏的软盘会自动丢弃)。

	$ fdformat /dev/fd0H1440
	Double-sided, 80 tracks, 18 sec/track. Total capacity 
	1440 KB.
	Formatting ... done
	Verifying ... read: Unknown error
	$
	
badblocks 命令可用于搜索任何磁盘或分区中的坏块(包括软盘)。它不会格式化磁盘,因此可以用于检查甚至现有的文件系统。下面的示例检查一个带有两个坏块的 3.5 英寸软盘。
	$ badblocks /dev/fd0H1440 1440
	718
	719
	$
	
badblocks 输出它找到的坏块的块号。大多数文件系统可以避免这些坏块。它们维护一个已知坏块的列表,该列表在创建文件系统时初始化,并且可以在以后修改。坏块的初始搜索可以通过 mkfs 命令(它初始化文件系统)来完成,但以后的检查应使用 badblocks 完成,并且新的坏块应使用 fsck 添加。我们将在稍后介绍 mkfsfsck

许多现代磁盘会自动注意到坏块,并尝试通过使用特殊的、保留的好块来修复它们。这对操作系统是不可见的。如果您好奇这是否正在发生,此功能应记录在磁盘的手册中。即使是这样的磁盘也可能发生故障,如果坏块的数量增长过多,尽管到那时磁盘很可能已经损坏到无法使用的程度。