U盤HDD模式無法啟動的原因及解決思路
2024-07-16 17:49:30
供稿:網友
不同的BIOS進行U盤(USB-HDD方式)啟動時,對同一U盤的容量參數---柱面、磁頭和扇區數(簡稱CHS),識別各不相同(證明這一點可以在不同的機器上安裝同一版本的linux,然后插入U盤,使用hdparm /dev/sda命令就可以發現CHS在不同機器各不相同,甚至如果U盤可以使用GRUB啟動的話,在GRUB里使用geometry (hd0)命令也能看出來),這樣在一臺機器上分區格式化所產生的的分區表和FAT磁盤參數表是按照這臺機器所識別的硬盤的CHS來表達的,換到另一臺機器時由于另一臺機器識別的CHS不一樣,這樣就會產生混亂。所幸的是,分區表和FAT磁盤參數表同時還有一種按照相對扇區數來表達的方式,這種表達方式也同時記錄在分區表和磁盤參數表中。
這樣就看軟件使用哪一種數據來工作了,如果使用CHS,那么換一臺機器就一定不會正常工作,如果使用LBA方式訪問磁盤就不會受影響---當然前提是BIOS支持對U盤使用LBA方式訪問即擴展INT13H。而XP對FAT16文件系統分區格式化生成的MBR代碼以及DOS各版本均需依靠CHS工作,所以按照通常方法在一臺機器制作的啟動U盤在另一臺機器啟動就有可能不成功。經測試移動硬盤在各BIOS中的CHS倒是一致的,與該硬盤直接接在IDE口上的CHS相同,所以移動硬盤的USB啟動基本上并無困難。
目前我發現的確實受這一問題的影響,從而影響啟動的程序有:
1、Windows XP及SP1中文版磁盤管理器分區時所寫的MBR
2、dos5、6、6.22、win95的fdisk所寫的MBR
3、dos5、6、6.22、win95的format所寫的boot
4、包括windows95 98 98se的所有的MS DOS的IO.SYS(均需依靠CHS識別FAT文件系統)
5、USBoot產生的MBR和boot(與1相同)
6、使用bootlace.com將grub for dos 0.41中的grldr.mbr安裝至MBR
可能不受這一問題影響的程序有(未經充分測試):
1、win98、98se的fdisk所寫的MBR
2、win98、98se的format所寫的boot(要求FAT16分區類型必須是0xe以支持LBA)
3、ntldr以及隨后啟動的PE或XP環境(當然了,否則U盤就沒法使用了)
4、linux下的install-mbr程序所寫的MBR
5、GNU GRUB 0.95和0.97及其使用grub-install命令安裝的引導代碼
6、syslinux3.36和3.51
7、linux2.4內核以上,基本上linux系統所有程序對FAT文件系統都不會使用CHS
8、grub chs 0.95 0.97(內含的stage1、stage1.5和stage2引導代碼)
所以解決此問題思路相應就有:
1、強制U盤以USB-CDROM、USB-FLOPPY或USB-ZIP方式啟動,這樣各家BIOS就有標準可循了,就不會“自說自話",這也是目前使用U盤量產工具的基本思路,但是這樣就讓沒有量產工具的SD卡+讀卡器的組合失望了,而目前的多數大容量U盤均無寫保護開關或者讀寫速度不理想,有時還是需要高速SD卡+讀卡器的組合;