Linux運(yùn)維之道(13)——Linux磁盤管理

@(linux)[磁盤管理]


1. 寫在前面

  • 在此強(qiáng)調(diào)一個(gè)Linux的核心機(jī)制就是一切皆文件
  • I/O Ports即I/O設(shè)備地址,用來標(biāo)識(shí)硬件對(duì)應(yīng)的設(shè)備地址,來讓操作系統(tǒng)以及cpu使用。
  • CPU的核數(shù)不一定就是越多越好,由于CPU協(xié)調(diào)之間的協(xié)調(diào)問題,可能性能不升反降。

2. 設(shè)備文件

關(guān)聯(lián)至一個(gè)設(shè)備驅(qū)動(dòng)程序,進(jìn)而能夠跟與之對(duì)應(yīng)硬件設(shè)備進(jìn)行通信

設(shè)備文件分類

  • 塊設(shè)備:block,存取單位“塊”,磁盤
  • 字符設(shè)備:char,存取單位“字符”,鍵盤

設(shè)備號(hào)碼

  • 主設(shè)備號(hào):major number, 標(biāo)識(shí)設(shè)備類型
  • 次設(shè)備號(hào):minor number, 標(biāo)識(shí)同一類型下的不同設(shè)備
[root@localhost ~]# ll /dev/
total 0
# 10為主設(shè)備號(hào)標(biāo)識(shí)相同的設(shè)備類型,175/235此設(shè)備標(biāo)識(shí)不同的設(shè)備
crw-rw----. 1 root video    10, 175 3月  30 08:48 agpgart
crw-------. 1 root root     10, 235 3月  30 08:48 autofs
# 200標(biāo)識(shí)這個(gè)單獨(dú)的設(shè)備
drwxr-xr-x. 2 root root         200 3月  30 08:48 block

硬盤接口類型

接口速率而非硬件設(shè)備速率,同一個(gè)接口不同的硬盤速率不同

  • 并行(實(shí)現(xiàn)數(shù)據(jù)串行工作,類似雙向兩車道,但是之間有數(shù)據(jù)干擾)
  • IDE:133MB/s
  • SCSI:640MB/s
  • 串口(實(shí)現(xiàn)數(shù)據(jù)串行工作,類型單向四車道)
  • SATA3:6Gbps(需要除以8來得到實(shí)際速率)
  • SAS:6Gbps
  • USB:480MB/s
  • 單位(rpm): rotations per minute

磁盤設(shè)備的設(shè)備文件命名

命名格式:/dev/DEV_FILE

  • IDE: /dev/hd
  • SCSI, SATA, SAS, USB: /dev/sd
  • 不同設(shè)備:a-z
    /dev/sda, /dev/sdb, ...
  • 同一設(shè)備上的不同分區(qū):1,2, ...
    /dev/sda1, /dev/sda5, ...

3. 機(jī)械式硬盤

機(jī)械硬盤主要由以下幾部分組成:機(jī)械手臂(Boom),磁頭(Head),轉(zhuǎn)軸(Spindle),盤片(Platter)組成,在實(shí)際應(yīng)用中又將盤片分成了磁道(Track)扇區(qū)(Sector)柱面(Cylinder)。

磁盤結(jié)構(gòu)
磁盤結(jié)構(gòu)

機(jī)械手臂
機(jī)械手臂由控制電路控制,可以前后移動(dòng),在機(jī)械手臂的前端有磁頭,機(jī)械手臂的作用就是,移動(dòng)磁頭,使磁頭位于正確的位置上。

磁頭
磁頭由機(jī)械手臂控制在盤片上移動(dòng)。讀寫硬盤時(shí),磁頭依靠磁盤的高速旋轉(zhuǎn)引起的空氣動(dòng)力效應(yīng)懸浮在盤面上,可以在極短的時(shí)間內(nèi)精確定位到計(jì)算機(jī)指令指定的磁道上。

盤片
硬盤的存儲(chǔ)介質(zhì),所有的信息都存儲(chǔ)在這里,盤片分為單面盤片和雙面盤片,單面盤片只能在一面進(jìn)行存儲(chǔ),雙面盤片能在兩面進(jìn)行存儲(chǔ)。硬盤的盤片一般采用合金材料,多數(shù)為鋁合金,盤面上涂著磁性材料。早期硬盤由于單碟容量低導(dǎo)致盤片較多,現(xiàn)代的硬盤盤片一般只有少數(shù)幾片。硬盤一般會(huì)有一個(gè)或多個(gè)盤片,每個(gè)盤片可以有兩個(gè)面(Side),即第1個(gè)盤片的正面稱為0面,反面稱為1面;第2個(gè)盤片的正面稱為2面,反面稱為3面…依次類推。每個(gè)盤面對(duì)應(yīng)一個(gè)磁頭(head)用于讀寫數(shù)據(jù)。第一個(gè)盤面的正面的磁頭稱為0磁頭,背面稱為1磁頭;第二個(gè)盤片正面的磁頭稱為2磁頭,背面稱為3磁頭,以此類推。盤面數(shù)和磁頭數(shù)是相等的。

磁道
每個(gè)盤片的每個(gè)盤面被劃分成多個(gè)狹窄的同心圓環(huán),數(shù)據(jù)就是存儲(chǔ)在這樣的同心圓環(huán)上,我們將這樣的圓環(huán)稱為磁道(Track),每個(gè)盤面可以劃分多個(gè)磁道。在每個(gè)盤面的最外圈,離盤心最遠(yuǎn)的地方是“0”磁道,向盤心方向依次增長(zhǎng)為1磁道,2磁道,等等。硬盤數(shù)據(jù)的存放就是從最外圈開始。

扇區(qū)
根據(jù)硬盤規(guī)格的不同,磁道數(shù)可以從幾百到成千上萬不等。每個(gè)磁道上可以存儲(chǔ)數(shù)KB的數(shù)據(jù),但計(jì)算機(jī)并不需要一次讀寫這么多數(shù)據(jù)。在這一這基礎(chǔ)上,又把每個(gè)磁道劃分成若干弧段,每段稱為一個(gè)扇區(qū)(Sector)。扇區(qū)是硬盤上存儲(chǔ)的物理單位,每個(gè)扇區(qū)可存儲(chǔ)128×2N次方(N=0,1,2,3)字節(jié)的數(shù)據(jù)。從DOS時(shí)代起,每扇區(qū)是128×22=512字節(jié),現(xiàn)在已經(jīng)成了業(yè)界不成文的規(guī)定,也沒有哪個(gè)硬盤廠商試圖去改變這種約定。也就是說即使計(jì)算機(jī)只需要硬盤上存儲(chǔ)的某個(gè)字節(jié),也須一次把這個(gè)字節(jié)所在的扇區(qū)中的全部512字節(jié)讀入內(nèi)存,再選擇所需的那個(gè)字節(jié)。扇區(qū)的編號(hào)是從1開始,而不是0,這一點(diǎn)需要注意。另外,硬盤在劃分扇區(qū)時(shí),和軟盤是有一定區(qū)別的。軟盤的一個(gè)磁道中,扇區(qū)號(hào)一般依次編排,如1號(hào),2號(hào),3號(hào)…以此類推。

間隔跳躍編排

在硬盤磁道中,扇區(qū)號(hào)是按照某個(gè)間隔跳躍著編排。比如,2號(hào)扇區(qū)并不是1號(hào)扇區(qū)后的按順序的第一個(gè)而是第八個(gè),3號(hào)扇區(qū)又是2號(hào)扇區(qū)后的按順序的第八個(gè),依此類推,這個(gè)“八”稱為交叉因子。這個(gè)交叉因子的來歷有必要詳述一下,我們知道,數(shù)據(jù)讀取經(jīng)常需要按順序讀取一系列相鄰的扇區(qū)(邏輯數(shù)據(jù)相鄰)。如對(duì)磁道扇區(qū)按物理順序進(jìn)行編號(hào),很有可能出現(xiàn)當(dāng)磁頭讀取完第一個(gè)扇區(qū)后,由于盤片轉(zhuǎn)速過快來不及讀取下一個(gè)扇區(qū),(要知道物理相鄰扇區(qū)位置距離是極小的),必須等待轉(zhuǎn)完一圈,這極大浪費(fèi)了時(shí)間。所以就用交叉來解決這個(gè)問題。

柱面
柱面其實(shí)是我們抽象出來的一個(gè)邏輯概念,前面說過,離盤心最遠(yuǎn)的磁道為0磁道,依此往里為1磁道,2磁道,3磁道….,不同面上相同磁道編號(hào)則組成了一個(gè)圓柱面,即所稱的柱面(Cylinder)。


將物理相鄰的若干個(gè)扇區(qū)稱為了一個(gè)簇。操作系統(tǒng)讀寫磁盤的基本單位是扇區(qū),而文件系統(tǒng)的基本單位是簇(Cluster)。在Windows下,隨便找個(gè)幾字節(jié)的文件,在其上面點(diǎn)擊鼠標(biāo)右鍵選擇屬性,看看實(shí)際大小與占用空間兩項(xiàng)內(nèi)容,如大小:15 字節(jié) (15 字節(jié)), 占用空間:4.00 KB (4,096 字節(jié))。這里的占用空間就是你機(jī)器分區(qū)的簇大小,因?yàn)樵傩〉奈募紩?huì)占用空間,邏輯基本單位是4K,所以都會(huì)占用4K。 簇一般有這幾類大小 4K,8K,16K,32K,64K等。簇越大存儲(chǔ)性能越好,但空間浪費(fèi)嚴(yán)重。簇越小性能相對(duì)越低,但空間利用率高。NTFS格式的文件系統(tǒng)簇的大小為4K。

4. 分區(qū)劃分

4.1 BIOS

BIOS(Basic Input/Output System)
每一臺(tái)普通的電腦都會(huì)有一個(gè)BIOS,用于加載電腦最基本的程式碼,擔(dān)負(fù)著初始化硬件,檢測(cè)硬件功能以及引導(dǎo)操作系統(tǒng)的任務(wù)。

0磁道0扇區(qū)

在傳統(tǒng)的系統(tǒng)上,當(dāng)我們啟動(dòng)計(jì)算的時(shí)候,默認(rèn)的最開始會(huì)讀取0磁道0扇區(qū)的數(shù)據(jù),其是以512bytes 為單位來進(jìn)行硬盤的分區(qū)劃分,它不屬于任何分區(qū),用來標(biāo)識(shí)我們創(chuàng)建的分區(qū)信息等。

格式

MBR(Master Boot Record): 指的是一個(gè)一段程序而非一個(gè)空間

  • 446bytes: boot loader 主引導(dǎo)記錄
  • 64bytes: 分區(qū)表
  • 16bytes: 標(biāo)識(shí)一個(gè)分區(qū)
  • 2bytes: 55AA用來標(biāo)識(shí)結(jié)尾
    實(shí)戰(zhàn)演示:
# 首先使用 fdisk -l 確定MBR位置,標(biāo)記 * 即為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

# 恢復(fù)MBR:
dd if=/root/mbr of=/dev/sda1 bs=512 count=1

# 恢復(fù)分區(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個(gè)主分區(qū)
  • 3主分區(qū)+1擴(kuò)展(N個(gè)邏輯分區(qū))

4.2 UEFI

UEFI(Unified Extensible Firmware Interface)

  • 即“統(tǒng)一的可擴(kuò)展固件接口”,是一種詳細(xì)描述全新類型接口的標(biāo)準(zhǔn),是適用于電腦的標(biāo)準(zhǔn)固件接口,旨在代替BIOS(基本輸入/輸出系統(tǒng))。
  • 這種接口用于操作系統(tǒng)自動(dòng)從預(yù)啟動(dòng)的操作環(huán)境,加載到一種操作系統(tǒng)上,從而達(dá)到開機(jī)程序化繁為簡(jiǎn)節(jié)省時(shí)間的目的。
  • UEFI拋去了傳統(tǒng)BIOS需要長(zhǎng)時(shí)間自檢的問題,讓硬件初始化以及引導(dǎo)系統(tǒng)變得簡(jiǎn)潔快速。

UEFI的優(yōu)點(diǎn)

  • 通過保護(hù)預(yù)啟動(dòng)或預(yù)引導(dǎo)進(jìn)程,抵御bootkit攻擊,從而提高安全性。
  • 縮短了啟動(dòng)時(shí)間和從休眠狀態(tài)恢復(fù)的時(shí)間。
  • 支持容量超過2.2 TB的驅(qū)動(dòng)器。
  • 支持64位的現(xiàn)代固件設(shè)備驅(qū)動(dòng)程序,系統(tǒng)在啟動(dòng)過程中可以使用它們來對(duì)超過172億GB的內(nèi)存進(jìn)行尋址。
  • UEFI硬件可與BIOS結(jié)合使用。

5. fdisk命令

fdisk:對(duì)于一塊硬盤來講,最多只能管理15分區(qū)

格式:fdisk -l [-u] [device...]

參數(shù)選項(xiàng):

  • -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
    列出指定設(shè)備的分區(qū)表信息并退出,如果沒有給出設(shè)備,那么使用那些在 /proc/partitions(如果存在)

實(shí)戰(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ū)表為空,暫時(shí)沒有分區(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
   # 刪除一個(gè)分區(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
   # 檢測(cè)分區(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

查看內(nèi)核是否已經(jīng)識(shí)別新的分區(qū)

cat /proc/partations

通知內(nèi)核重新讀取硬盤分區(qū)表

  • partx -a
# 如果指定設(shè)備則重讀特定設(shè)備,不指明則一次讀取,如果你有兩個(gè)設(shè)備則需要執(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中使用的命令,能夠重新的讀取設(shè)定的分區(qū)。

Linux磁盤管理
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 導(dǎo)讀目錄 硬盤的組成 硬盤的物理結(jié)構(gòu)主要針對(duì)的是機(jī)械硬盤及其內(nèi)部的結(jié)構(gòu)加以介紹,以下內(nèi)容可能不是硬盤內(nèi)部全部的部件...
    香吉矢閱讀 4,321評(píng)論 0 12
  • 1 概述 本文通過對(duì)講解了磁盤的基本概念,分區(qū),創(chuàng)建文件系統(tǒng),掛載,卸載等步驟進(jìn)行講解。使得用戶能夠創(chuàng)建基本的磁盤...
    ghbsunny閱讀 1,727評(píng)論 0 0
  • 目錄磁盤結(jié)構(gòu)磁盤分區(qū)磁盤分區(qū)管理文件系統(tǒng)管理掛載 一、磁盤結(jié)構(gòu) (一)設(shè)備文件 設(shè)備文件:linux系統(tǒng)下一切皆文...
    哈嘍別樣閱讀 1,202評(píng)論 0 0
  • 一、概要 1、操作系統(tǒng)的內(nèi)核。 2、操作系統(tǒng)的五大管理功能:進(jìn)程管理、存儲(chǔ)管理、...
    _Jason___閱讀 1,203評(píng)論 0 3
  • 2017年讀的第一本書,其實(shí)讀完之后才聯(lián)想起之前小時(shí)候看的電影,發(fā)現(xiàn)我以前可能真的沒能讀懂這本書,或者說這部電影。...
    Sayammy閱讀 785評(píng)論 0 1

友情鏈接更多精彩內(nèi)容