LinuX 硬盘分区细节
系統引導過程及硬盤分區結構論述
作者:?zhy2111314
來自:?LinuxSir.Org ouc.edu.cn
摘要:?本文是理論性文檔,主要講述系統引導過程以及硬盤的物理結構;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
正文
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
一、系統引導過程簡介
系統引導過程主要由以下幾個步驟組成(以硬盤啟動為例)
1、 開機;
2、 BIOS加電自檢(POST---Power On Self Test),內存地址為0fff:0000;
3、 將硬盤第一個扇區(0頭0道1扇區,也就是Boot Sector)讀入內存地址0000:7c00處;
4、 檢查(WORD)0000:7dfe是否等于0xaa55.若不等于則轉去嘗試其他介質;如果沒有其他啟動介質,則顯示 ”No ROM BASIC” ,然后死機;
5、 跳轉到0000:7c00處執行MBR中的程序;
6、 MBR先將自己復制到0000:0600處,然后繼續執行;
7、 在主分區表中搜索標志為活動的分區.如果發現沒有活動分區或者不止一個活動分區,則停止;
8、 將活動分區的第一個扇區讀入內存地址0000:7c00處;
9、 檢查(WORD)0000:7dfe是否等于0xaa55,若不等于則顯示 “Missing Operating System”,然后停止,或嘗試軟盤啟動;
10、 跳轉到0000:7c00處繼續執行特定系統的啟動程序;
11、 啟動系統.
以上步驟中(2),(3),(4),(5)步由BIOS的引導程序完成;(6),(7),(8),(9),(10)步由MBR中的引導程序完成.
一般多系統引導程序(如Smart Boot Manager, BootStar, PQBoot等)都是將標準主引導記錄替換成自己的引導程序,在運行系統啟動程序之前讓用戶選擇想要啟動的分區.而某些系統自帶的多系統引導程序(如 LILO,NT Loader等)則可以將自己的引導程序放在系統所處分區的第一個扇區中,在Linux中即為兩個扇區的SuperBlock.
注:以上步驟中使用的是標準的MBR,多系統引導程序的引導過程與此不同.
二、硬盤結構及參數
3D參數(Disk Geometry):CHS(Cylinder/Head/Sector) C-Cylinder柱面數表示硬盤每面盤片上有幾條磁道,最大為1024(用10個二進制位存儲);H-Head磁頭數表示硬盤總共有幾個磁頭,也就是幾面盤片,最大為256(用8個二進制位存儲);S-Sector扇區數表示每條磁道上有幾個扇區,最大為63(用6個二進制位存儲).
1、引導扇區
Boot Sector組成
Boot Sector也就是硬盤的第一個扇區,它由MBR(Master Boot Record), DPT(Disk Partition Table) 和 Boot Record ID三部分組成. MBR又稱為主引導記錄,占用Boot Sector的前446個字節(0~0x1BD),存放系統主引導程序(它負責從活動分區中裝載并且運行系統引導程序). DPT即主分區表占用64個字節(0x1BE~0x1FD),記錄磁盤的基本分區信息.主分區表分為四個分區項,每項16個字節,分別記錄每個主分區的信息(因此最多可以有四個主分區). Boot Record ID即引導區標記占用兩個字節(0x1FE~0x1FF),對于合法引導區,它等于0xaa55,這是判別引導區是否合法的標志).
Boot Secor具體結構如圖:
2、分區表結構簡介
分區表由四個分區項構成,每一項結構如下:
BYTE State:分區狀態,0=未激活,0x80=激活(注意此項);
BYTE StartHead:分區起始磁頭號;
WORD StartSC:分區起始扇區和柱面號,底字節的底6位為扇區號,高2位為柱面號的第9,10位,高字節為柱面號的低8位;
BYTE Type:分區類型,如0x0B=FAT32,0x83=Linux等,00表示此項未用;
BYTE EndHead:分區結束磁頭號;
WORD EndSC:分區結束扇區和柱面號,定義同前;
DWORD Relative:在線性尋址方式下的分區相對扇區地址(對于基本分區即為絕對地址);
DWORD Sectors:分區大小(總扇區數).
在DOS或Windows系統下,基本分區必須以柱面為單位劃分(Sectors*Heads個扇區),如對于CHS為764/256/63的硬盤,分區的最小尺寸為256*63*512/1048576=7.875MB.
由于硬盤的第一個扇區已經被引導扇區占用,所以一般來說,硬盤的第一個磁道(0頭0道)的其余62個扇區是不會被分區占用的.某些分區軟件甚至將第一個柱面全部空出來.
擴展分區結構如圖:
硬件不同了
3D參數(Disk Geometry):CHS(Cylinder/Head/Sector) C-Cylinder柱面數表示硬盤每面盤片上有幾條磁道,最大為1024(用10個二進制位存儲);H-Head磁頭數表示硬盤總共有幾個磁頭,也就是幾面盤片,最大為256(用8個二進制位存儲);S-Sector扇區數表示每條磁道上有幾個扇區,最大為63(用6個二進制位存儲).
應該注明以上是以前的磁盤結構。比如我的硬盤就只有兩個盤面,單盤,但是有257heads, 磁道:7297 cylinders。扇區為63。
在Linux系統中存儲設備的兩種表示方法
作者:北南南北
來自:LinuxSir.Org
摘要:?硬盤和硬盤分區在Linux都表示為設備,按我們通俗的說法來說,就是怎么來表示或描述硬盤和或硬盤分區,但這種描述應該是科學和具體的;比如IDE硬盤,在Linux 可以表示為 /dev/hda、/dev/hdb ... ;SCSI 接口的硬盤、SATA接口的硬盤表示為/dev/sda、/dev/sdb ... ... ;而IDE接口的硬盤/dev/hda,也可以表示為hd0 ,而 SCSI 接口的如果是 /dev/sda ,另一種表示方法是sd0;
理解兩種表示方法有何用?至少GRUB引導管理器用到這些知識;另外我們mount (掛載)文件系統(分區),也會用到這些知識;
目錄索引
一、對于IDE接口的硬盤的兩種表示方法;
- 1、IDE接口硬盤,對于整塊硬盤的兩種表示方法;
2、IDE接口硬盤分區的兩種表示方法;?
- 1)硬盤分區的第一種表示方法/dev/hd[a-z]X;
2)硬盤分區的第二種表示方法(hd[0-n],y);
- 1)硬盤分區的第一種表示方法/dev/hd[a-z]X;
二、關于SATA和SCSI接口的硬盤的兩種表示方法;
三、usb及1394接口的存儲設備和軟驅設備;
四、關于存儲設備的不同的表示方法的應用;
- 1、/dev/hd[a-z] 表示方法的應用;
?
- 1)用于mount 掛載文件系統(分區)之用;
2)用于GRUB中指定Linux的根分區的位置;
2、hd[0-n] 表示方法的應用;
- 1)用于mount 掛載文件系統(分區)之用;
五、關于本文;
六、參考文檔;
六、相關文檔;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
正文
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
一、對于IDE接口的硬盤的兩種表示方法;
1、IDE接口硬盤,對于整塊硬盤的兩種表示方法;
IDE接口中的整塊硬盤在Linux系統中表示為/dev/hd[a-z],比如/dev/hda,/dev/hdb ... ... 以此類推,有時/dev/hdc可能表示的是CDROM ,還是以具體的fdisk -l 輸出為準吧;
另一種表示方法是hd[0-n] ,其中n是一個正整數,比如hd0,hd1,hd2 ... ... hdn ;
如果機器中只有一塊硬盤,無論我們通過fdisk -l 列出的是/dev/hda 還是/dev/hdb ,都是hd0;如果機器中存在兩個或兩個以上的硬盤,第一個硬盤/dev/hda 另一種方法表示為hd0,第二個硬盤/dev/hdb,另一種表法是hd1 ;
感覺大家對hd0,hd1這種表示方法并不寞生,現在新的機器,在BIOS 中,在啟動盤設置那塊,硬盤是有hd0,hd1之類的,這就是硬盤表示方法的一種;
對于/dev/hda 類似的表示方法,也并不寞生吧;我們在Linux通過fdisk -l 就可以查到硬盤是/dev/hda還是/dev/hdb;
?
[root@localhost ~]# fdisk -lDisk /dev/hda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
???Device Boot Start End Blocks Id System
/dev/hda1 * 1 970 7791493+ 7 HPFS/NTFS
/dev/hda2 971 9729 70356667+ 5 Extended
/dev/hda5 971 2915 15623181 b W95 FAT32
/dev/hda6 2916 4131 9767488+ 83?linux
/dev/hda7 4132 5590 11719386 83?linux
/dev/hda8 5591 6806 9767488+ 83?linux
/dev/hda9 6807 9657 22900626 83?linux
/dev/hda10 9658 9729 578308+ 82?linux?swap / Solaris
?
請注意第一行, Disk /dev/hda: 80.0 GB, 80026361856 bytes ,這個就是表示機器中只有一個硬盤設備/dev/hda ,體積大小為 80.0G;下面的就是硬盤的分區,每個分區都有詳細的信息,在這里不詳細說了;
2、IDE接口硬盤分區的兩種表示方法;
1)硬盤分區的第一種表示方法/dev/hd[a-z]X;
硬盤的分區也有兩種表示方法,一種是/dev/hd[a-z]X,這個a-z表示a、b、c......z ,X是一個從1開始的正整數;比如/dev/hda1,/dev/hda2 .... /dev/hda6,/dev/hda7 ... ... 值得注意的是/dev/hd[a-z]X,如果X的值是1到4,表示硬盤的主分區(包含擴展分區);邏輯分區從是從5開始的,比如/dev/hda5肯定是邏輯分區了;
我 用fdisk -l 就能列出一個硬盤的分區表,比如:
?
[root@localhost ~]# fdisk -lDisk /dev/hda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
???Device Boot Start End Blocks Id System
/dev/hda1 * 1 970 7791493+ 7 HPFS/NTFS
/dev/hda2 971 9729 70356667+ 5 Extended
/dev/hda5 971 2915 15623181 b W95 FAT32
/dev/hda6 2916 4131 9767488+ 83?linux
/dev/hda7 4132 5590 11719386 83?linux
/dev/hda8 5591 6806 9767488+ 83?linux
/dev/hda9 6807 9657 22900626 83?linux
/dev/hda10 9658 9729 578308+ 82?linux?swap / Solaris
?
2)硬盤分區的第二種表示方法(hd[0-n],y);
我們前面已經說過了整塊硬盤也有兩種表示方法,一種是/dev/hd[a-z]的,另種方法是hd[0-n];
一個硬盤分區首先要大確認在哪個硬盤,然后再確認他所在的位置;做個比喻,比如我住在XXX賓館YYY號房間,我僅僅是告訴別人我在XXX賓館不夠的,還要告訴他YYY房間,這樣來找我的人才能找到我;所以我們要知道一個硬盤分區,除了知道/dev/hd[a-z]以外,還要知道他在哪個位置,也就有前面所說的/dev/hd[a-z]X的說法,確認了分區在/dev/hd[a-z]后,還要通過X來確認具體位置;
本標題中說的是另外一種表示方法 (hd[0-n],y),hd[0-n]我們知道這是硬盤的表示方法之一,如果不懂,請看看前面的東西吧;那這里的y是什么意思呢?y的值是 /dev/hd[a-z]X中的 X-1 ;
用實例來理解吧;
?
[root@localhost ~]# fdisk -lDisk /dev/hda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
???Device Boot Start End Blocks Id System
/dev/hda1 * 1 970 7791493+ 7 HPFS/NTFS
/dev/hda2 971 9729 70356667+ 5 Extended
/dev/hda5 971 2915 15623181 b W95 FAT32
/dev/hda6 2916 4131 9767488+ 83?linux
/dev/hda7 4132 5590 11719386 83?linux
/dev/hda8 5591 6806 9767488+ 83?linux
/dev/hda9 6807 9657 22900626 83?linux
/dev/hda10 9658 9729 578308+ 82?linux?swap / Solaris
?
/dev/hda1 等同 (hd0,0)
/dev/hda2 等同 (hd0,1) 注:看好了,這個是擴展分區,在Linux還是Windows是不能掛載的;
/dev/hda5 等同 (hd0,4)
/dev/hda6 等同 (hd0,5)
/dev/hda7 等同 (hd0,6)
/dev/hda8 等同 (hd0,7)
... ...
/dev/hda10 同 (hd0,9)
對于機器中只有一個硬盤來說,無論在Linux通過/dev/hda 還是/dev/hdb ,用 hd[0-n]表示方法,都是hd0;所以如果您如果硬盤中列出來的是;
?
[root@localhost ~]# fdisk -lDisk /dev/hdb: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
???Device Boot Start End Blocks Id System
/dev/hdb1 * 1 970 7791493+ 7 HPFS/NTFS
/dev/hdb2 971 9729 70356667+ 5 Extended
/dev/hdb5 971 2915 15623181 b W95 FAT32
/dev/hdb6 2916 4131 9767488+ 83?linux
/dev/hdb7 4132 5590 11719386 83?linux
/dev/hdb8 5591 6806 9767488+ 83?linux
/dev/hdb9 6807 9657 22900626 83?linux
/dev/hdb10 9658 9729 578308+ 82?linux?swap / Solaris
?
對于機器中只有一個硬盤來說,如果通過fdisk -l 列出來的是/dev/hdb的分區表;對應關系和/dev/hda列出的分區表對應關系一樣;
/dev/hdb1 等同 (hd0,0)
/dev/hdb2 等同 (hd0,1) 注:看好了,這個是擴展分區,在Linux還是Windows是不能掛載的;
/dev/hdb5 等同 (hd0,4)
/dev/hdb6 等同 (hd0,5)
/dev/hdb7 等同 (hd0,6)
/dev/hdb8 等同 (hd0,7)
... ...
/dev/hdb10 等同 (hd0,9)
注意:如果機器中有兩塊硬盤,那/dev/hda 另一種表示方法就是hd0,/dev/hdb 的另一種表示方法是hd1;這樣我們就理解 (hd[0-n],y)的寫法了吧;這樣機器只有單個硬盤或者多個硬盤,我們都知道怎么寫了;對不對?可能也不對,那就請指正吧;
二、關于SATA和SCSI接口的硬盤的兩種表示方法;
理解方法和IDE接口的硬盤相同,只是把hd換成sd;
如果您的機器中比如有一個硬盤是/dev/hda ,也有一個硬盤是/dev/sda ,那/dev/sda的硬盤應該是sd0; 具體每個分區用(sd[0-n],y)的表示方法和IDE接口中的算法相同,比如/dev/sda1 就是(sd0,0);
三、usb及1394接口的存儲設備和軟驅設備;
usb存儲設備也目前在內核中在兩種驅動方法,一種是模擬SCSI硬盤,通過fdisk -l 出現的是/dev/sd[0-n] ;如果是模擬SCSI設備的方法來驅動。那usb 存儲設備在Linux的另一種表示方法和前面所說的SCSI和SATA的相同;
但目前新版本的內核中,想拋棄模擬SCSI,我們通過fdisk 列系統存在的存儲設置時會出現 /dev/uba 類似的;但目前這個驅動并不成熟,比如大數據量表現不穩定;其實USB接口的存儲設備,在Linux表現還是比較差;
1394接口存儲調備,在Linux中也是模擬SCSI,我們通過fdisk -l 后,出現的也是/dev/sd[0-n],另一種表示方法(sd[a-z],y)的理解請參照前面所說的; 1394接口的存儲設備在Linux表現極好,USB存儲如果相對1394接口的存儲表現來說,應該不值不提,建議大家購買1394接口的存儲設備;
軟驅在Linux中,是/dev/fd0設備這是一般情況,另一種表示為fd0 ;
CDROM 或DVDROM ,以及COMBO ,一般的情況下是/dev/hdc ;看下面的例子,無論是 /dev/cdrom 還是/dev/dvd ,最后都指向了/dev/hdc;
?
[root@localhost ~]# ls -la /dev/cdromlrwxrwxrwx 1 root root 3 2005-12-14 /dev/cdrom -> hdc
[root@localhost ~]# ls -la /dev/dvd
lrwxrwxrwx 1 root root 3 2005-12-14 /dev/dvd -> hdc
?
四、關于存儲設備的不同的表示方法的應用;
1、/dev/hd[a-z] 表示方法的應用
1)用于mount 掛載文件系統(分區)之用;
我們在前面所說的,硬盤的分區/dev/hd[a-z]X表示方法,一般是用于掛載和讀取文件系統之用的;
?
[root@localhost ~]# fdisk -lDisk /dev/hda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
???Device Boot Start End Blocks Id System
/dev/hda1 * 1 970 7791493+ 7 HPFS/NTFS
/dev/hda2 971 9729 70356667+ 5 Extended
/dev/hda5 971 2915 15623181 b W95 FAT32
/dev/hda6 2916 4131 9767488+ 83?linux
/dev/hda7 4132 5590 11719386 83?linux
/dev/hda8 5591 6806 9767488+ 83?linux
/dev/hda9 6807 9657 22900626 83?linux
/dev/hda10 9658 9729 578308+ 82?linux?swap / Solaris
?
比如我要掛載 /dev/hda9 到系統中;所以過程應該是這樣的;
[root@localhost ~]# mount /dev/hda9 /opt/data/ 注:掛載;
?
是不是掛載好了呢?看下面的信息,顯示已經掛載好了,所以這時我們就能向/opt/data目錄寫東西了,寫的所有東西都記錄在了/dev/hda9上;
?
[root@localhost ~]# df -lhFilesystem 容量 已用 可用 已用% 掛載點
/dev/hda7 11G 9.2G 1.1G 90% /
/dev/shm 236M 0 236M 0% /dev/shm
/dev/hda9 22G 3.9G 18G 18% /opt/data
?
注意:掛載得需要內核支持,另外分區也得建立文件系統,請參考相關文檔 ;
2)用于GRUB中指定Linux的根分區的位置;
在GRUB系統引導管理器,用命令行啟動一個操作系統時,要通過指定Linux根/所在的硬盤分區 /dev/hd[a-z]X;比如 root=/dev/hda7 ;
2、hd[0-n] 表示方法的應用;
這種一般是應用在GRUB的/boot所位于的硬盤分區的指定上;在GRUB的命令行和GRUB的配置文件menu.lst 中都要應用到;
比如我們要把GRUB寫到硬盤的MBR上,在GRUB的命令行模式中要通過root (hd[0-n],y)來指定;這里的root (hd[0-n],y),在GRUB中就/boot所位于的分區;不要搞錯了,有時/boot和Linux的根/并不是處于同一個分區的,就看您安裝Linux時怎么安裝的了;而我們前面所說的root=/dev/hd[a-z]X來指定的是Linux 根/所位于的分區;雖然有時/boot和/同處一個分區,但兩種表示方法在GRUB中各有用途;明白了吧;
比如/boot位于同一個硬盤分區,就可以用類似下的方法來把GRUB寫到硬盤的MBR上;舉個例子;
?
[root@localhost ~]# grub 注:運行GRUB;grub> root (hd0,6) 注:比如/boot位于 (hd0,6)分區上,應該這樣
?Filesystem type is ext2fs, partition type 0x83
grub> setup (hd0)
?Checking if "/boot/grub/stage1" exists... yes
?Checking if "/boot/grub/stage2" exists... yes
?Checking if "/boot/grub/e2fs_stage1_5" exists... yes
?Running "embed /boot/grub/e2fs_stage1_5 (hd0)"... 15 sectors are embedded.
succeeded
?Running "install /boot/grub/stage1 (hd0) (hd0)1+15 p (hd0,6)/boot/grub/stage2
/boot/grub/grub.conf"... succeeded
Done.
grub>quit 注:退出GRUB命令行模式;
如果您不懂,慢慢就會了,我這里寫的只是為了應用罷了;如果您要搞懂為什么Linux的存儲設備表達上是這樣或者那樣的,還是建議您看看kernel的文檔;可能中文文檔并不能滿足您的需要,最好還是洋文的吧;
?
五、關于本文;
這篇關于存儲設備在Linux中有兩種不同的表達方法,可能說的有點復雜化了;用pandonny兄的話來說:“本來是理論性的概念的東西,寫得太理論性的東西新手反而看不懂,還是描述性的往往更容易被新手理解”。
這篇文檔主要是把抽象的概念具體化,我不知道初學的弟兄是否能看得懂,至少我已經盡全力了,對我來說已經是“北南技窮”。關于理論文面的文檔就是翻譯過來也是極為難翻譯的,更不要說簡單的描述了;初學Linux的弟兄,慢慢實踐著來吧;實踐是檢驗真理的唯一標準,相信這一真理絕對沒錯!!千萬不要把我所說過的是真理,真理在你手中。。。。。。因為您是實踐者;
本來寫GRUB入門文檔了,結果發現不寫一寫存儲設備的表示方法不太行,所以被迫寫了這篇文章,雖然勉強,但還是寫出來了
合理規劃您的硬盤分區
作者:北南南北
來自:LinuxSir.Org
提要:對于一個硬盤(包括移動存儲設備)如何規劃分區結構及如何劃分才是比較合理的;為了減少由于硬盤劃分不合理而造成的風險及不必要的麻煩,有必要重述如何對一個硬盤的分區結構進行規劃;
+++++++++++++++++++++++++++++++++++++++++++++
正文
+++++++++++++++++++++++++++++++++++++++++++++
一、關于硬盤種類、物理幾何結構及硬盤容量、分區大小計算;
1、硬盤種類、物理幾何結構
硬盤的種類主要是SCSI 、IDE 、以及現在流行的SATA等;任何一種硬盤的生產都要一定的標準;隨著相應的標準的升級,硬盤生產技術也在升級;比如 SCSI標準已經經歷了SCSI-1 、SCSI-2、SCSI-3;其中目前咱們經常在服務器網站看到的 Ultral-160就是基于SCSI-3標準的;IDE 遵循的是ATA標準,而目前流行的SATA,是ATA標準的升級版本;IDE是并口設備,而SATA是串口,SATA的發展目的是替換IDE;
硬盤的物理幾何結構是由盤、磁盤表面、柱面、扇區組成,一個張硬盤內部是由幾張碟片疊加在一起,這樣形成一個柱體面;每個碟片都有上下表面;磁頭和磁盤表面接觸從而能讀取數據;
2、硬盤容量及分區大小的算法;
我們通過fdsik -l 可以發現如下的信息:
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
???Device Boot Start End Blocks Id System
/dev/hda1 * 1 765 6144831 7 HPFS/NTFS
/dev/hda2 766 2805 16386300 c W95 FAT32 (LBA)
/dev/hda3 2806 9729 55617030 5 Extended
/dev/hda5 2806 3825 8193118+ 83?linux
/dev/hda6 3826 5100 10241406 83?linux
/dev/hda7 5101 5198 787153+ 82?linux?swap / Solaris
/dev/hda8 5199 6657 11719386 83?linux
/dev/hda9 6658 7751 8787523+ 83?linux
/dev/hda10 7752 9729 15888253+ 83?linux
?
其中 heads 是磁盤面;sectors 是扇區;cylinders 是柱面;每個扇區大小是 512byte,也就是0.5K;
通過上面的例子,我們發現此硬盤有 255個磁盤面,有63個扇區,有9729個柱面;所以整個硬盤體積換算公式應該是:
磁面個數 x 扇區個數 x 每個扇區的大小512 x 柱面個數 = 硬盤體積 (單位bytes)
所以在本例中磁盤的大小應該計算如下:
255 x 63 x 512 x 9729 = 80023749120 bytes
提示:由于硬盤生產商和操作系統換算不太一樣,硬盤廠家以10進位的辦法來換算,而操作系統是以2進位制來換算,所以在換算成M或者G 時,不同的算法結果卻不一樣;所以我們的硬盤有時標出的是80G,在操作系統下看卻少幾M;
上面例子中,硬盤廠家算法 和 操作系統算數比較:
硬盤廠家:?80023749120 bytes = 80023749.120 K = 80023.749120 M (向大單位換算,每次除以1000)
操作系統:?80023749120 bytes = 78148192.5 K = 76316.594238281 M (向大單位換算,每次除以1024)
我們在查看分區大小的時候,可以用生產廠家提供的算法來簡單推算分區的大小;把小數點向前移動六位就是以G表示的大小;比如 hda1 的大小約為 6.144831G ;
二、關于硬盤分區劃分標準及合理分區結構;
1、硬盤分區劃分標準
硬盤的分區由主分區、擴展分區和邏輯分區組成;所以我們在對硬盤分區時要遵循這個標準;主分區(包括擴展分區)的最大個數是四個,主分區(包含擴展分區)的個數硬盤的主引導記錄MBR(Master Boot Recorder)決定的,MBR存放啟動管理程序(GRUB,LILO,NTLOARDER等)和分區表記錄。其中擴展分區也算一個主分區;擴展分區下可以包含更多的邏輯分區;所以主分區(包括擴展分區)范圍是從1-4,邏輯分區是從5開始的;比如下面的例子:
/dev/hda1 * 1 765 6144831 7 HPFS/NTFS
/dev/hda2 766 2805 16386300 c W95 FAT32 (LBA)
/dev/hda3 2806 9729 55617030 5 Extended
/dev/hda5 2806 3825 8193118+ 83?linux
/dev/hda6 3826 5100 10241406 83?linux
/dev/hda7 5101 5198 787153+ 82?linux?swap / Solaris
/dev/hda8 5199 6657 11719386 83?linux
/dev/hda9 6658 7751 8787523+ 83?linux
/dev/hda10 7752 9729 15888253+ 83?linux
通過這個例子,我們可以看到主分區有3個,從 hda1-hda3 ,擴展分區由 hda5-hda10 ;此硬盤沒有主分區4,所以也沒有顯示主分區hda4 ;但邏輯分區不可能從4開始,因為那是主分區的位置,明白了吧;
?
2、硬盤設備(包括移動存儲設備)在Linux或者其它類Unix系統的表示;
IDE 硬盤在Linux或者其它類Unix系統的一般表示為 hd* ,比如hda、hdb ... ... ,我們可以通過 fdisk -l 來查看;有時您可能只有一個硬盤,在操作系統中看到的卻是 hdb ,這與硬盤的跳線有關;另外hdc 大多表示是光驅設備;如果您有兩塊硬盤,大多是 hda和hdb。在這方面說的太多也無用,還是以fdisk -l 為準為好;
SCSI 和SATA 硬盤在Linux通常也是表示為 sd* ,比如 sda 、sdb ... ... 以fdisk -l 為準
移動存儲設備在linux表示為 sd* ,比如 sda 、sdb ... ... 以fdisk -l 為準
3、合理的規劃分區;
關于一個磁盤的分區,一個磁盤應該有四個主分區,其中擴展也算一個主分區;存在以下情況:
1)分區結構之一:四個主分區,沒有擴展分區;
?
[主|分區1] [主分|區2] [主|分區3] [主|分區4]?
這種情況,如果您想在一個磁盤上劃分五個以上分區,這樣是行不通的;
三個主分區 一個擴展分區;
這種情況行得通,而且分區的自由度比較大;分區也不受約束,能分超過5個分區;這只是舉一個例子;
2)最合理的的分區方式;
最合理的分區結構:主分區在前,擴展分區在后,然后在擴展分區中劃分邏輯分區;主分區的個數+擴展分區個數要控制在四個之內;比如下面的分區是比較好的;
最不合理的分區結構:?主分區包圍擴展分區;比如下面的;
這樣?[主|分區2]?和?[主|分區4]?之間的?[擴展分區]?是有自由度,但[主|分區4]后的[空白未分區空間]怎么辦?除非把主分區4完全利用擴展分區后的空間,否則您想在主分區4后再劃一個分區是不可能的,劃分邏輯分區更不可能; 雖然類似此種辦法也符合一個磁盤四個主分區的標準,但這樣主分區包圍擴展分區的分區方法實在不可取;
我們根據這個標題,查看一下我們的例子,是不是符合這個標準呢?
/dev/hda1 * 1 765 6144831 7 HPFS/NTFS
/dev/hda2 766 2805 16386300 c W95 FAT32 (LBA)
/dev/hda3 2806 9729 55617030 5 Extended
/dev/hda5 2806 3825 8193118+ 83?linux
/dev/hda6 3826 5100 10241406 83?linux
/dev/hda7 5101 5198 787153+ 82?linux?swap / Solaris
/dev/hda8 5199 6657 11719386 83?linux
/dev/hda9 6658 7751 8787523+ 83?linux
/dev/hda10 7752 9729 15888253+ 83?linux
后記:
?
把分區基礎寫出來,主要是想讓新手弟兄知道什么是合理的分區結構,如果把硬盤分區規劃好了,也為以學習省卻了不少麻煩;在此文后,我計劃寫具體的分區工具介紹;這也算一個基礎知識的積累;雖然老手都會,但新手可能還是需要的;
致謝:
對于本文zhy2111314?兄弟也有貢獻;在此致謝;
linux?查看磁盤分區、文件系統、使用情況的命令和相關工具介紹
作者:北南南北
來自:LinuxSir.Org
提要:linux?磁盤分區表、文件系統的查看、統計的工具很多,有些工具是多功能的,不僅僅是查看磁盤的分區表,而且也能進行磁盤分區的操作;但在本文,我們只講磁盤分區的查看,以及分區的使用情況的查看;本文只是給新手上路之用;關于分區工具的操作,我將在以后做專門介紹;
此文目的:主要是向初學者介紹一下入門必備的一點基礎知識,有了基礎知識才能進階;如果把所有的磁盤操作工具都放在一個文檔里,大家看了也累;基于這種想法,所以我寫文檔的時候,就想讓新手弟兄一目了解,能輕松點就輕松點;生活、工作和學習無不是如此;
操作環境:Fedora core 4.0 i686 & Slackware 10.1
+++++++++++++++++++++++++++++++++++++++
正文
+++++++++++++++++++++++++++++++++++++++
一、df 命令;
df 是來自于coreutils 軟件包,系統安裝時,就自帶的;我們通過這個命令可以查看磁盤的使用情況以及文件系統被掛載的位置;
舉例:
[root@localhost beinan]# df -lh Filesystem 容量 已用 可用 已用% 掛載點 /dev/hda8 11G 6.0G 4.4G 58% / /dev/shm 236M 0 236M 0% /dev/shm /dev/sda1 56G 22G 35G 39% /mnt/sda1我們從中可以看到,系統安裝在/dev/hda8 ;還有一個56G的磁盤分區/dev/sda1掛載在 /mnt/sda1中;
其它的參數請參考 man df
二、fdsik
fdisk 是一款強大的磁盤操作工具,來自util-linux軟件包,我們在這里只說他如何查看磁盤分區表及分區結構;參數 -l ,通過-l 參數,能獲得機器中所有的硬盤的分區情況;
Disk /dev/hda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
???Device Boot Start End Blocks Id System
/dev/hda1 * 1 765 6144831 7 HPFS/NTFS
/dev/hda2 766 2805 16386300 c W95 FAT32 (LBA)
/dev/hda3 2806 7751 39728745 5 Extended
/dev/hda5 2806 3825 8193118+ 83?linux
/dev/hda6 3826 5100 10241406 83?linux
/dev/hda7 5101 5198 787153+ 82?linux?swap / Solaris
/dev/hda8 5199 6657 11719386 83?linux
/dev/hda9 6658 7751 8787523+ 83?linux
?
在上面Blocks中,表示的是分區的大小,Blocks的單位是byte ,我們可以換算成M,比如第一個分區/dev/hda1的大小如果換算成M,應該是6144831/1024=6000M,也就是6G左右,其實沒有這么麻煩,粗略的看一下把小數點向前移動三位,就知道大約的體積有多大了;
System 表示的文件系統,比如/dev/hda1 是NTFS格式的;/dev/hda2 表示是fat32格式的文件系統;.
在此例中,我們要特別注意的是/dev/hda3分區,這是擴展分區;他下面包含著邏輯分區,其實這個分區相當于一個容器;從屬于她的有 hda5,hda6,hda7,hda8,hda9 ;
我們還注意到一點,怎么沒有hda4呢?為什么hda4沒有包含在擴展分區?一個磁盤最多有四個主分區; hda1-4算都是主分區;hda4不可能包含在擴展分區里,另外擴展分區也算主分區;在本例中,沒有hda4這個分區,當然我們可以把其中的一個分區設置為主分區,只是我當時分區的時候沒有這么做而已;
再仔細統計一下,我們看一看這個磁盤是不是還有空間?hda1+hda2+hda3=實際已經分區的體積,所以我們可以這樣算 hda1+hda2+hda3=6144831+16386300+39728745 = 62259876 (b),換算成M單位,小數點向前移三位,所以目前已經劃分好的分區大約占用體積是62259.876(M),其實最精確的計算62259876/1024=60800.67(M);而這個磁盤大小是80.0 GB (80026361856byte),其實實際大小也就是78150.744(M);通過我們一系列的計算,我們可以得出這個硬盤目前還有使用的空間;大約還有18G未分區的空間;
fdisk -l 能列出機器中所有磁盤的個數,也能列出所有磁盤分區情況;比如:
?
[root@localhost beinan]# fdisk -lDisk /dev/hda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
???Device Boot Start End Blocks Id System
/dev/hda1 * 1 765 6144831 7 HPFS/NTFS
/dev/hda2 766 2805 16386300 c W95 FAT32 (LBA)
/dev/hda3 2806 7751 39728745 5 Extended
/dev/hda5 2806 3825 8193118+ 83?linux
/dev/hda6 3826 5100 10241406 83?linux
/dev/hda7 5101 5198 787153+ 82?linux?swap / Solaris
/dev/hda8 5199 6657 11719386 83?linux
/dev/hda9 6658 7751 8787523+ 83?linux
Disk /dev/sda: 60.0 GB, 60011642880 bytes
64 heads, 32 sectors/track, 57231 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
???Device Boot Start End Blocks Id System
/dev/sda1 1 57231 58604528 83?linux
?
通過上面我們可以知道此機器有兩塊硬盤,我們也可以指定fdisk -l 來查看其中一個硬盤的分區情況;
?
[root@localhost beinan]# fdisk -l /dev/sdaDisk /dev/sda: 60.0 GB, 60011642880 bytes
64 heads, 32 sectors/track, 57231 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
???Device Boot Start End Blocks Id System
/dev/sda1 1 57231 58604528 83?linux
通過上面情況可以知道,在/dev/sda 這個磁盤中,只有一個分區;使用量差不多是百分百了;
?
我們還可以來查看 /dev/hda的
?
自己試試看?
三、cfdisk 來自于util-linux的軟件包;
cfdisk 也是一款不錯的分區工具;在有些發行版中,此工具已經從util-linux包中剔除;cfdisk 簡單易用是他的特點;和DOS中的fdisk 相似;在本標題中,我們只來解說如何查看機器的中的磁盤分區狀況及所用的文件系統等;
查看磁盤分區的用法 cfdisk -Ps 磁盤設備名;
比如
[root@localhost beinan]cfdisk -Ps /dev/hda?
[root@localhost beinan]cfdisk -Ps
Partition Table for /dev/hda
???????????????First Last
?# Type Sector Sector Offset Length Filesystem Type (ID) Flag
-- ------- ----------- ----------- ------ ----------- -------------------- ----
?1 Primary 0 23438834 63 23438835?linux?(83) Boot
?2 Primary 23438835 156296384 0 132857550 Extended (05) None
?5 Logical 23438835 155268224 63 131829390?linux?(83) None
?6 Logical 155268225 156296384 63 1028160?linux?swap (82) None
?
我們只用的參數 -Ps,就列出了磁盤的分區情況;目前在Slackware Debian Mandrake 等主流發行版中存在cfdisk ,而fedora 4.0把這個小工具剔除了;有點可惜;這是我在Slackware中操作的;
如果您這樣操作,就更直觀了;
舉例:
?
您所看到的是如下的模式:
?
????????????????????????????????????????cfdisk 2.12a????????????????????????????????????Disk Drive: /dev/hda
??????????????????????????????Size: 80026361856 bytes, 80.0 GB
????????????????????Heads: 255 Sectors per Track: 63 Cylinders: 9729
????Name Flags Part Type FS Type [Label] Size (MB)
?-------------------------------------------------------------------------------------------
????hda1 Boot Primary?linux?ReiserFS 12000.69
????hda5 Logical?linux?ReiserFS 67496.65
????hda6 Logical?linux?swap 526.42
?????[Bootable] [ Delete ] [ Help ] [Maximize] [ Print ] [ Quit ]
?????[ Type ] [ Units ] [ Write ]
????????????????????????Toggle bootable flag of the current partition
?
您進入了cfdisk 的操作界面;用鍵盤移動指針到[Quit]就可以退出;
四、parted 功能不錯的分區工具;在Fedora 4.0中有帶,可以自己安裝上;在此主題中,我們只說如何查看磁盤的分區情況;
調用方法簡單,parted 默認是打開的設備是/dev/hda ,也可以自己指定;比如 parted /dev/hda 或/dev/sda 等;退出的方法是 quit
使用 /dev/hda
(parted) p
/dev/hda 的磁盤幾何結構:0.000-76319.085 兆字節
磁盤標簽類型:msdos
Minor 起始點 終止點 類型 文件系統 標志
1 0.031 6000.842 主分區 ntfs 啟動
2 6000.842 22003.088 主分區 fat32 lba
3 22003.088 60800.690 擴展分區
5 22003.119 30004.211 邏輯分區 reiserfs
6 30004.242 40005.615 邏輯分區 reiserfs
7 40005.646 40774.350 邏輯分區?linux-swap
8 40774.381 52219.094 邏輯分區 ext3
9 52219.125 60800.690 邏輯分區 reiserfs
?
我們在partd 的操作面上,用p就可以列出當前磁盤的分區情況,如果想要查看其它磁盤,可以用 select 功能,比如 select /dev/sda ;
五、qtparted ,與parted 相關的軟件還有qtparted ,也能查看到磁盤的結構和所用的文件系統,是圖形化的;
[beinan@localhost ~]# qtparted
圖形化的查看,一目了然;
點擊查看大圖?Original Image
六、sfdisk 也是一個分區工具,功能也多多;我們在這里只說他的列磁盤分區情況的功能;
自己看看吧;
?
sfdisk 有幾個很有用的功能;有興趣的弟兄不妨看看;
七、partx 也簡要的說一說,有些系統自帶了這個工具,功能也簡單,和fdisk 、parted、cfdisk 來說不值一提;不用也罷;
用法: partx 設備名
?
[root@localhost beinan]# partx /dev/hda# 1: 63- 12289724 ( 12289662 sectors, 6292 MB)
# 2: 12289725- 45062324 ( 32772600 sectors, 16779 MB)
# 3: 45062325-124519814 ( 79457490 sectors, 40682 MB)
# 4: 0- -1 ( 0 sectors, 0 MB)
# 5: 45062388- 61448624 ( 16386237 sectors, 8389 MB)
# 6: 61448688- 81931499 ( 20482812 sectors, 10487 MB)
# 7: 81931563- 83505869 ( 1574307 sectors, 806 MB)
# 8: 83505933-106944704 ( 23438772 sectors, 12000 MB)
# 9: 106944768-124519814 ( 17575047 sectors, 8998 MB)
?
八、查看目前機器中的所有磁盤及分區情況:
major minor #blocks name
???3 0 78150744 hda
???3 1 6144831 hda1
???3 2 16386300 hda2
???3 5 8193118 hda5
???3 6 10241406 hda6
???3 7 787153 hda7
???3 8 11719386 hda8
???3 9 8787523 hda9
???8 0 58605120 sda
???8 1 58604528 sda1
九、mac-fdisk 這個工具主要是用在Powerpc版本的Linux中,咱們常用X86版本中沒有這個工具;這個只是介紹一下
實例解說 fdisk 使用方法
作者:北南南北
來自:LinuxSir.Org
提要:fdisk 是一款功能強大的分區工具,也是目前在Unix類操作系統中最流行的工具之一;分區工具老字號;本篇只介紹其最簡單的分區操作功能;
一、fdisk 的介紹;
fdisk - Partition table manipulator for?linux?,譯成中文的意思是磁盤分區表操作工具;本人譯的不太好,也沒有看中文文檔;其實就是分區工具;
fdsik 能劃分磁盤成為若干個區,同時也能為每個分區指定分區的文件系統,比如linux 、fat32、?linux?、linux swap 、fat16 以及其實類Unix類操作系統的文件系統等;當然我們用fdisk 對磁盤操作分區時,并不是一個終點,我們還要對分區進行格式化所需要的文件系統;這樣一個分區才能使用;這和DOS中的fdisk 是類似的;
二、合理規劃您的硬盤分區;
在操作分區之前,我們要明白硬盤分區一點理論,比如硬盤容量和分區大小的計算;對一個硬盤如何規劃分區等,請參考如下文檔,謝謝;
《合理規劃您的硬盤分區》
三、fdisk -l 查看硬盤及分區信息;
通過《合理規劃您的硬盤分區》?,我們知道主分區(包括擴展分區)的總個數不能超過四個;也不能把擴展分區包圍在主分區之間;根據這個原則,我們劃分硬盤分區就比較容易的多;也能為以后減少不必要的麻煩;
1、通過fdisk -l 查看機器所掛硬盤個數及分區情況;
?
[root@localhost beinan]# fdisk -lDisk /dev/hda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
???Device Boot Start End Blocks Id System
/dev/hda1 * 1 765 6144831 7 HPFS/NTFS
/dev/hda2 766 2805 16386300 c W95 FAT32 (LBA)
/dev/hda3 2806 9729 55617030 5 Extended
/dev/hda5 2806 3825 8193118+ 83?linux
/dev/hda6 3826 5100 10241406 83?linux
/dev/hda7 5101 5198 787153+ 82?linux?swap / Solaris
/dev/hda8 5199 6657 11719386 83?linux
/dev/hda9 6658 7751 8787523+ 83?linux
/dev/hda10 7752 9729 15888253+ 83?linux
Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes
???Device Boot Start End Blocks Id System
/dev/sda1 1 25 201568+ c W95 FAT32 (LBA)
/dev/sda2 26 125 806400 5 Extended
/dev/sda5 26 50 201568+ 83?linux
/dev/sda6 51 76 200781 83?linux
通過上面的信息,我們知道此機器中掛載兩個硬盤(或移動硬盤),其中一個是hda 另一個是sda ;如果我們想查看單個硬盤情況,可以通過 fdisk -l /dev/hda1 或者fdisk -l /dev/sda1 來操作;以fdisk -l 輸出的硬盤標識為準;
?
其中 hda有三個主分區(包括擴展分區),分別是主分區 hda1 hda2 和hda3(擴展分區) ;邏輯分區是 hda5到hda10;
其中 sda 有兩個主分區(包括擴展分區),分別是 hda1 和hda2 (擴展分區);邏輯分區是 sda5 hda6 ;
硬盤總容量=主分區(包括擴展分區)總容量
擴展分區容量=邏輯分區總容量
通過上面的例子,我們可以得知 hda=hda1+hda2+hda3,其中hda3=hda5+hda6+hda7+hda8+hda9+hda10 ... ...
2、關于fdisk -l 一些數值的說明;
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
?
這個硬盤是80G的,有255個磁面;63個扇區;9729個磁柱;每個 cylinder(磁柱)的容量是 8225280 bytes=8225.280 K(約為)=8.225280M(約為);
?
分區序列 引導 開始 終止 容量 分區類型ID 分區類型Device Boot Start End Blocks Id System
/dev/hda1 * 1 765 6144831 7 HPFS/NTFS
/dev/hda2 766 2805 16386300 c W95 FAT32 (LBA)
/dev/hda3 2806 9729 55617030 5 Extended
/dev/hda5 2806 3825 8193118+ 83?linux
/dev/hda6 3826 5100 10241406 83?linux
/dev/hda7 5101 5198 787153+ 82?linux?swap / Solaris
/dev/hda8 5199 6657 11719386 83?linux
/dev/hda9 6658 7751 8787523+ 83?linux
/dev/hda10 7752 9729 15888253+ 83?linux
?
說明:
硬盤分區的表示:在Linux 是通過hd*x 或 sd*x 表示的,其中 * 表示的是a、b、c ... ... x表示的數字 1、2、3 ... ... hd大多是IDE硬盤;sd大多是SCSI或移動存儲;
引導(Boot):表示引導分區,在上面的例子中 hda1 是引導分區;
Start (開始):表示的一個分區從X cylinder(磁柱)開始;
End (結束):表示一個分區到 Y cylinder(磁柱)結束;
id和System 表示的是一個意思,id看起來不太直觀,我們要在fdisk 一個分區時,通過指定id來確認分區類型;比如 7表示的就NTFS 分區;這個在fdisk 中要通過t功能來指定。下面的部份會提到;
Blocks(容量):這是我翻譯的,其實不準確,表示的意思的確是容量的意思,其單位是K;一個分區容量的值是由下面的公式而來的;
Blocks = (相應分區End數值 - 相應分區Start數值)x 單位cylinder(磁柱)的容量
所以我們算一下 hda1的 Blocks 的大小 :
hda1 Blocks=(765-1)x8225.280=6284113.92 K = 6284.113.92M
注:換算單位以硬盤廠家提供的10進位算起,如果以操作系統二進制來算,這個分區容量應該更少一些,得出的這個值和我們通過 fdisk -l 看到的 /dev/hda1的值是大體相當的,因為換算方法不一樣,所以也不可能盡可能的精確;再加上分區時的一點損失之類,有時或大或小是存在的;
我們查看分區大小或者文件的時候,還是用十進制來計算比較直觀;推算辦法是 byte 向前推小數點三位就是K ,K單位的值向前推小數點三位就是M,M向前推小數點三位就是G... ... 一般也差不了多少;這么算就行;
3、估算一個存儲設備是否被完全劃分;
我們估算一個硬盤是否完全被劃分,我們只要看 fdisk -l 輸出的內容中的 cylinders(柱體) 上一個分區的End 和 下一個分區的Start是不是一個連續的數字,另外要看一下每個硬盤設備的fdisk -l 的開頭部份,看一下他的 cylinders(柱體)的值;
比如hda設備,我們看到的是 9729 cylinders ;我們通過 hda的分區表可以看到上一個分區的End的值+1 就是下一個分區的Start 的值;比如 hda2的Start的值是 hda1 的End 的值+1,這證明 hda1 和hda2 中間沒有空白分區,是連續的,以此類推;在 hda10,我們看到 End 的值是9729 ,而在fdisk -l頭部信息中也有9729 cylinders,證明這個硬盤已經完全劃分;
?
Disk /dev/sda: 1035 MB, 1035730944 bytes256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes
???Device Boot Start End Blocks Id System
/dev/sda1 1 25 201568+ c W95 FAT32 (LBA)
/dev/sda2 26 125 806400 5 Extended
/dev/sda5 26 50 201568+ 83?linux
/dev/sda6 51 76 200781 83?linux
?
我們再看看 sda 移動儲是不是被完全劃分了;sda有 125個cylinders (柱體),有一個主分區和一個擴展分區構成;在擴展分區中,我們看到End的值為125,而這個移動硬盤的cylinder也是125,這能說明這個硬盤不可能再添加任何主分區了;根據我們上面所說的 sda1 sda2 sda5 sda6 之間未有任何未劃分空間,但sda6 的cylinders (柱體)的End值卻是 76 ,而 sda總的cylinders (柱體)有125個,由此看來sda 在 sda6后面有未劃分區域;
至于sda 有多少未劃分空間,我們算一下就知道了;擴展分區總容量是 806400 K ,大約是 806.400M左右,而邏輯分區 sda5 和sda6 的大小加起來是 400M左右,所以還仍有400M左右未劃分空間,并且只能劃分為鏈邏輯分區;
四、fdisk 對硬盤及分區的操作,進入fdisk 對硬盤操作階段;
我們可以對硬盤進行分區操作,前提是您把fdisk -l 弄明白了;通過fdisk -l ,我們能找出機器中所有硬盤個數及設備名稱;比如上面的例子,我們會看到兩個設備一個是/dev/hda ,另一個是/dev/sda ;
fdisk 操作硬盤的命令格式如下:
?
[root@localhost beinan]# fdisk 設備?
比如我們通過 fdisk -l 得知 /dev/hda 或者 /dev/sda設備;我們如果想再添加或者刪除一些分區,可以用
?
[root@localhost beinan]# fdisk /dev/hda或
[root@localhost beinan]# fdisk /dev/sda
?
注?在以后的例子中,我們要以 /dev/sda設備為例,來講解如何用fdisk 來操作添加、刪除分區等動作;
1、fdisk 的說明;
當我們通過 fdisk 設備,進入相應設備的操作時,會發現有如下的提示;以 fdisk /dev/sda 設備為例,以下同;
?
[root@localhost beinan]# fdisk /dev/sdaCommand (m for help): 在這里按m ,就會輸出幫助;
Command action
???a toggle a bootable flag
???b edit bsd disklabel
???c toggle the dos compatibility flag
???d delete a partition 注:這是刪除一個分區的動作;
???l list known partition types 注:l是列出分區類型,以供我們設置相應分區的類型;
???m print this menu 注:m 是列出幫助信息;
???n add a new partition 注:添加一個分區;
???o create a new empty DOS partition table
???p print the partition table 注:p列出分區表;
???q quit without saving changes 注:不保存退出;
???s create a new empty Sun disklabel
???t change a partition's system id 注:t 改變分區類型;
???u change display/entry units
???v verify the partition table
???w write table to disk and exit 注:把分區表寫入硬盤并退出;
???x extra functionality (experts only) 注:擴展應用,專家功能;
?
其實我們常用的只有注有中文的,其它的功能我們不常用(呵,主要是我不會用,否則早會賣弄一下了);x擴展功能,也不是常用的;一般的情況下只要懂得 d l m p q t w 就行了;
下面以實例操作來詳述,沒有例子沒有辦法就,新手也看不懂;
2、列出當前操作硬盤的分區情況,用p;
Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes
???Device Boot Start End Blocks Id System
/dev/sda1 1 25 201568+ c W95 FAT32 (LBA)
/dev/sda2 26 125 806400 5 Extended
/dev/sda5 26 50 201568+ 83?linux
/dev/sda6 51 76 200781 83?linux
3、通過fdisk的d指令來刪除一個分區;
Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes
???Device Boot Start End Blocks Id System
/dev/sda1 1 25 201568+ c W95 FAT32 (LBA)
/dev/sda2 26 125 806400 5 Extended
/dev/sda5 26 50 201568+ 83?linux
/dev/sda6 51 76 200781 83?linux
Command (m for help): d 注:執行刪除分區指定;
Partition number (1-6): 6 注:我想刪除 sda6 ,就在這里輸入 6 ;
Command (m for help): p 注:再查看一下硬盤分區情況,看是否刪除了?
Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes
???Device Boot Start End Blocks Id System
/dev/sda1 1 25 201568+ c W95 FAT32 (LBA)
/dev/sda2 26 125 806400 5 Extended
/dev/sda5 26 50 201568+ 83?linux
Command (m for help):
?
警告:刪除分區時要小心,請看好分區的序號,如果您刪除了擴展分區,擴展分區之下的邏輯分區都會刪除;所以操作時一定要小心;如果知道自己操作錯了,請不要驚慌,用q不保存退出;切記切記!!!!在分區操作錯了之時,千萬不要輸入w保存退出!!!
4、通過fdisk的n指令增加一個分區;
Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes
???Device Boot Start End Blocks Id System
/dev/sda1 1 25 201568+ c W95 FAT32 (LBA)
/dev/sda2 26 125 806400 5 Extended
/dev/sda5 26 50 201568+ 83?linux
Command (m for help): n 注:增加一個分區;
Command action
???l logical (5 or over) 注:增加邏輯分區,分區編號要大于5;為什么要大于5,因為已經有sda5了;
???p primary partition (1-4) 注:增加一個主分區;編號從 1-4 ;但sda1 和sda2都被占用,所以只能從3開始;
p
Partition number (1-4): 3
No free sectors available 注:失敗中,為什么失敗?
?
注:我試圖增加一個主分區,看來是失敗了,為什么失敗?因為我們看到主分區+擴展分區把整個磁盤都用光了,看擴展分區的End的值,再看一下 p輸出信息中有125 cylinders;最好還是看前面部份;那里有提到;
所以我們只能增加邏輯分區了;
?
?Command (m for help): nCommand action
???l logical (5 or over)
???p primary partition (1-4)
l 注:在這里輸入l,就進入劃分邏輯分區階段了;
First cylinder (51-125, default 51): 注:這個就是分區的Start 值;這里最好直接按回車,如果您輸入了一個非默認的數字,會造成空間浪費;
Using default value 51
Last cylinder or +size or +sizeM or +sizeK (51-125, default 125): +200M 注:這個是定義分區大小的,+200M 就是大小為200M ;當然您也可以根據p提示的單位cylinder的大小來算,然后來指定 End的數值。回頭看看是怎么算的;還是用+200M這個辦法來添加,這樣能直觀一點。如果您想添加一個10G左右大小的分區,請輸入 +10000M ;
Command (m for help):
5、通過fdisk的t指令指定分區類型;
Partition number (1-6): 6 注:要改變哪個分區類型呢?我指定了6,其實也就是sda6
Hex code (type L to list codes):L 注:在這里輸入L,就可以查看分區類型的id了;
Hex code (type L to list codes): b 注:如果我想讓這個分區是 W95 FAT32 類型的,通過L查看得知 b是表示的是,所以輸入了b;
Changed system type of partition 6 to b (W95 FAT32) 注:系統信息,改變成功;是否是改變了,請用p查看;
Command (m for help): p
Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes
???Device Boot Start End Blocks Id System
/dev/sda1 1 25 201568+ c W95 FAT32 (LBA)
/dev/sda2 26 125 806400 5 Extended
/dev/sda5 26 50 201568+ 83?linux
/dev/sda6 51 75 201568+ b W95 FAT32
6、fdisk 的退出,用q或者 w;
其中 q是 不保存退出,w是保存退出;
?
?
Command (m for help): w或
Command (m for help): q
7、一個添加分區的例子;
本例中我們會添加兩個200M的主分區,其它為擴展分區,在擴展分區中我們添加兩個200M大小的邏輯分區;
?
?
Command (m for help): p 注:列出分區表;Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes
???Device Boot Start End Blocks Id System
Command (m for help): n 注:添加分區;
Command action
???e extended
???p primary partition (1-4)
p 注:添加主分區;
Partition number (1-4): 1 注:添加主分區1;
First cylinder (1-125, default 1): 注:直接回車,主分區1的起始位置;默認為1,默認就好;
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-125, default 125): +200M 注:指定分區大小,用+200M來指定大小為200M
Command (m for help): n 注:添加新分區;
Command action
???e extended
???p primary partition (1-4)
p 注:添加主分區
Partition number (1-4): 2 注:添加主分區2;
First cylinder (26-125, default 26):
Using default value 26
Last cylinder or +size or +sizeM or +sizeK (26-125, default 125): +200M 注:指定分區大小,用+200M來指定大小為200M
Command (m for help): n
Command action
???e extended
???p primary partition (1-4)
e 注:添加擴展分區;
Partition number (1-4): 3 注:指定為3 ,因為主分區已經分了兩個了,這個也算主分區,從3開始;
First cylinder (51-125, default 51): 注:直接回車;
Using default value 51
Last cylinder or +size or +sizeM or +sizeK (51-125, default 125): 注:直接回車,把其余的所有空間都給擴展分區;
Using default value 125
Command (m for help): p
Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes
???Device Boot Start End Blocks Id System
/dev/sda1 1 25 201568+ 83?linux
/dev/sda2 26 50 201600 83?linux
/dev/sda3 51 125 604800 5 Extended
Command (m for help): n
Command action
???l logical (5 or over)
???p primary partition (1-4)
l 注:添加邏輯分區;
First cylinder (51-125, default 51):
Using default value 51
Last cylinder or +size or +sizeM or +sizeK (51-125, default 125): +200M 注:添加一個大小為200M大小的分區;
Command (m for help): n
Command action
???l logical (5 or over)
???p primary partition (1-4)
l 注:添加一個邏輯分區;
First cylinder (76-125, default 76):
Using default value 76
Last cylinder or +size or +sizeM or +sizeK (76-125, default 125): +200M 注:添加一個大小為200M大小的分區;
Command (m for help): p 列出分區表;
Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes
???Device Boot Start End Blocks Id System
/dev/sda1 1 25 201568+ 83?linux
/dev/sda2 26 50 201600 83?linux
/dev/sda3 51 125 604800 5 Extended
/dev/sda5 51 75 201568+ 83?linux
/dev/sda6 76 100 201568+ 83?linux
?
然后我們根據前面所說通過t指令來改變分區類型;
最后不要忘記w保存退出;
五、對分區進行格式化,以及加載;
先提示一下;用 mkfs.bfs mkfs.ext2 mkfs.jfs mkfs.msdos mkfs.vfatmkfs.cramfs mkfs.ext3 mkfs.minix mkfs.reiserfs mkfs.xfs 等命令來格式化分區,比如我想格式化 sda6為ext3文件系統,則輸入;
?
[root@localhost beinan]# mkfs.ext3 /dev/sda6?
如果我想加載 sda6到目前系統來存取文件,應該有mount 命令,但首先您得建一個掛載目錄;比如 /mnt/sda6 ;
?
[root@localhost beinan]# mkdir /mnt/sda6[root@localhost beinan]# mount /dev/sda6 /mnt/sda6
[root@localhost beinan]# df -lh
Filesystem 容量 已用 可用 已用% 掛載點
/dev/hda8 11G 8.4G 2.0G 81% /
/dev/shm 236M 0 236M 0% /dev/shm
/dev/hda10 16G 6.9G 8.3G 46% /mnt/hda10
/dev/sda6 191M 5.6M 176M 4% /mnt/sda6
?
這樣我們就能進入 /mnt/sda6目錄,然后存取文件了;
具體的權限方法,以及mount 更詳細的用法,在以后我會專門寫一個帖子;在一帖中放下所有的內容實在有點為難;
后記:
在本文寫完后,我還要寫另一個分區工具parted;在 Fedora 4.0 中cfdisk 被去掉了;所以不想介紹這個工具
在Fedora core 4.0 加載NTFS和FAT32分區詳述
作者:北南南北
來自:LinuxSir.Org
提要:本文主要介紹ntfs文件系統分區及fat32格式分區的掛載方法:簡單的說就是讓Linux能讀取Windows系統下的分區;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
正文:
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
一、最基本的幾個命令;
1、查看磁盤分區情況的命令fdisk -l ;
比如:
Disk /dev/hda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
???Device Boot Start End Blocks Id System
/dev/hda1 * 1 765 6144831 7 HPFS/NTFS
/dev/hda2 766 2805 16386300 c W95 FAT32 (LBA)
/dev/hda3 2806 7751 39728745 5 Extended
/dev/hda5 2806 3825 8193118+ 83?linux
/dev/hda6 3826 5100 10241406 83?linux
/dev/hda7 5101 5198 787153+ 82?linux?swap / Solaris
/dev/hda8 5199 6657 11719386 83?linux
/dev/hda9 6658 7751 8787523+ 83?linux
?
通過上面的我們可以知道 /dev/hda1 是NTFS格式;/dev/hda2是FAT32格式;
2、mount 命令;
就是磁盤分區的掛載命令,如果內核支持的話,mount 命令能掛載幾乎所有的文件系統,比如 reiserfs;ext2;ext3;ntfs;fat32;jfs等等;在Linux系統中,我們常用的主要有reiserfs;ext3;ext3;在Windows系統中,我們主要用的是NTFS;FAT32;FAT等;
mount -t 文件格式 -o 選項參數 磁盤分區 掛載點目錄名
這樣說可能新手不太明白,什么是文件格式,什么是掛載點目錄名,我們要把一個分區加載到Linux,是不是得有個存放在地方?比如我們把/dev/hda1 掛載到/mnt/winc目錄中;首先我們要看是不是winc是否存在于/mnt目建錄中;如果沒有winc,我們必須建一個;當然掛載點目錄名是自己隨便起命名的,最好用英文;
?
例子在后面舉了,新手弟兄先知道有這回事就行了;
3、df -lh 磁盤使用情況的命令;這個重要吧;
Filesystem 容量 已用 可用 已用% 掛載點
/dev/hda8 11G 5.9G 4.5G 57% /
/dev/shm 236M 0 236M 0% /dev/shm
/dev/hda1 5.9G 3.2G 2.7G 55% /mnt/winc
/dev/hda2 16G 8.1G 7.7G 52% /mnt/wind
/dev/hda5 7.9G 5.8G 2.1G 74% /mnt/slack
4、文件和目錄的權限;
這個在論壇中,我寫過,有時間整理上來;知道umask=000是任何用戶都能讀寫執行的就行了。有些東西慢慢就明白了,多執行幾個命令就OK了。
5、內核的版本;
linux?localhost.localdomain 2.6.11-1.1369_FC4 #1 Thu Jun 2 22:55:56 EDT 2005 i686 i686 i386 GNU/Linux
通過上面得知我目前用的內核的版本是 2.6.11-1.1369_FC4
6.獲取root用戶的命令是su
Password: 在這里輸入您的root密碼,即使輸入了,也不會顯示出來;我們要安裝RPM包,要用到root的超級權限;
[root@localhost beinan]#
二、NTFS文件系統的加載;
1、我們要首先確認系統的內核;我們要根據系統的內核版本來下載支持ntfs的內核補丁;
?
我們在前面已經通過fdisk -l 得知/dev/hda1 是NTFS分區;我們如何加載它呢?在Fedora core 4.0 中,系統默認是不支持NTFS加載的;我們只能安裝第三方kernel的ntfs插件或者編內核來實現,相對于編譯內核來說,插件是最方便的,也是最簡單的;
?
[root@localhost beinan]# uname -alinux?localhost.localdomain 2.6.11-1.1369_FC4 #1 Thu Jun 2 22:55:56 EDT 2005 i686 i686 i386 GNU/Linux
一定要看仔細,是2.6.11-1.1369_FC4,是i686的,沒有帶smp字樣的,smp是支持多處理器的內核,如果您用這樣的內核,就要下載相應版本的smp的;
?
我們到哪去下載呢?
kernel ntfs 項目在 http://linux-ntfs.sourceforge.net
Fedora core 4.0的kernel NTFS的RPM包在:
http://linux-ntfs.sourceforge.net/rpm/fedora4.html
根據上面內核的信息,我們要下載:2.6.11-1.1369_FC4 i686的,下載的應該是:
kernel-module-ntfs-2.6.11-1.1369_FC4-2.1.22-0.rr.6.0.i686.rpm
地址: http://prdownloads.sourceforge.net/linux-ntfs/kernel-module-ntfs-2.6.11-1.1369_FC4-2.1.22-0.rr.6.0.i686.rpm
在這里選一個鏡像下載:
安裝kernel ntfs模塊:
2.判斷哪個分區是NTFS格式,加載NTFS分區;
Disk /dev/hda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
???Device Boot Start End Blocks Id System
/dev/hda1 * 1 765 6144831 7 HPFS/NTFS
/dev/hda2 766 2805 16386300 c W95 FAT32 (LBA)
/dev/hda3 2806 7751 39728745 5 Extended
/dev/hda5 2806 3825 8193118+ 83?linux
/dev/hda6 3826 5100 10241406 83?linux
/dev/hda7 5101 5198 787153+ 82?linux?swap / Solaris
/dev/hda8 5199 6657 11719386 83?linux
/dev/hda9 6658 7751 8787523+ 83?linux
?
我們已經把kernel ntfs的模式安裝好了,現在進入NTFS的分區的加載過程;通過上面的查看,我們知道/dev/hda1是NTFS格式的;
1]我們要建一個掛載點的目錄,比如是在/mnt/目錄下建一個winc的目錄:
[root@localhost beinan]# mkdir /mnt/winc
2]把/dev/hda1 掛載到 /mnt/winc中,這樣我們如果查看/dev/hda1磁盤內容時,就會在/mnt/winc中找得到;
?
注:-t ntfs 說明文件系統的格式是ntfs的;-o是選項 ,選項有什么呢?有nls=utf8 ,意思是Native Language Support(本地語言支持)是utf8,也就是大家常說的語言編碼;Fedora core 4.0 默認的語言編碼就是utf8的,這樣能顯示出中文來;umask=000表示所有的用戶組都可讀可寫,但因為NTFS在Linux中寫入不安全,所以只能讀,不能寫入;如果想寫入,只能自己編內核來實現;但意義并不是太大;
是不是掛載好了呢?
Filesystem 容量 已用 可用 已用% 掛載點
/dev/hda8 11G 5.9G 4.5G 57% /
/dev/shm 236M 0 236M 0% /dev/shm
/dev/hda1 5.9G 3.2G 2.7G 55% /mnt/winc
看來是掛載好了;我們進入 /mnt/winc就知道是不是有內容了;
[root@localhost beinan]# ls
3]如何開機自動加載NTFS文件系統的分區;
我們要根據磁盤的位置,上面我們看到了是/dev/hda1,對不對?所以我在/etc/fstab文件中找加如下的一行;
4]如何將這個磁盤分區放在GNOME或者KDE的桌面上呢?
在KDE下,只需要點一下鼠標,在桌面的空白處按鼠標右鍵就可以找得到了;不多說了,太簡單;
?
在GNOME下也是極簡單的:
比如我是以beinan這個用戶登入的系統,想在放在 beinan 這個用戶的GNOME桌面上;
三、FAT32文件系統的分區的加載;
通過fdisk -l ,我們也知道了 /dev/hda2是FAT32格式的;
?
Linux對FAT32的支持是可讀可寫的,所以沒有必要再安裝什么模塊之類的;
1.我們要建一個掛載點的目錄,比如是在/mnt/目錄下建一個wind的目錄:
2.掛載 /dev/hda2 到/mnt/wind上
看一下是不是掛載好了?
Filesystem 容量 已用 可用 已用% 掛載點
/dev/hda8 11G 5.9G 4.5G 57% /
/dev/shm 236M 0 236M 0% /dev/shm
/dev/hda1 5.9G 3.2G 2.7G 55% /mnt/winc
/dev/hda2 16G 8.1G 7.7G 52% /mnt/wind
看來是掛載好了;應該進去看看;
[root@localhost beinan]#ls -lh?
drwxrwxrwx 3 root root 8.0K 7月 27 11:45 抓圖
drwxrwxrwx 2 root root 8.0K 8月 12 10:21 測試文件
drwxrwxrwx 4 root root 8.0K 7月 27 11:45 電腦硬件
drwxrwxrwx 5 root root 8.0K 7月 27 11:45 網際快車
中文支持沒有問題;這是我機器中的;
3.如何開機自動加載fat文件系統的分區;
我們要根據磁盤的位置,上面我們看到了是/dev/hda1,對不對?所以我在/etc/fstab文件中找加如下的一行;
4]如何將這個磁盤分區放在GNOME或者KDE的桌面上呢?
在KDE下,只需要點一下鼠標,在桌面的空白處按鼠標右鍵就可以找得到了;不多說了,太簡單;
?
在GNOME下也是極簡單的:
比如我是以beinan這個用戶登入的系統,想在放在 beinan 這個用戶的GNOME桌面上;
?
[beinan@localhost ~]$ ln -s /mnt/wind/ ~beinan/Desktop/wind
四、對于文本文件亂碼處理;?
比如我們看到有些文本文件內容是亂碼,我們可以用gedit 打開,然后另存為utf8格式就OK了;
?
?
后記:雖然寫的詳細,但我不敢保證所有初學者都能會操作,但我感覺80%初學者還是按步驟操作不會有問題;
總結
以上是生活随笔為你收集整理的LinuX 硬盘分区细节的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 爆米花桶含增白剂
- 下一篇: pdf.js使用方法