磁盤基礎
硬盤(Hard Disk Driver,簡稱HDD)是計算機常用的存儲設備之一。
文章目錄
磁盤的結構
硬盤的物理結構
盤片:硬盤有多個盤片,每個盤片2面
磁頭:每面一個磁頭
硬盤的數據結構
扇區:盤面被分成多個扇形區域,每個扇區存放512個字節的數據,硬盤的第一個扇區,叫做引導扇區
磁道:同一盤片不同半徑的同心圓(當磁盤旋轉時,磁頭若保持在一個位置上,則每個磁頭都會在磁盤表面劃出一個圓形軌跡,這些圓形軌跡就叫做磁道(Track))
柱面:不同盤片相同半徑構成的圓柱面(在有多個盤片構成的盤組中,由不同盤片的面,但處於同一半徑圓的多個磁道組成的一個圓柱面(Cylinder))
存儲容量
硬盤存儲容量=磁頭數 x 磁道(柱面)數 x 每道扇區數 x 每扇區字節數
可以用柱面/磁頭/扇區來確定唯一定位磁盤上每一個區域,用fdisk -l查看分區信息
[root@localhost ~]# fdisk -l
磁盤 /dev/sda:322.1 GB, 322122547200 字節,629145600 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
磁盤標籤類型:dos
磁盤標識符:0x000d477d
設備 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 6295551 2098176 82 Linux swap / Solaris
/dev/sda3 6295552 629145599 311425024 83 Linux
磁盤 /dev/sdb:322.1 GB, 322122547200 字節,629145600 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
硬盤的接口
- IDE、SATA、SCSI、SAS、光纖通道
硬盤按照數據接口不同,分爲以下幾種(接口速率不是實際硬盤數據傳輸的速度)
ATA(IDE(並口)):並口數據線連接主板與硬盤,抗干擾性太差,且排線佔用空間較大,不利於電腦內部散熱,逐漸被SATA所取代
SATA(串口):全稱是Serial ATA,抗干擾性強,支持熱插熱拔等功能,速度快,糾錯能力強。
SCSI:全稱是 Small Computer System Interface(小型機系統接口),SCSI硬盤廣爲工作站級個人電腦以及服務器所使用的,資料傳輸時CPU佔用率較低,轉速快,支持熱插熱拔等
SAS(Serial Attached SCSI):是新一代的SCSI技術,和SATA硬盤相同,都是採取序列式技術以獲得更高的傳輸速度,可達到6Gb/s
磁盤分區表示
MBR
MBR是主引導記錄(Master Boot Record),位於硬盤第一個物理扇區處(引導扇區)
MBR中包含硬盤的主引導程序和硬盤分區表。分區表有4個分區記錄區,每個分區記錄區佔16個字節
MBR最多四個分區,可創建邏輯分區
磁盤分區的表示
常見的硬盤可以劃分爲主分區、擴展分區和邏輯分區,通常情況下主分區只有四個,而擴展分區可以看成時一個特殊的主分區類型,在擴展分區中可以建立邏輯分區。主分區一般用來安裝操作系統,拓展分區多用來儲存文件數據。
Linux中將硬盤、分區等設備均表示爲文件
- 硬盤:對於IDE接口的硬盤設備,表示爲“hdX”形式的文件名。而對於SCSI接口的硬盤設備,則表示爲“sdX”形式的文件名。其中"X"可以爲a,b,c,d等字母序號。例如:將系統中的第一個IDE設備(硬盤)表示爲“hda”,將第二個SCSI設備表示爲“sdb”
- 分區:表示分區時,以硬盤設備的文件名作爲基礎,然後在後面添加該分區(主分區,擴展分區,邏輯分區)對應的數字序號即可。例如:第一個IDE硬盤中的第一個分區表示爲"hda1",第二個分區表示爲"hda2"。第二個SCSI硬盤中的第三個分區表示爲"sdb3",第五個分區表示爲"sdb5"
磁盤分區結構
- 硬盤中的主分區數目只有4個
- 因此主分區和擴展分區的序號也就限制在1-4
- 擴展分區再分爲邏輯分區
- 邏輯分區的序號將始終從5開始
文件系統類型
文件系統(File System)類型決定了向分區中存放,讀取文件數據的方式和效率,在對分區進行格式化的時候需要選擇所用的文件系統類型,在Windows操作系統中,經常使用的文件系統類型包括FAT32 , NTFS等格式,而在Linux系統中,最常使用的文件系統主要包括以下幾種格式
-
EXT4文件系統:第四代拓展文件系統
1.存放文件和目錄數據的分區
2.高性能的日誌型文件系統
3.Linux系統中默認使用的文件系統 -
SWAP:交換文件系統
1.爲Linux系統建立的交換分區
2.交換分區相當於虛擬內存,能夠在一定程度上緩解物理內存不足的問題
3.一般建議將交換分區的大小設置爲物理內存的1.5-2倍。 -
Linux支持的其它文件系統類型
1.FAT16 , FAT32 , NTFS
2.EXT4 M JFS … -
XFS:一種高性能的日誌文件系統
1.開啓了日誌功能,即使發生宕機也不怕數據遭到破壞,可以根據日誌記錄在短時間內進行數據恢復。
2.高性能的日誌文件系統,特別擅長處理大文件,可支持上百萬T字節的存儲空間
3.CentOS 7系統中默認使用XFS文件系統
管理磁盤及分區
在Linux服務器中,當現有硬盤的分區規劃不能滿足要求(例如,根分區的剩餘空間過少,無法繼續安裝新的系統程序)時,就需要對硬盤中的分區進行重新規劃和調整,有時候還需要添加新的硬盤設備來擴展存儲空間
實現上述操作需要用到fdisk磁盤及分區管理工具,fdisk是大多數Linux系統中自帶的基本工具之一。
分區對應的系統ID號中,83表示Linux中的EXT4分區,8e 表示LVM邏輯卷
檢測並確認新的硬盤
掛載號新的硬盤設備並啓動主機後,Linux系統會自動檢測並加載該硬盤,無須額外安裝驅動。
fdisk命令 列出當前系統中所有硬盤設備及其分區的信息
-
查看或管理磁盤分區
fdisk -l [磁盤設備]
fdisk [磁盤設備] -
交互模式中的常用指令
m、p、n、d、t、w、q
常用指令
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition ###常用 刪除分區
l list known partition types ###常用 查看分區對應的系統ID號
m print this menu ###常用 列出手冊
n add a new partition ###常用 添加分區/創建新分區
o create a new empty DOS partition table
p print the partition table ###常用 列出硬盤中的分區情況,信息顯示的格式與執行"fdisk -l"命令相同
q quit without saving changes ###常用 不保存退出
s create a new empty Sun disklabel
t change a partition’s system id ###常用 變更分區類型,轉換格式
u change display/entry units
v verify the partition table
w write table to disk and exit ###常用 保存退出
x extra functionality (experts only)[root@localhost ~]# fdisk -l 磁盤 /dev/sda:322.1 GB, 322122547200 字節,629145600 個扇區 Units = 扇區 of 1 * 512 = 512 bytes 扇區大小(邏輯/物理):512 字節 / 512 字節 I/O 大小(最小/最佳):512 字節 / 512 字節 磁盤標籤類型:dos 磁盤標識符:0x000d477d 設備 Boot Start End Blocks Id System /dev/sda1 * 2048 2099199 1048576 83 Linux /dev/sda2 2099200 6295551 2098176 82 Linux swap / Solaris /dev/sda3 6295552 629145599 311425024 83 Linux 磁盤 /dev/sdb:322.1 GB, 322122547200 字節,629145600 個扇區 Units = 扇區 of 1 * 512 = 512 bytes 扇區大小(邏輯/物理):512 字節 / 512 字節 I/O 大小(最小/最佳):512 字節 / 512 字節
例如
[root@localhost ~]# fdisk /dev/sdb //進入fidsk分區工具的交互操作界面
歡迎使用 fdisk (util-linux 2.23.2)。
更改將停留在內存中,直到您決定將更改寫入磁盤。
使用寫入命令前請三思。
Device does not contain a recognized partition table
使用磁盤標識符 0x98aa708b 創建新的 DOS 磁盤標籤。
命令(輸入 m 獲取幫助):
命令(輸入 m 獲取幫助):p
磁盤 /dev/sdb:322.1 GB, 322122547200 字節,629145600 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
磁盤標籤類型:dos
磁盤標識符:0x98aa708b
設備 Boot Start End Blocks Id System
1)創建兩個主分區。
首先建立第一個主分區(/dev/sdb1),容量指定爲20G
命令(輸入 m 獲取幫助):n //開始創建分區
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): //直接回車,接受默認p:創建主分區
Using default response p
分區號 (1-4,默認 1): //直接回車,接受默認值1,主分區的編號爲1'
起始 扇區 (2048-41943039,默認爲 2048): //直接回車,接受默認扇區大小2048'
將使用默認值 2048
Last 扇區, +扇區 or +size{K,M,G} (2048-629145599,默認爲 629145599):+20G
分區 1 已設置爲 Linux 類型,大小設爲 20 GiB
按照類似的操作步驟繼續創建第2個主分區(/dev/sdb2),容量也指定爲20GB,完成後可以輸入“p”指令查看分區情況
命令(輸入 m 獲取幫助):n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
分區號 (2-4,默認 2):2
起始 扇區 (41945088-629145599,默認爲 41945088):
將使用默認值 41945088
Last 扇區, +扇區 or +size{K,M,G} (41945088-629145599,默認爲 629145599):+20G
分區 2 已設置爲 Linux 類型,大小設爲 20 GiB
命令(輸入 m 獲取幫助):p
磁盤 /dev/sdb:322.1 GB, 322122547200 字節,629145600 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
磁盤標籤類型:dos
磁盤標識符:0x4fc461c7
設備 Boot Start End Blocks Id System
/dev/sdb1 2048 41945087 20971520 83 Linux
/dev/sdb2 41945088 83888127 20971520 83 Linux
2)創建一個拓展分區和兩個邏輯分區
接下來可以使用剩餘的硬盤空間創建擴展分區,然後在擴展分區中創建邏輯分區。需要注意的是,若主分區、邏輯分區均已創建完畢(四個主分區號已用完),這再次輸入“n”指令後將不再提示選擇分區類別。
首先建立擴展分區(/dev/sdb4),使用剩下的所有空間(全部空間分配完畢後,將無法再建立新的主分區)。
命令(輸入 m 獲取幫助):n
Partition type:
p primary (2 primary, 0 extended, 2 free)
e extended
Select (default p): e //選擇建立的爲擴展分區
分區號 (3,4,默認 3):4 //選擇4作爲擴展分區的編號
起始 扇區 (83888128-629145599,默認爲 83888128):
將使用默認值 83888128
Last 扇區, +扇區 or +size{K,M,G} (83888128-629145599,默認爲 629145599):
將使用默認值 629145599
分區 4 已設置爲 Extended 類型,大小設爲 260 GiB
接下來在擴展分區建立第1個邏輯分區(/dev/sdb5),容量指定爲2GB
命令(輸入 m 獲取幫助):n
Partition type:
p primary (2 primary, 1 extended, 1 free)
l logical (numbered from 5)
Select (default p): l //選擇創建的分區爲邏輯分區
添加邏輯分區 5
起始 扇區 (83890176-629145599,默認爲 83890176):
將使用默認值 83890176
Last 扇區, +扇區 or +size{K,M,G} (83890176-629145599,默認爲 629145599):+2G
分區 5 已設置爲 Linux 類型,大小設爲 2 GiB
按照類似的操作步驟繼續創建第2個邏輯分區(/dev/sdb6),容量指定爲10GB,完成後可以再次輸入“p”指令查看分區情況
命令(輸入 m 獲取幫助):n
Partition type:
p primary (2 primary, 1 extended, 1 free)
l logical (numbered from 5)
Select (default p): l
添加邏輯分區 6
起始 扇區 (88086528-629145599,默認爲 88086528):
將使用默認值 88086528
Last 扇區, +扇區 or +size{K,M,G} (88086528-629145599,默認爲 629145599):+10G
分區 6 已設置爲 Linux 類型,大小設爲 10 GiB
命令(輸入 m 獲取幫助):p
磁盤 /dev/sdb:322.1 GB, 322122547200 字節,629145600 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
磁盤標籤類型:dos
磁盤標識符:0x4fc461c7
設備 Boot Start End Blocks Id System
/dev/sdb1 2048 41945087 20971520 83 Linux
/dev/sdb2 41945088 83888127 20971520 83 Linux
/dev/sdb4 83888128 629145599 272628736 5 Extended
/dev/sdb5 83890176 88084479 2097152 83 Linux
/dev/sdb6 88086528 109058047 10485760 83 Linux
命令(輸入 m 獲取幫助):t //設置分區對應的ID號:82代表設置爲交換文件系統
已選擇分區 1
Hex 代碼(輸入 L 列出所有代碼):82
已將分區“Linux”的類型更改爲“Linux swap / Solaris”
命令(輸入 m 獲取幫助):p //查看分區情況
磁盤 /dev/sdb:21.5 GB, 21474836480 字節,41943040 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
磁盤標籤類型:dos
磁盤標識符:0x227f39cd
設備 Boot Start End Blocks Id System
/dev/sdb1 2048 41943039 20970496 82 Linux swap / Solaris
命令(輸入 m 獲取幫助):wq //保存退出
管理文件系統
在Linux系統中,使用fdisk工具在硬盤中建立分區之後,還需要對分區進行格式化並掛載到系統中的指定目錄,然後才能用於存儲文件、目錄等數據。
穿件文件系統
穿件文件系統的過程也即格式化分區的過程,在Linux系統中使用mkfs(Make filesystem,創建文件系統)命令工具可以格式化FXS、EXT4、FAT等不同類型的分區,爲使用mkswap命令可以格式化Swap交換分區
mkfs命令的使用
實際上mkfs命令是一個前端工具,可以自動加載不同的程序來創建各種雷西興的分區,而後端包括有多個與mkfs命令相關的程序,這些程序位於/sbin/目錄中,如支持EXT4分區格式的mkfs.ext4程序等
[root@localhost ~]# ls /sbin/mkfs*
/sbin/mkfs /sbin/mkfs.ext2 /sbin/mkfs.fat /sbin/mkfs.vfat
/sbin/mkfs.btrfs /sbin/mkfs.ext3 /sbin/mkfs.minix /sbin/mkfs.xfs
/sbin/mkfs.cramfs /sbin/mkfs.ext4 /sbin/mkfs.msdos
基本命令格式
mkfs -t 文件系統類型 分區設備
(1)創建EXT4文件系統
需要創建EXT4文件系統時,結合“-t ext4”選項指定類型,並指定要被格式化的分區設備即可。
把分區/dev/sdb1格式化爲EXT4文件系統
[root@localhost ~]# mkfs -t ext4 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
文件系統標籤=
OS type: Linux
塊大小=4096 (log=2)
分塊大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5242880 blocks
262144 blocks (5.00%) reserved for the super user
第一個數據塊=0
Maximum filesystem blocks=2153775104
160 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
Allocating group tables: 完成
正在寫入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
2)創建FAT32文件系統
一般來說,不建議在Linux系統中創建或使用Windows中的文件系統類型,包括FAT16、FAT32等,一些特殊情況,如Windows系統不可用、U盤系統被破壞除外。
若要在Linux系統中創建FAT32文件系統,可結合“-t vfat”選項指定類型,並添加“-F 32”選項指定FAT的版本。
centos7系統默認使用xfs文件系統
mkswap命令的使用
在Linux系統中,Swap分區的作用類似於Windows系統中的“虛擬內存”,可以在一定程度上緩解物理內存不足的情況。噹噹前Linux主機運行的服務較多,需要更多的交換空間支撐應用時,可以爲其增加新的交換分區。
使用mkswap命令工具可以在指定的分區上創建交換文件系統,目標分區應先通過fdisk工具將ID號設爲82。
將分區/dev/sdb5創建爲交換分區
[root@localhost ~]# fdisk -l /dev/sdb5
磁盤 /dev/sdb5:2147 MB, 2147483648 字節,4194304 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
[root@localhost ~]# mkswap /dev/sdb5
正在設置交換空間版本 1,大小 = 2097148 KiB
無標籤,UUID=35174256-b250-41c0-8257-d4c40bf7a647
對於新增加的交換分區,需要使用swapon命令進行啓用,反之使用swapoff命令可以停用指定的交換分區。
[root@localhost ~]# cat /proc/meminfo|grep "SwapTotal:" //查看總交換空間的大小
SwapTotal: 2098172 kB
[root@localhost ~]# swapon /dev/sdb5 //啓用交換分區 /dev/sdb5
[root@localhost ~]# cat /proc/meminfo|grep "SwapTotal:" //確認交換分區大小已增加
SwapTotal: 4195320 kB
[root@localhost ~]# swapoff /dev/sdb5 //停用交換分區 /dev/sdb5
掛載、卸載文件系統
在Linux系統中,對各種儲存設備中的資源訪問(如讀取、保存文件等)都是通過怒路結構進行的,雖然系統核心能夠通過“設備文件”的方式操縱各種設備,但是對於用戶來說,還需要增加一個“掛載”的過程,才能像正常訪問目錄一樣訪問儲存設備中的資源。
當然,在安裝Linux操作系統的過程中,自動建立或識別的分區通常會由系統自動完成掛載,如“/”分區、“/boot”分區等。然而對於後來新增加的硬盤分區、光盤等設備,有時候還需要管理員手動進行掛載,實際上用戶訪問的是經過格式化後建立的文件系統。掛載一個分區時,必須爲其指定一個目錄作爲掛靠點(或稱爲掛載點),用戶通過這個目錄訪問設備中的文件、目錄數據。
掛載文件系統
mount 命令的基本使用格式
mount [-t 文件系統類型] 存儲設備掛載點
其中文件系統類型可以省略(有系統自動識別),存儲設備即對應分區的設備文件名(如/dev/sdb1、/dev/cdrom)或網絡資源路徑,掛載點即用戶指定用於掛載的目錄。
將光盤設備掛載到 /opt目錄。
mount命令基本格式
mount 顯示當前系統中已掛載的各個分區(文件系統)的相關信息,最近掛載的文件信息將顯示在最後面
mount [-t 文件系統類型] 存儲設備 掛載點目錄
mount -o loop ISO鏡像文件 掛載點目錄
mount -a 將現在所有能掛載的都掛載
[root@localhost ~]# mount /dev/cdrom /opt
mount: /dev/sr0 寫保護,將以只讀方式掛載
不使用任何參數或選項的mount命令時,將顯示出當前系統中已掛載的各個分區(文件系統)相關信息,最近掛載的文件系統顯示在最後邊。
[root@localhost ~]# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=915784k,nr_inodes=228946,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel)
...... // 省略部分內容
掛載Linux分區或U盤設備時的用法也一樣,只需要指定正確的設備位置和掛載目錄即可。
卸載文件系統
需要卸載文件系統時,使用的命令爲umount,使用掛載點目錄或對用設備的文件名作爲卸載參數。Linux系統中,由於同一個設備可以被掛載到多個目錄下,所以一般建議通過掛載點的目錄位置來進行卸載。
使用命令的基本格式
umount 存儲設備位置
umount 掛載點目錄
[root@localhost ~]# umount /dev/cdrom //通過設備文件卸載光盤
設置文件系統的自動掛載
系統中的/etc/fstab 文件可以視爲 mount 命令的配置文件,其中存儲了文件系統的靜態掛載數據。Linux 操作系統在每次開機時,會自動讀取這個文件的內容,自動掛載所指定的文件系統。默認的 fstab 文件中包括了根分區、/boot 分區、交換分區掛載配置。
[root@localhost ~]# cat /etc/fstab
……//省略部分信息
/dev/mapper/cl-root / xfs defaults 0 0
UUID=a36c9228-cded-4f3a-96b5-0c03ce2feb61 /boot xfs defaults 0 0
在/etc/fstab 文件中,每一行記錄對應一個分區或設備的掛載配置信息,這些信息從左到右包括六個字段(使用空格或製表符分隔)
第 1 字段:設備名或設備卷標名。
第 2 字段:文件系統的掛載點目錄的位置。
第 3 字段:文件系統類型,如 XFS、Swap 等。
第 4 字段:掛載參數,即mount 命令“-o”選項後可使用的參數。例如,defaults、rw、ro、noexec 分別表示默認參數、可寫、只讀、禁用執行程序。
第 5 字段:表示文件系統是否需要 dump 備份(dump 是一個備份工具)。一般設爲 1 時表示需要,設爲 0 時將被 dump 忽略。
第 6 字段:該數字決定在系統啓動時進行磁盤檢查的順序。0 表示不進行檢查,1 表示優先檢查,2 表示其次檢查。根分區應設爲 1,其他分區設爲 2。
通過在/etc/fstab 文件中添加相應的掛載配置,可以實現開機後自動掛載指定的分區。
使用 mount、umount 進行掛載、卸載操作時,若在/etc/fstab 文件中已設置有對應的掛載記錄,則只需指定掛載點目錄或設備文件名中的一個作爲參數。例如,直接執行“mount
/dev/sdb1”或“mount /mailbox”命令,都可以將分區/dev/sdb1 掛載到/mailbox 目錄下。
查看磁盤使用情況
df 命令使用文件或者設備作爲命令參數,較常用的選項爲“-h”和“-T”。其中,“-h”選項可以顯示更易讀的容量單位,而“-T”選項用於顯示對應文件系統的類型。
[root@localhost ~]# df -hT