Linux--磁盤與文件管理——原理與實操雙結合(磁盤的原理,新硬盤的管理,文件系統的創建及掛載、卸載文件系統)
前言
-
磁盤(disk)是指利用磁記錄技術存儲數據的存儲器。磁盤是計算機主要的存儲介質,可以存儲大量的二進制數據,並且斷電後也能保持數據不丟失。早期計算機使用的磁盤是軟磁盤(soft disk,簡稱軟盤),如今常用的磁盤是硬磁盤(hard disk,簡稱硬盤)。
-
文件系統是操作系統用於明確存儲設備(常見的是磁盤,也有基於NAND Flash的固態硬盤)或分區上的文件的方法和數據結構;即在存儲設備上組織文件的方法。
一:磁盤基礎
硬盤(Hard Disk Driver,簡稱HDD)是計算機常用的存儲設備之一。
1.1:磁盤結構
1.1.1:硬盤的物理結構
- 盤片:硬盤有多個盤片,每個盤片2面
- 磁頭:每面一個磁頭
1.1.2:硬盤的數據結構
-
扇區:盤面被分成多個扇形區域,每個扇區存放512個字節的數據
-
PS:硬盤的第一個扇區,叫做引導扇區
-
磁道:同一盤片不同半徑的同心圓(當磁盤旋轉時,磁頭若保持在一個位置上,則每個磁頭都會在磁盤表面劃出一個圓形軌跡,這些圓形軌跡就叫做磁道(Track))
-
柱面:不同盤片相同半徑構成的圓柱面(在有多個盤片構成的盤組中,由不同盤片的面,但處於同一半徑圓的多個磁道組成的一個圓柱面(Cylinder))
-
PS:固態硬盤:電子芯片存儲,速度快,但是數據丟失無法恢復
-
機械硬盤:磁道存儲,速度一般,數據丟失有機率恢復
1.1.3:存儲容量
- 硬盤存儲容量=磁頭數 x 磁道(柱面)數 x 每道扇區數 x 每扇區字節數
- 可以用柱面/磁頭/扇區來確定唯一定位磁盤上每一個區域
- 用fdisk -l查看分區信息
[root@localhost ~]# fdisk -l
下面是詳細信息
磁盤 /dev/sda:42.9 GB, 42949672960 字節,83886080 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
磁盤標籤類型:dos
磁盤標識符:0x000a58c6
設備 Boot Start End Blocks Id System
/dev/sda1 * 2048 12584959 6291456 83 Linux ' //這是引導分區'
/dev/sda2 12584960 54527999 20971520 83 Linux
/dev/sda3 54528000 62916607 4194304 82 Linux swap / Solaris
/dev/sda4 62916608 83886079 10484736 5 Extended
/dev/sda5 62918656 83886079 10483712 83 Linux
1.1.4:硬盤的接口
硬盤按照數據接口不同,分爲以下幾種(接口速率不是實際硬盤數據傳輸的速度)
-
ATA(IDE(並口)):現在已經很少見到,逐漸被SATA所取代
-
SATA(串口):全稱是Serial ATA,抗干擾性強,支持熱插熱拔等功能,速度快,糾錯能力強。
-
SCSI:全稱是 Small Computer System Interface(小型機系統接口),SCSI硬盤廣爲工作站級個人電腦以及服務器所使用的,資料傳輸時CPU佔用率較低,轉速快,支持熱插熱拔等
-
SAS(Serial Attached SCSI):是新一代的SCSI技術,和SATA硬盤相同,都是採取序列式技術以獲得更高的傳輸速度,可達到6Gb/s
1.2:MBR與磁盤分區表示
1.2.1:MBR
- MBR是主引導記錄(Master Boot Record),位於硬盤第一個物理扇區處(引導扇區)
- MBR中包含硬盤的主引導程序和硬盤分區表。分區表有4個分區記錄區,每個分區記錄區佔16個字節
- MBR最多四個分區,可創建邏輯分區
1.2.2:磁盤分區的表示
常見的硬盤可以劃分爲主分區,擴展分區和邏輯分區,通常情況下主分區只有四個,而擴展分區可以看成是一個特殊的主分區類型,在擴展分區中可以建立邏輯分區。
主分區一般用來安裝操作系統,擴展分區則多用來存儲文件數據(不能直接存儲數據,存儲在邏輯分區上)。
- Linux中將硬盤,分區等設備均表示爲文件
- 硬盤:對於IDE接口的硬盤設備,表示爲“hdX”形式的文件名。而對於SCSI接口的硬盤設備,則表示爲“sdX”形式的文件名。其中"X"可以爲a,b,c,d等字母序號。例如:將系統中的第一個IDE設備(硬盤)表示爲“hda”,將第二個SCSI設備表示爲“sdb”
- 分區:表示分區時,以硬盤設備的文件名作爲基礎,然後在後面添加該分區(主分區,擴展分區,邏輯分區)對應的數字序號即可。例如:第一個IDE硬盤中的第一個分區表示爲"hda1",第二個分區表示爲"hda2"。第二個SCSI硬盤中的第三個分區表示爲"sdb3",第五個分區表示爲"sdb5"
- PS:硬盤中的主分區數目只有4個
- 因此主分區和擴展分區的序號也就限制在1-4
- 擴展分區再分爲邏輯分區
- 邏輯分區的序號將始終從5開始
1.2.3:Linux系統中使用的文件系統類型
文件系統(File System)類型決定了向分區中存放,讀取文件數據的方式和效率,在對分區進行格式化的時候需要選擇所用的文件系統類型
在Windows操作系統中,經常使用的文件系統類型包括FAT32 , NTFS等格式
Linux系統中,主要使用以下幾種格式
- EXT4文件系統:
1.存放文件和目錄數據的分區
2.高性能的日誌型文件系統
3.CentOS 6系統中默認使用的文件系統
- 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邏輯卷,82表示SWAP交換分區
2.1:fdisk 命令–查看或管理磁盤分區
在硬盤設備中創建,刪除,更改分區等操作同樣通過fdisk命令進行,主要使用硬盤的設備文件作爲參數。
fdisk -l [磁盤設備]
或
fdisk [磁盤設備]
查看時,帶有“*”標識的是引導分區
fdisk /dev/sdb 進入交互式的分區管理界面
常用指令
p 列出硬盤中的分區情況,信息顯示的格式與執行"fdisk -l"命令相同
n 創建新分區
d 刪除分區
t 變更分區類型,轉換格式
w 保持配置
q 退出
l 查看分區對應的系統ID號
命令舉例
[root@localhost ~]# fdisk /dev/sda1
歡迎使用 fdisk (util-linux 2.23.2)。
更改將停留在內存中,直到您決定將更改寫入磁盤。
使用寫入命令前請三思。
Device does not contain a recognized partition table
使用磁盤標識符 0x3556a5c2 創建新的 DOS 磁盤標籤。
命令(輸入 m 獲取幫助):m
命令操作
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
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)
這麼多指令,我們就可以輸入指令實現自己的要求。
2.2:使用“n”命令
- 使用“n”命令可以進行創建分區的操作,包括主分區和擴展分區。
根據提示輸入“p”選擇創建主分區。
輸入“e”選擇創建擴展分區。
之後依次選擇分區序號,起始位置,結束爲止或分區大小即可完成新分區的創建。
- 選擇分區號時,主分區和擴展分區的序號只能爲1-4,分區起始位置一般有fdisk默認識別即可,結束位置或大小可以使用’’+sizeM‘或“+sizeG”的形式。如“+20G”表示將該分區的容量設置爲20GB。
例如:創建分區/dev/sdb1
[root@hostname ~]# fdisk /dev/sdb '//先用fdisk命令工具進入交互式的分區管理界面'
歡迎使用 fdisk (util-linux 2.23.2)。
更改將停留在內存中,直到您決定將更改寫入磁盤。
使用寫入命令前請三思。
Device does not contain a recognized partition table
使用磁盤標識符 0x227f39cd 創建新的 DOS 磁盤標籤。
命令(輸入 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-41943039,默認爲 41943039): '//直接回車,將所有空間分配給創建的分區'
將使用默認值 41943039
分區 1 已設置爲 Linux 類型,大小設爲 20 GiB
命令(輸入 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系統中使用mkfs(Make Filesystem,創建文件系統)命令格式可以格式化XFS , EXT4 ,FAT等不同類型的分區,而使用mkswap命令可以格式化Swap交換分區。
3.1:mkfs命令
[root@hostname ~]# 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命令:Make Filesystem,創建文件系統(格式化)
mkfs命令使用格式
mkfs -t 文件系統類型 分區設備
- CentOS7默認xfs文件系統類型,所以我們現在常用這條命令
-[root@localhost ~]# mkfs.xfs /dev/卷組名/邏輯卷名
創建EXT4文件系統時,結合"-t ext4"選項指定類型,並指定要被格式化的分區設備即可
例如:將分區 /dev/sdb2 格式化爲EXT4文件系統
[root@hostname ~]# mkfs -t ext4 /dev/sda2
創建FAT32文件系統
一般來說,不建議在Linux系統中創建或使用Windows中的文件系統類型,包括FAT16 , FAT32等,一些特殊情況,如Windows系統不可用,U盤系統被餅圖破壞等除外。
若要在Linux系統中創建FAT32文件系統,可結合’-t vfat’選項指定類型,並添加’-F 32’選項指定FAT的版本。
例如,將分區 /dev/sdb6 格式化爲FAT32文件系統(先通過fdisk工具添加/dev/sdb6分區,並且將ID號設爲6)
[root@hostname ~]# mkfs -t vfat -F 32 /dev/sdb6
或者
[root@hostname ~]# mkfs.vfat -F 32 /dev/sdb6
兩個命令是一個意思
3.2:mkswap命令
在Linux系統中,Swap分區的作用類似於Windows系統中的“虛擬內存”,可以在一定程度上緩解物理內存不足的情況。在當前Linux主機運行的服務較多,需要更多的交換空間支撐應用時,可以爲其增加新的交換分區。
使用mkswap命令工具可以在指定的分區上創建交換文件系統,目標分區應先通過fdisk工具將ID號設爲82。
- make swap:創建交換文件系統
命令使用的格式
mkswap 分區設備
cat /proc/meminfo | grep "SwapTotal" ' //查看總交換空間大小'
swapon /dev/sdb1 '//開啓交換分區/dev/sdb1'
swapoff /dev/sdb1 ' //關閉交換分區/dev/sdb1'
例如:將分區/dev/sdb1創建爲交換分區(先用fdisk命令工具將ID號設爲82)
[root@hostname ~]# fdisk /dev/sdb '//先用fdisk命令工具進入交互式的分區管理界面'
歡迎使用 fdisk (util-linux 2.23.2)。
更改將停留在內存中,直到您決定將更改寫入磁盤。
使用寫入命令前請三思。
Device does not contain a recognized partition table
使用磁盤標識符 0x227f39cd 創建新的 DOS 磁盤標籤。
命令(輸入 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-41943039,默認爲 41943039): '//直接回車,將所有空間分配給創建的分區'
將使用默認值 41943039
分區 1 已設置爲 Linux 類型,大小設爲 20 GiB
命令(輸入 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 獲取幫助):w '//保存退出'
[root@hostname ~]# mkswap /dev/sdb1 '//將分區/dev/sdb1創建爲交換分區'
正在設置交換空間版本 1,大小 = 20970492 KiB
無標籤,UUID=5736a379-3e6c-4e12-9a5c-78cb6a586cf7
[root@hostname ~]# cat /proc/meminfo | grep "SwapTotal" '//查看總交換空間的大小'
SwapTotal: 4194300 kB '//原本是4G多'
[root@hostname ~]# swapon /dev/sdb1 '//開啓交換分區/dev/sdb1'
[root@hostname ~]# cat /proc/meminfo | grep "SwapTotal" '//再次查看總交換空間的大小'
SwapTotal: 25164792 kB '//現在變成了25G'
[root@hostname ~]# swapoff /dev/sdb1 '//關閉交換分區 /dev/sdb1'
[root@hostname ~]# cat /proc/meminfo | grep "SwapTotal" '//再次查看總交換空間大小'
SwapTotal: 4194300 kB '//交換空間變成了原來的4G多'
四:掛載,卸載文件系統
在Linux系統中,對各種存儲設備中的資源訪問(如讀取,保存文件等)都是通過目錄結構進行的,雖然系統核心能夠通過“設備文件”的方式操縱各種設備,但是對於用戶來說,還需要增加一個“掛載”的過程,才能像正常訪問目錄一樣訪問存儲設備中的資源。
當然,在安裝Linux操作系統的過程中,自動建立或識別的分區通常會由系統自動完成掛載,如“/”分區,“boot”分區等。然而對於後來新增加的硬盤分區,光盤等設備,有時候還需要管理員手動進行掛載,實際上用戶訪問的是經過格式化後建立的文件系統。掛載一個分區時,必須爲其制定一個目錄作爲掛靠點(或稱爲掛載點),用戶通過這個目錄訪問設備中 的文件,目錄數據。
4.1:mount命令–掛載文件系統
- 掛載文件系統個,ISO鏡像到指定文件夾
mount命令基本格式
mount 顯示當前系統中已掛載的各個分區(文件系統)的相關信息,最近掛載的文件信息將顯示在最後面
mount [-t 文件系統類型] 存儲設備 掛載點目錄
mount -o loop ISO鏡像文件 掛載點目錄
mount -a 將現在所有能掛載的都掛載
-
文件系統類型通常可以省略,系統會自動識別
-
存儲設備即對應分區的設備文件名(如/dev/sdb1 , /dev/cdrom)或網絡資源路徑
-
掛載點即用戶指定用於掛載的目錄
-
光盤對應的設備文件通常使用’/dev/cdrom’,其實這是一個連接文件,連接到實際的光盤設備’/dev/sr0’。這兩個名稱都表示光盤設備。由於光盤是隻讀的存儲介質,因此在掛載時系統會出現’mounting read-only’的提示信息。
例如,將光盤設備掛載到/media/cdrom目錄
[root@hostname ~]#mount /dev/cdrom /media/cdrom
- 掛載Linux分區或U盤設備時的用法也一樣,只需要指定正確的設備位置和掛載目錄即可。
例如:將/dev/sdb1分區掛載到新建的/ccc目錄下
[root@hostname ~]#mkdir /ccc
[root@hostname ~]#mount /dev/sdb1 /ccc
- 在Linux系統中,U盤設備被模擬成SCSI設備,因此與掛載普通的SCSI硬盤中的分區並沒有明顯的區別。U盤一般使用FAT16或FAT32的文件系統,若不確定U盤設備文件的位置,可以先執行‘fdisk -l’命令進行查看,確認。
例如:將位於/dev/sdc1的U盤設備掛載到新建的/ccc/usbdisk目錄下
[root@hostname ~]#mkdir /ccc/usbdisk
[root@hostname ~]#mount /dev/sdc1 /ccc/usbdisk
- proc,sysfs,tmpfs等文件系統是Linux運行所需要的的臨時文件系統,並沒有實際的硬盤分區與其相對應,因此也成爲了’僞文件系統’。
例如:proc文件系統實際上映射了內存及CPU寄存器中的部分數據
- 在實際工作中,可能會經常從互聯網中下載一些軟件或應用系統的ISO鏡像文件,在無法刻錄光盤的情況下,需要將其解壓後才能瀏覽,使用其中的文件數據。若使用mount掛載命令,則無需解開文件包即可瀏覽,使用ISO鏡像文件中的數據。
ISO鏡像文件通常被視爲一種特殊的“迴環”文件系統,因此在掛載時需要添加“-o loop”選項
例如:將下載的CentOS系統的DVD光盤鏡像文件“CentOS-7-x86_64-DVD-1611.iso”掛載到/media/mnt目錄下。
[root@hostname ~]#mount -o loop CentOS-7-x86_64-DVD-1611.iso /media/mnt
4.2:umount命令–卸載文件系統
卸載文件系統時,使用掛在單目錄或對應設備的文件名作爲卸載參數。
Linux系統中,由於同一個設備可以被掛載到多個目錄下,所以一般建議通過掛載點的目錄位置來進行卸載。
- umount命令–卸載已掛載的文件系統
使用命令的基本格式
umount 存儲設備位置
umount 掛載點目錄
例如:通過umount命令卸載之前掛載的Linux分區,光盤設備
[root@hostname ~]#umount /ccc '//通過掛載點目錄卸載對應的分區'
[root@hostname ~]#umount /dev/cdrom '//通過設備文件卸載光盤'
4.3:設置文件系統的自動掛載
-
系統中的/etc/fstab文件可以視爲mount命令的配置文件,其中存儲了文件系統的靜態掛載數據,Linux系統在每次開機時,會自動讀取這個文件的內容,自動掛載所指定的文件系統。
-
默認的fstab文件中包括了根分區,/boot分區,交換分區及proc,tmpfs等僞文件系統的掛載配置。
- 在/etc/fstab文件中,每一行記錄對應一個分區或設備的掛載配置信息,從左到右包括六個字段,含義如下
字段 | 解釋 |
---|---|
第一字段 | 分區/設備名/設備卷標名 |
第二字段 | 掛載點,文件系統的掛載點目錄的位置 |
第三字段 | 文件系統類型,如xfs,Swap等 |
第四字段 | 掛載參數(包括權限和功能),即mount命令“-o”選項後可使用的參數。例如:default,rw,ro,noexec分別表示默認參數,可寫,只讀,禁用執行程序。 |
第五字段 | 表示文件系統是否需要dump備份(dump是一個備份工具),設爲1時表示需要,設爲0時將被dump忽略 |
第六字段 | 該字段用於決定系統啓動時進行磁盤檢查的順序。0:不進行檢查。1:優先檢查。2:其次檢查、對於根分區應設爲1,其他分區設爲2. |
- 通過在“/etc/fstab”文件中添加相應的掛載配置,可以實現開機後自動掛載指定的分區。
例如,添加自動掛載分區/dev/sdb1的配置
[root@hostname ~]# vi /etc/fstab
...//省略部分內容
/dev/sdb1 /ccc xfs default 0 0
4.4:df命令–查看磁盤使用情況
-
不帶選項和參數的mount命令可以顯示分區的掛載情況,若要了解系統中已經掛載各文件系統的磁盤使用情況(如剩餘磁盤空間等),可以使用df命令。
-
df命令使用文件或者設備作爲命令參數,較常用的選項爲“-h”"-T"。其中,“-h”選項可以顯示更容易讀的容量單位,而“-T”選項用於顯示對應文件系統的類型。
例如:執行“df -hT”命令可以查看當前系統中掛載的各文件系統的磁盤使用情況
[root@hostname ~]# df -hT
文件系統 類型 容量 已用 可用 已用% 掛載點
/dev/sda2 xfs 20G 3.3G 17G 17% /
devtmpfs devtmpfs 898M 0 898M 0% /dev
tmpfs tmpfs 912M 0 912M 0% /dev/shm
tmpfs tmpfs 912M 9.0M 903M 1% /run
tmpfs tmpfs 912M 0 912M 0% /sys/fs/cgroup
/dev/sda5 xfs 10G 37M 10G 1% /home
/dev/sda1 xfs 6.0G 174M 5.9G 3% /boot
tmpfs tmpfs 183M 12K 183M 1% /run/user/42
tmpfs tmpfs 183M 0 183M 0% /run/user/0