@(linux)[磁盤管理]
1. 寫在前面
- 在此強調一個Linux的核心機制就是一切皆文件。
- I/O Ports即I/O設備地址禽额,用來標識硬件對應的設備地址孽糖,來讓操作系統(tǒng)以及cpu使用钙蒙。
- CPU的核數不一定就是越多越好福扬,由于CPU協(xié)調之間的協(xié)調問題腕铸,可能性能不升反降惜犀。
2. 設備文件
關聯(lián)至一個設備驅動程序,進而能夠跟與之對應硬件設備進行通信
設備文件分類
- 塊設備:block狠裹,存取單位“塊”虽界,磁盤
- 字符設備:char,存取單位“字符”涛菠,鍵盤
設備號碼
- 主設備號:major number, 標識設備類型
- 次設備號:minor number, 標識同一類型下的不同設備
[root@localhost ~]# ll /dev/
total 0
# 10為主設備號標識相同的設備類型莉御,175/235此設備標識不同的設備
crw-rw----. 1 root video 10, 175 3月 30 08:48 agpgart
crw-------. 1 root root 10, 235 3月 30 08:48 autofs
# 200標識這個單獨的設備
drwxr-xr-x. 2 root root 200 3月 30 08:48 block
硬盤接口類型
接口速率而非硬件設備速率,同一個接口不同的硬盤速率不同
- 并行(實現(xiàn)數據串行工作俗冻,類似雙向兩車道礁叔,但是之間有數據干擾)
- IDE:133MB/s
- SCSI:640MB/s
- 串口(實現(xiàn)數據串行工作,類型單向四車道)
- SATA3:6Gbps(需要除以8來得到實際速率)
- SAS:6Gbps
- USB:480MB/s
- 單位(rpm): rotations per minute
磁盤設備的設備文件命名
命名格式:/dev/DEV_FILE
- IDE:
/dev/hd
- SCSI, SATA, SAS, USB:
/dev/sd
- 不同設備:a-z
/dev/sda
,/dev/sdb
, ... - 同一設備上的不同分區(qū):1,2, ...
/dev/sda1
,/dev/sda5
, ...
3. 機械式硬盤
機械硬盤主要由以下幾部分組成:機械手臂(Boom),磁頭(Head),轉軸(Spindle)迄薄,盤片(Platter)組成晴圾,在實際應用中又將盤片分成了磁道(Track),扇區(qū)(Sector)和柱面(Cylinder)噪奄。
機械手臂
機械手臂由控制電路控制,可以前后移動人乓,在機械手臂的前端有磁頭勤篮,機械手臂的作用就是,移動磁頭色罚,使磁頭位于正確的位置上碰缔。
磁頭
磁頭由機械手臂控制在盤片上移動。讀寫硬盤時戳护,磁頭依靠磁盤的高速旋轉引起的空氣動力效應懸浮在盤面上金抡,可以在極短的時間內精確定位到計算機指令指定的磁道上。
盤片
硬盤的存儲介質腌且,所有的信息都存儲在這里梗肝,盤片分為單面盤片和雙面盤片,單面盤片只能在一面進行存儲铺董,雙面盤片能在兩面進行存儲巫击。硬盤的盤片一般采用合金材料,多數為鋁合金精续,盤面上涂著磁性材料坝锰。早期硬盤由于單碟容量低導致盤片較多,現(xiàn)代的硬盤盤片一般只有少數幾片重付。硬盤一般會有一個或多個盤片顷级,每個盤片可以有兩個面(Side)篓吁,即第1個盤片的正面稱為0面贤姆,反面稱為1面;第2個盤片的正面稱為2面,反面稱為3面…依次類推稿茉。每個盤面對應一個磁頭(head)用于讀寫數據。第一個盤面的正面的磁頭稱為0磁頭沽瞭,背面稱為1磁頭激挪;第二個盤片正面的磁頭稱為2磁頭,背面稱為3磁頭橘蜜,以此類推菊匿。盤面數和磁頭數是相等的。
磁道
每個盤片的每個盤面被劃分成多個狹窄的同心圓環(huán)计福,數據就是存儲在這樣的同心圓環(huán)上跌捆,我們將這樣的圓環(huán)稱為磁道(Track),每個盤面可以劃分多個磁道象颖。在每個盤面的最外圈佩厚,離盤心最遠的地方是“0”磁道,向盤心方向依次增長為1磁道说订,2磁道抄瓦,等等。硬盤數據的存放就是從最外圈開始陶冷。
扇區(qū)
根據硬盤規(guī)格的不同钙姊,磁道數可以從幾百到成千上萬不等。每個磁道上可以存儲數KB的數據埂伦,但計算機并不需要一次讀寫這么多數據煞额。在這一這基礎上,又把每個磁道劃分成若干弧段沾谜,每段稱為一個扇區(qū)(Sector)膊毁。扇區(qū)是硬盤上存儲的物理單位,每個扇區(qū)可存儲128×2N次方(N=0,1,2,3)字節(jié)的數據基跑。從DOS時代起婚温,每扇區(qū)是128×22=512字節(jié),現(xiàn)在已經成了業(yè)界不成文的規(guī)定涩僻,也沒有哪個硬盤廠商試圖去改變這種約定缭召。也就是說即使計算機只需要硬盤上存儲的某個字節(jié),也須一次把這個字節(jié)所在的扇區(qū)中的全部512字節(jié)讀入內存逆日,再選擇所需的那個字節(jié)嵌巷。扇區(qū)的編號是從1開始,而不是0室抽,這一點需要注意搪哪。另外,硬盤在劃分扇區(qū)時坪圾,和軟盤是有一定區(qū)別的晓折。軟盤的一個磁道中惑朦,扇區(qū)號一般依次編排,如1號漓概,2號漾月,3號…以此類推。
在硬盤磁道中胃珍,扇區(qū)號是按照某個間隔跳躍著編排梁肿。比如,2號扇區(qū)并不是1號扇區(qū)后的按順序的第一個而是第八個觅彰,3號扇區(qū)又是2號扇區(qū)后的按順序的第八個吩蔑,依此類推,這個“八”稱為交叉因子填抬。這個交叉因子的來歷有必要詳述一下烛芬,我們知道,數據讀取經常需要按順序讀取一系列相鄰的扇區(qū)(邏輯數據相鄰)飒责。如對磁道扇區(qū)按物理順序進行編號赘娄,很有可能出現(xiàn)當磁頭讀取完第一個扇區(qū)后,由于盤片轉速過快來不及讀取下一個扇區(qū)宏蛉,(要知道物理相鄰扇區(qū)位置距離是極小的)擅憔,必須等待轉完一圈,這極大浪費了時間檐晕。所以就用交叉來解決這個問題。
柱面
柱面其實是我們抽象出來的一個邏輯概念蚌讼,前面說過辟灰,離盤心最遠的磁道為0磁道,依此往里為1磁道篡石,2磁道芥喇,3磁道….,不同面上相同磁道編號則組成了一個圓柱面凰萨,即所稱的柱面(Cylinder)继控。
簇
將物理相鄰的若干個扇區(qū)稱為了一個簇。操作系統(tǒng)讀寫磁盤的基本單位是扇區(qū)胖眷,而文件系統(tǒng)的基本單位是簇(Cluster)武通。在Windows下,隨便找個幾字節(jié)的文件珊搀,在其上面點擊鼠標右鍵選擇屬性冶忱,看看實際大小與占用空間兩項內容,如大芯澄觥:15 字節(jié) (15 字節(jié))囚枪, 占用空間:4.00 KB (4派诬,096 字節(jié))。這里的占用空間就是你機器分區(qū)的簇大小链沼,因為再小的文件都會占用空間默赂,邏輯基本單位是4K,所以都會占用4K括勺。 簇一般有這幾類大小 4K缆八,8K,16K朝刊,32K耀里,64K等。簇越大存儲性能越好拾氓,但空間浪費嚴重冯挎。簇越小性能相對越低,但空間利用率高咙鞍。NTFS格式的文件系統(tǒng)簇的大小為4K房官。
4. 分區(qū)劃分
4.1 BIOS
BIOS(Basic Input/Output System)
每一臺普通的電腦都會有一個BIOS,用于加載電腦最基本的程式碼续滋,擔負著初始化硬件翰守,檢測硬件功能以及引導操作系統(tǒng)的任務。
0磁道0扇區(qū)
在傳統(tǒng)的系統(tǒng)上疲酌,當我們啟動計算的時候蜡峰,默認的最開始會讀取0磁道0扇區(qū)的數據,其是以
512bytes
為單位來進行硬盤的分區(qū)劃分朗恳,它不屬于任何分區(qū)湿颅,用來標識我們創(chuàng)建的分區(qū)信息等。
格式
MBR(Master Boot Record): 指的是一個一段程序而非一個空間
-
446bytes
: boot loader 主引導記錄 -
64bytes
: 分區(qū)表 -
16bytes
: 標識一個分區(qū) -
2bytes
:55AA
用來標識結尾
實戰(zhàn)演示:
# 首先使用 fdisk -l 確定MBR位置粥诫,標記 * 即為mbr所在分區(qū)
[root@localhost ~]# fdisk -l
Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x00093397
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 41943039 20458496 8e Linux LVM
下面的省略了......
# 備份MBR
dd if=/dev/sda1 of=/root/mbr bs=512 count=1
# 恢復MBR:
dd if=/root/mbr of=/dev/sda1 bs=512 count=1
# 恢復分區(qū)表:
dd if=/root/mbr of=/dev/sda1 bs=512 skip=446 count=66
注:mbr大小512 所以bs=512 count=1 bs=512 skip=446 count=66 用來確定分區(qū)表在備份文件中的位置
# 查看 mbr 分區(qū)信息
[root@localhost ~]# hexdump -C mbr.txt
00000000 58 46 53 42 00 00 10 00 00 00 00 00 00 01 f4 00 |XFSB............|
00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000020 46 74 a4 dd d2 48 40 cb a6 0e 3f 8f 32 c8 e0 2d |Ft...H@...?.2..-|
00000030 00 00 00 00 00 01 00 04 00 00 00 00 00 00 00 80 |................|
00000040 00 00 00 00 00 00 00 81 00 00 00 00 00 00 00 82 |................|
00000050 00 00 00 01 00 00 7d 00 00 00 00 04 00 00 00 00 |......}.........|
00000060 00 00 03 55 b4 b4 02 00 01 00 00 10 00 00 00 00 |...U............|
00000070 00 00 00 00 00 00 00 00 0c 09 08 04 0f 00 00 19 |................|
00000080 00 00 00 00 00 00 02 00 00 00 00 00 00 00 00 af |................|
00000090 00 00 00 00 00 01 44 98 00 00 00 00 00 00 00 00 |......D.........|
000000a0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
000000b0 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 00 |................|
000000c0 00 00 00 00 00 00 00 01 00 00 00 8a 00 00 00 8a |................|
000000d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000200
有一部分給缺失了
分區(qū)類型
- 最多4個主分區(qū)
- 3主分區(qū)+1擴展(N個邏輯分區(qū))
4.2 UEFI
UEFI(Unified Extensible Firmware Interface)
- 即“統(tǒng)一的可擴展固件接口”油航,是一種詳細描述全新類型接口的標準,是適用于電腦的標準固件接口怀浆,旨在代替BIOS(基本輸入/輸出系統(tǒng))谊囚。
- 這種接口用于操作系統(tǒng)自動從預啟動的操作環(huán)境,加載到一種操作系統(tǒng)上执赡,從而達到開機程序化繁為簡節(jié)省時間的目的镰踏。
- UEFI拋去了傳統(tǒng)BIOS需要長時間自檢的問題,讓硬件初始化以及引導系統(tǒng)變得簡潔快速沙合。
UEFI的優(yōu)點
- 通過保護預啟動或預引導進程余境,抵御bootkit攻擊,從而提高安全性。
- 縮短了啟動時間和從休眠狀態(tài)恢復的時間芳来。
- 支持容量超過2.2 TB的驅動器含末。
- 支持64位的現(xiàn)代固件設備驅動程序,系統(tǒng)在啟動過程中可以使用它們來對超過172億GB的內存進行尋址即舌。
- UEFI硬件可與BIOS結合使用佣盒。
5. fdisk
命令
fdisk:對于一塊硬盤來講,最多只能管理15分區(qū)
格式:fdisk -l [-u] [device...]
參數選項:
-
-b <size>
sector size (512, 1024, 2048 or 4096) -
-c[=<mode>]
compatible mode: 'dos' or 'nondos' (default) -
-h
print this help text -
-u[=<unit>]
display units: 'cylinders' or 'sectors' (default) -
-v
print program version -
-C <number>
specify the number of cylinders -
-H <number>
specify the number of heads -
-S <number>
specify the number of sectors per track -
-l
列出指定設備的分區(qū)表信息并退出顽聂,如果沒有給出設備肥惭,那么使用那些在/proc/partitions
(如果存在)
實戰(zhàn)演示:
[root@localhost ~]# fdisk -l
# 第一塊硬盤的總量
Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x00093397
# 單位為扇區(qū),即為512KB
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 41943039 20458496 8e Linux LVM
# 第二塊硬盤的分區(qū)表為空紊搪,暫時沒有分區(qū)
Disk /dev/sdb: 5368 MB, 5368709120 bytes, 10485760 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
[root@localhost ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xd2d77080.
Command (m for help): m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
# 刪除一個分區(qū)
d delete a partition
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
# 列出所有分區(qū)
l list known partition types
# 打印幫助列表
m print this menu
# 創(chuàng)建新分區(qū)
n add a new partition
o create a new empty DOS partition table
# 打印分區(qū)表信息
p print the partition table
# 退出不保存
q quit without saving changes
s create a new empty Sun disklabel
# 修改分區(qū)id
t change a partition's system id
# 修改容量單位
u change display/entry units
# 檢測分區(qū)表
v verify the partition table
# 保存退出
w write table to disk and exit
x extra functionality (experts only)
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-10485759, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-10485759, default 10485759): +1G
Partition 1 of type Linux and of size 1 GiB is set
Command (m for help): l
0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris
1 FAT12 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT-
2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 84 OS/2 hidden C: c6 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 85 Linux extended c7 Syrinx
5 Extended 41 PPC PReP Boot 86 NTFS volume set da Non-FS data
6 FAT16 42 SFS 87 NTFS volume set db CP/M / CTOS / .
7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux plaintext de Dell Utility
8 AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt
9 AIX bootable 4f QNX4.x 3rd part 93 Amoeba e1 DOS access
a OS/2 Boot Manag 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O
b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad hi eb BeOS fs
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD ee GPT
f W95 Ext'd (LBA) 54 OnTrackDM6 a6 OpenBSD ef EFI (FAT-12/16/
10 OPUS 55 EZ-Drive a7 NeXTSTEP f0 Linux/PA-RISC b
11 Hidden FAT12 56 Golden Bow a8 Darwin UFS f1 SpeedStor
12 Compaq diagnost 5c Priam Edisk a9 NetBSD f4 SpeedStor
14 Hidden FAT16 <3 61 SpeedStor ab Darwin boot f2 DOS secondary
16 Hidden FAT16 63 GNU HURD or Sys af HFS / HFS+ fb VMware VMFS
17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fc VMware VMKCORE
18 AST SmartSleep 65 Novell Netware b8 BSDI swap fd Linux raid auto
1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fe LANstep
1c Hidden W95 FAT3 75 PC/IX be Solaris boot ff BBT
1e Hidden W95 FAT1 80 Old Minix
Command (m for help): q
查看內核是否已經識別新的分區(qū)
cat /proc/partations
通知內核重新讀取硬盤分區(qū)表
partx -a
# 如果指定設備則重讀特定設備蜜葱,不指明則一次讀取,如果你有兩個設備則需要執(zhí)行兩次
partx -a /dev/sda
partx -a -n M:N
partx -a -n 4:6 /dev/sda
kpartx -a /dev/DEVICE
kpartx -a /dev/sda
-
partprobe [/dev/DEVICE]
在Cetntos中使用的命令耀石,能夠重新的讀取設定的分區(qū)牵囤。