格式化 是在磁介质上写入标记的过程,这些标记用于标记磁道和扇区。在磁盘被格式化之前,其磁表面完全是一团混乱的磁信号。当它被格式化时,通过本质上绘制磁道走向和扇区划分的线,将一些秩序带入混乱之中。实际细节并非完全如此,但这并不重要。重要的是,磁盘必须经过格式化才能使用。
这里的术语有点令人困惑:在 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 $ |
$ 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/messages。fdformat 本身不会告知错误在哪里(通常人们并不关心,软盘足够便宜,坏的软盘会自动丢弃)。
$ fdformat /dev/fd0H1440 Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 KB. Formatting ... done Verifying ... read: Unknown error $ |
$ badblocks /dev/fd0H1440 1440 718 719 $ |
许多现代磁盘会自动注意到坏块,并尝试通过使用特殊的、保留的好块来修复它们。这对操作系统是不可见的。如果您好奇这是否正在发生,此功能应记录在磁盘的手册中。即使是这样的磁盘也可能发生故障,如果坏块的数量增长过多,尽管到那时磁盘很可能已经损坏到无法使用的程度。