磁碟快速格式化的理論和實踐 (轉)
的格式化可以分為低階格式化和高階格式化。低階格式化是針對而言的,它能將硬碟中的資料全部清除,包括硬碟的主開機記錄、DOS引導記錄和分割槽表資訊,當然也能掃除將磁碟作為藏身之處的一切。較老版本的CMOS設定中包括了硬碟低階格式化的,可以在CMOS中對硬碟低格,也可以使用一些低格如DM等完成低格操作。磁碟的高階格式化有幾種形式,格式化就是其中的一種,與DOS一起發表的基本FORMAT程式允許對磁碟快速格式化(可選引數/Q)。在介紹快速格式化之前,先對磁碟的結構作一個簡單的介紹,再將快速格式化和一般的高階格式化作一個比較。
一個被成功高階格式化的硬碟可以分成以下幾個部分:主開機記錄和分割槽表資訊、DOS引導記錄、分配表()資訊、根目錄()資訊和資料區。主開機記錄和分割槽表資訊存放在硬碟的第一個扇區中,主開機記錄可以根據操作的不同而任意編寫,基於這一特點,實現多並存就不是一件困難的事情。分割槽表是硬碟第一個扇區中最後64個位元組,對應地分別以“80H”和“55AAH”為起始和結束標誌。它記錄著硬碟邏輯區的個數、起始和結束的扇區號等資訊,其中的“80H”和“55AAH”被稱為是硬碟的兩個關鍵程式碼,丟失後硬碟將不會自舉。DOS引導記錄儲存了對於引導系統的三個檔案的描述,它也包括一個分割槽表資訊。檔案分配表和根目錄資訊記錄著檔案的名字、屬性等以及存放的地址,在檔案定位時,結合分配表資訊和根目錄資訊,就可以很方便地找到檔案。資料區是硬碟中佔用扇區最多的一個部分,用於儲存檔案資料。
再來看看檔案刪除的過程:修改檔案分配表對應資訊、將檔名的第一個字元改掉以及釋放磁碟空間。必須注意,存放在資料區的檔案內容並沒有被刪除,因此刪除的檔案可以被恢復。對比地看,磁碟的高階格式化主要做了以下工作:對磁碟劃分磁軌和扇區、向主引導區和DOS引導區寫入引導資訊、清空檔案分配表和根目錄區並掃描磁軌。然而快速格式化卻不同,它沒有進行磁軌掃描,因此,快速格式化和完全刪除磁碟檔案在效果上是相同的。
與硬碟的結構相比,中沒有主引導區。高階格式化對軟盤同樣要做四件事情,不過就FORMAT 命令而言,在操作之前,會將檔案分配表、根目錄區的內容以映象形式儲存到磁碟最後幾個扇區中,這樣一來,軟盤資料又能被“反格式化”操作恢復回來(只要資料區內容沒有被覆蓋掉)。
鑑於1.44MB 3.5英寸軟盤FAT區和根目錄區所佔扇區數是不變的(FAT1: Sector 1-9; FAT2: Sector 10-18; ROOT: Sector 19-32),我們可以上機實踐一下,編寫一個快速格式化程式,實現對1.44MB 3.5英寸軟盤的快速格式化。由於程式較簡單,沒有儲存UNFORMAT資訊,所以格式化完成後資料無法恢復,因此實驗時應特別小心。我們可以利用C語言庫abswrite來實現快速格式化,因為它是被定義在dos.h標頭檔案中的,因此程式開始時應寫上:
#include
以下是此函式的原形,在此寫出便於參考學習:
int abswrite (int drive, int nsects, int lsect, void *buffer);
與之對應的absread函式原形:
int absread (int drive, int nsects, int lsect, void *buffer);
思路:因為快速格式化是將FAT區和ROOT區清空,那麼我們可以利用abswrite函式向這兩個區域寫零,達到資料清空的目的。程式程式碼如下:
#include
#include
unsigned char buff[512];
main()
{
int i;char c;
printf (“nQuick Format 1.44MBn”);
printf (“Program by ChenQingyang.n”);
printf (“ALL DATA IN THE FLOPPY DISK WILL BE LOST!!n”);
printf (“nInsert a diskette for drive A:n”);
printf (“and press ENTER when ready. . .”);c=getchar();
printf (“nnCleaning FAT area. . .”);
buff[0]=0xf0;buff[1]=buff[2]=0xff;
for (i=3;i<512;i++) buff[i]=0;
abswrite(0,1,1,buff);
abswrite(0,1,10,buff);
for (i=0;i<512;i++) buff[i]=0;
for (i=2;i<10;i++) abswrite (0,1,i,buff);
for (i=11;i<19;i++) abswrite (0,1,i,buff);
printf (“nCleaning ROOT area. . .”);
for (i=19;i<33;i++) abswrite (0,1,i,buff);
printf (“nnQuickFormat Completed!n”);
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-987737/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 軟體測試理論和實踐
- 談理論與實踐
- https理論與實踐HTTP
- 理論指導實踐薦
- [Docker]寫 Dockerfile 的最佳實踐理論Docker
- Java 理論與實踐: 關於異常的爭論Java
- js正則理論與實踐JS
- 理解RESTful:理論與最佳實踐REST
- Golang實時GC的理論與實踐總結GolangGC
- Java理論與實踐:正確使用Volatile變數(轉)Java變數
- Java 執行緒池的理論與實踐Java執行緒
- DevOps 從理論到實踐指南dev
- Flutter 自定義 Widget(理論+實踐)Flutter
- 三層架構--理論與實踐架構
- RH AS3 上快速實現磁碟配額(轉)S3
- 從理論到實踐 全面理解HTTP/2HTTP
- Node直出理論與實踐總結
- Java 理論與實踐: 併發集合類Java
- 深入解析Rivest Cipher 4:理論與實踐
- 混沌理論和專案管理(轉)專案管理
- 如何格式化磁碟?Tuxera NTFS for Mac輕鬆格式化磁碟UXMac
- Code Review理論與實戰 (轉)View
- 【智慧製造】首鋼智造的理論探索與實踐
- 決策樹在機器學習的理論學習與實踐機器學習
- 正交分析法設計理論及實踐
- 理論+實踐解析“IT治理”之模式與原則模式
- 單目標定:從理論到OpenCV實踐OpenCV
- 【軟體工程理論與實踐】Homework(四.1)軟體工程
- Scala隱式轉換理論及進階實踐-Coding技術進階實戰
- Windows NT安全性理論與實踐 (轉)Windows
- 嚴建兵 | 玉米基因組育種的理論與實踐
- 從理論到實踐,Mysql查詢優化剖析MySql優化
- 理論+實踐,帶你掌握動態規劃法動態規劃
- 從Monolith到微服務:理論與實踐 - Kent BeckMono微服務
- 淺入淺出深度學習理論與實踐深度學習
- 圖書 "ERP理論 方法與實踐" 目錄
- Oracle10g Data Guard (Standby) 理論與實踐Oracle
- 廣義智慧集理論實踐——智慧元構建