|
是调用 BIOS。
grub4dos 除了依靠 BIOS 来实现磁盘访问之外,没有别的手段。
实现写盘操作的,不仅只有 dd 和 write,其它命令也有可能会有写盘操作。例如,savedefault, geometry --sync,partnew 等等。
DOS 也可能会有写盘的动作。
所有以上这些写盘,都依赖于 BIOS。如果 BIOS 没有问题,那就没有问题。如果 BIOS 有什么 bug,那就有可能出问题。
当 BIOS 不支持 LBA 的时候,有可能出问题。当 BIOS 支持 LBA 的时候,也有可能出问题。举例来说,你的程序让 BIOS 写入某个扇区,但 BIOS 阴差阳错写入了别的某个扇区,这就把这个无辜的扇区破坏了。
这是无法预防的事情。也没人报告这样的事情发生。但理论上存在这样的危险。因为已知 BIOS 存在 bug,在读扇区的时候,就已经表现出 bug 了。而假如写扇区时存在 bug,那这样的 bug,反而很难发现。比如说,它写入到某个不重要的文件上,造成了这个文件的损坏,但未造成系统问题,因此,用户不能发现这个问题。
即使写入系统文件,造成 Windows 死机,用户也不容易怀疑到 BIOS 的 bug 上面去,而通常怀疑这是病毒所为,重新安装系统,一切又恢复了正常。
---------------------
在实模式启动期间,尽量不要访问大的扇区号。把启动时所要使用的文件(NTLDR、BOOT.INI,GRLDR,MENU.LST,*.IMG,*.ISO 等等)都尽量安排在磁盘的开头。尤其是当你在实模式下写入磁盘的时候,更应该保证写入的文件处于安全范围之内。
一般来说,能够正确地读到多大的扇区号,就也能够安全地写多大的扇区号。但也不能完全保证这一点。我曾遇到一台 DELL 老机器,它支持 LBA 读盘,但不支持 LBA 写盘。写盘时,完全失败,不予写入。这当然不会造成灾难了,因此,这还算是好的呢。
尽量不要在实模式下写盘。
grub4dos 以及 DOS 都是用 BIOS 来读写磁盘的。如果能够避免,尽量避免。你可以切换到 Windows 或者 Linux 下进行写盘。Windows 和 Linux 都不使用 BIOS 来读写磁盘,而是使用系统自带的驱动程序来实现读写操作,都是在保护模式下执行读写操作的。那些驱动程序,通常认为是十分可靠的。 |
|