linux系統如何識別硬盤
硬盤類型:
按接口可劃分為
并行
IDE
SCSI
串行
SATA
SAS
USB
對于linux來說,一切皆文件,磁盤也被當作文件。磁盤文件都存放于/dev/目錄下。
設備文件的作用:關聯至一個設備驅動程序,進而能夠跟與之對應的設備進行通信。設備文件是設備的訪問入口。
設備文件的文件名由ICANN(互聯網名稱地址分配機構)組織來定義
對IDE類型磁盤來說:使用/dev/hd[a-z]來標識
對SCSI、SATA、SAS、USB類型的磁盤來說:使用/dev/sd[a-z]來標識
每個設備都有一個設備號與之對應,設備號包括:
主設備號:major。用于區分不同的設備類型
次設備號:minor。用于標識同類型設備下的不同設備,是特定設備的訪問入口。
從上圖中可以看到,sdc的設備類型是sd,sdc1是sdc設備下的一個分區。
一、硬盤分區管理
硬盤買回來,插入服務器之后,要使用它,先得進行分區
那么,如何對硬盤進行分區呢?
先來了解下硬盤的分區方式:
分為MBR 和GPT兩種方式。
1 MBR介紹:
MBR位于硬盤的0磁道0扇區,共512bytes。
512bytes中,
前446bytes表示:boot loader,起引導啟動操作系統的程序。
之后的64bytes表示分區表,每16bytes標識一個分區,所以采用MBR分區的磁盤理論上只能劃分為4個分區。
最后的2bytes表示硬盤有效標志,若其被破壞,也不能正確地識別硬盤分區信息。
為了能夠充分利用磁盤,在使用mbr對磁盤分區時,一般都采用劃分3個主分區+1個擴展分區(在擴展分區上,能進一步劃分多個分區)的方式。如下圖:
1.1 MBR分區的管理命令:fdisk
fdisk也可以管理gpt分區的磁盤,但其表現不夠專業,gpt分區的管理工具為gdisk。在下文中會有介紹。
fdisk命令介紹:
fdisk -l [device] :查看
fdisk device:管理
常用命令:
n:創建分區
d:刪除分區
t:修改分區類型
l:列出已知的分區類型
w:保存退出
q:不保存退出
m:查看幫助
注意:在已經分區并且已經掛載其中某個分區的磁盤設備上創建的新分區,內核可能無法在創建完成后無法直接識別;
查看分區信息:
1) cat /proc/partitons:只能查看內核已識別的分區信息
2) lsblk:也只能查看內核已識別的分區信息
lsblk –f:可以查看設備的文件系統及掛載點等信息
3) fdisk -l [device]:查看系統上實時的設備分區信息
通知內核強制讀取磁盤分區表:
CentOS5:partprobe device
CentOS6:partx –a device
CentOS7:kpartx -af device
partx命令介紹:
新增分區:partx –a device
刪除分區:partx –d–nr N|N-M device
N:為刪除的分區的分區號
N-M:標識連續的多個分區
例1:在/dev/sdb磁盤上新建三個分區:大小分別為1G、5G、10G,創建完成后,通知內核讀取最新的分區信息。
fdisk /dev/sdb
創建完成之后,執行partx –a /dev/sdb
通知內核讀取分區表
使用lsblk命令可以查看到系統上磁盤的分區情況。
2 GPT分區:GUID(Globals Unique Identifies) Partition Table
GPT磁盤分區樣式支持最大卷為18 EB(Exabytes),磁盤的分區數為128
2.1管理GPT分區:
往虛擬機新增一塊20G大小的磁盤,將其分區格式指定為GPT,
parted /dev/sdc mklabel gpt
注:parted命令是實時操作的命令,即操作之后立即希爾內核,對于刪除操作來說是非常危險的,建議使用fdisk或gdisk來刪除
之后使用gdisk對磁盤進行分區管理;在CentOS6上,要使用需要先安裝gdisk軟件。
yum install -y gdisk
安裝完成之后,使用
gdisk /dev/sdc
?:獲取幫助信息
c:修改分區名
d:刪除分區信息
l:查看分區類型
n:新增分區
q:不保存退出
t:修改分區類型
w:保存退出
新建一個10G大小的分區。
查看分區信息:
3 MBR和GPT的區別
MBR(Master Boot Record)主引導記錄,是傳統的分區機制,應用于絕大多數使用BIOS的PC設備
1、MBR支持32位和64位系統
2、MBR支持分區數量有限
3、MBR只支持不超過2T的硬盤,超過2T的硬盤將只能用2T空間(有第三方解決方法)
GPT(GUID Partition Table)全局唯一標識分區表,是一個較新的分區機制,解決了MBR很多缺點
1、支持超過2T的磁盤(64位尋址空間)。fdisk最大只能建立2TB大小的分區,創建一個大于2TB的分區可以使用parted和gdisk
2、向后兼容MBR
3、必須在支持uEFI的硬件上才能使用(Intel提出,用于取代BIOS)
4、必須使用64位系統
5、Mac、Linux系統都能支持GPT分區格式
6、Windows 7/8 64bit、Windows Server 2008 64bit支持GPT
二、在硬盤上創建文件系統
linux上文件系統介紹:
文件系統是操作系統用于明確存儲設備或分區上的文件的方法和數據結構;即在存儲設備上組織文件的方法。操作系統中負責管理和存儲文件信息的軟件結構稱為文件管理系統,簡稱文件系統。
從系統角度來看,文件系統是對文件存儲設備的空間進行組織和分配,負責文件存儲并對存入的文件進行保護和檢索的系統。具體地說,它負責為用戶建立文件,存入、讀出、修改、轉儲文件,控制文件的存取,安全控制,日志,壓縮,加密等
linux文件系統類型:
無日志功能:ext2
有日志功能:
ext3
ext4
xfs
btrfs
swap
日志功能介紹:用戶對文件進行寫操作時,修改的數據并不是立即寫入硬盤中,而是先緩存在內存中,過一段時間之后,在講數據寫入到硬盤中。在寫入硬盤的過程的,若發生斷電等故障,則會導致文件被損壞,數據不能正常使用。為了應對這種情況,日志型文件系統將數據寫入硬盤之前,會先將數據寫入到日志之中,之后再同步到硬盤上,在這個過程中,如果系統發生斷電等異常情況,寫入過程被迫終止,在下一次系統啟動的過程中,系統會比對日志中的文件,將未寫入的數據恢復到文件中,從而實現文件修復,有效地保證了數據的完整性和安全性。
光盤:iso9660
網絡文件系統:NFS、CIFS
集群文件系統:GFS2,OCFS2
分布式文件系統:ceph,mosefs,mogilefs,glusterfs,lustre
可以看到,linux自身有多個文件系統,也支持其他的多種文件系統,為了方便對個文件系統的管理,方便系統管理員和程序開發者更高效地完成工作,linux提供了一個虛擬的文件系統,叫做Virtual Fils System,簡稱為VFS。
在VFS的基礎上,我們可以完成文件系統的創建,修改等管理操作。
2.1 如何創建文件系統。
1) mkfs 命令
用法:mkfs.Fs_Type device
Fs_Type有:ext2,ext3,ext4,xfs
mkfs.Fs_Type = mkfs –t Fs_Type
mkfs的常用選項
-L ‘Label_Name’:指定卷標名。
在CentOS6系列系統上要使用xfs文件系統,需要安裝xfsprogs軟件
yum install -y xfsprogs
之后才可正常使用。
例2:將例1中的sdb1格式化成ext3、sdb2格式化成ext4、sdb3格式化成xfs。
通過lsblk –f /dev/sdb可以查看到sdb硬盤上三個分區都已經創建了不同的文件類型。
ext系列文件系統專用的創建工具:mke2fs
mke2fs命令介紹:
mke2fs [options] device
常用option:
-t{ext2,3,4}:指明創建的文件系統類型
mkfs.ext4 = mkfs -t ext4 =mke2fs -t ext4
-b {1024,2048,4096}:指定塊大小,默認4096.若要創建的文件系統用于存放較小的文件,建議使用較小的塊大小
注意:塊大小創建后不能修改
-L Label:指定卷標
例:mke2fs -t ext4 -b 1024 -L zmingbo /dev/sdb3
-j:創建有日志功能的文件系統,用于ext2文件系統
-i #:指定多少個bytes準備一個inode;此大小不應該小于block 的大小
-N #:指定給此文件系統創建的inode數;
-I #: 一個inode 記錄大小(128—4096)
-O [^]Feature:以指定的特性創建目標文件系統
加上[^]表示關閉特性,反之則表示啟用特性
-m #:指定為管理員預留的管理空間百分比;默認為5%,當分區較大時,此比例會造成磁盤空間浪費
例:在sdb硬盤上新建一個擴展分區,在此基礎上創建兩個分區,大小分別為1G、2G。
在創建擴展分區選擇起始柱面和結束柱面時,直接enter鍵選擇默認值,就會把剩余的空間都分配給該分區。
硬盤分區之后,在sdb5創建為ext2類型,塊大小為1024,每1024bytes指定一個inode,指定卷標為“HardStudy“,管理員預留百分比為1,指定創建日志功能
ext2是沒有日志功能的,當我們指定sdb5支持日志功能時,通過blkid /dev/sdb5可以查看到該分區的文件類型為ext3。
三、文件系統的查看和管理
磁盤分區了,在分區上也創建文件系統了,那么創建完成的文件系統如何進行查看和修改呢
對于ext系列的文件系統來說,同樣有專門的工具用于查看和設定:
e2label: 用于ext系列文件系統的卷標的查看與設定
查看:e2label device
設定:e2label device Label_name
dumpe2fs:顯示ext系列文件系統的屬性信息
dumpe2fs [-h] device
tune2fs:查看或修改ext系列文件系統的某些屬性
tune2fs [option] device
-l:查看超級塊信息
修改指定文件系統的特性
-j:將ext2文件系統升級為ext3
-L Label:設定或修改卷標
-m #:調整預留空間百分比
-O [^]Feature:調整文件系統特性,啟用或關閉
-o [^]mount_options:開啟或關閉某種默認掛載選項,使用逗號隔開多個選項
acl
^acl
[root@localhost /mnt/mount]# tune2fs -l /dev/sdb5 tune2fs 1.41.12 (17-May-2010) Filesystem volume name: HardStudy #卷標名 Last mounted on: <not available>#最近的掛載點,因為該設備才格式化,所以無信息 Filesystem UUID: 8f21a52c-0c9f-4657-b105-e74610d8737d#設備的UUID Filesystem magic number: 0xEF53 Filesystem revision #: 1 (dynamic) Filesystem features: has_journal ext_attr resize_inode dir_index filetype sparse_super #文件系統支持的特性,創建時刻指定,創建后也可修改 Filesystem flags: signed_directory_hash Default mount options: (none) #默認掛載點 Filesystem state: clean#文件系統狀態。若為not clean狀態,需要修復 Errors behavior: Continue Filesystem OS type: Linux Inode count: 1059760 #inode數量。 Block count: 1060256 #塊數量 Reserved block count: 10602 #管理員預留硬盤空間 Free blocks: 759262 #剩余塊數量 Free inodes: 1059749 #剩余inode數量 First block: 1 #起始塊 Block size: 1024 #結束塊 Fragment size: 1024 #塊大小。 Reserved GDT blocks: 256 Blocks per group: 8192 Fragments per group: 8192 Inodes per group: 8152 Inode blocks per group: 2038 Filesystem created: Fri Aug 26 10:35:05 2016#文件系統創建時間 Last mount time: n/a #最近一次掛載時間 Last write time: Fri Aug 26 10:35:10 2016 #最近一次寫時間 Mount count: 0 #設備被掛載的次數,共計 Maximum mount count: 28 #最大掛載數,當達到此數時,會自動觸發設備檢查的操作 Last checked: Fri Aug 26 10:35:05 2016#上一次檢查時間 Check interval: 15552000 (6 months) #檢查周期,每6個月 Next check after: Wed Feb 22 10:35:05 2017#下一次檢查時間 Reserved blocks uid: 0 (user root) Reserved blocks gid: 0 (group root) First inode: 11 Inode size: 256 #inode大小,可指定 Required extra isize: 28 Desired extra isize: 28 Journal inode: 8 Default directory hash: half_md4 Directory Hash Seed: 79b04935-292f-4308-b59e-d4985fe55a31 Journal backup: inode blocks
例:去掉此設備的日志特性。調整預留空間百分比為0.1(系統支持的最小值),修改卷標名為“ForTest”,
tune2fs -O ^has_journal -m 0.1 -L "ForTest" /dev/sdb5
沒有日志功能的ext3文件系統會降級為ext2文件系統。
用于實現文件系統檢查的工具。
因進程意外終止或系統崩潰等原因導致定稿操作非正常終止,可能會造成文件損壞;此時應該檢測并修復文件系統;建議,此操作離線進行,即umount之后,在檢測。
ext系列專用的文件檢測工具:
e2fsck [options] device
-f:即便文件系統處于clean狀態,也要強制進行檢測
-y:對所有問題自動回答yes。
fsck :
fsck [options] device
-t fstype:指明文件系統類型
-a :無需交互而自動修復所有錯誤
-f:交互式修復
四、掛載使用硬盤設備
在硬盤上創建文件系統之后。要使用該設備,還需要掛載。
文件系統的使用:
首先要“掛載”:mount 命令和 umount (卸載)命令
根文件系統之外的其他文件系統要想能夠被訪問,必須通過關聯至根文件系統上的某個目錄來實現,此關聯操作即為掛載,該目錄即為掛載點。
掛載點;mount_point,用作另一個文件系統的訪問入口。
mount 命令:
mount [-nrw] [-t vfstype] [-o options] device dir
命令選項:
-r (readonly):只讀掛載
-w(read & write):讀寫掛載
-n :默認情況下,設備掛載或卸載的操作會同步更新至/etc/mtab中,-n禁用詞性
-t vfstype:指明要掛載的設備上的文件系統的類型;多數情況下可省略,此時mount會通過blkid 來判斷要掛載的設備的文件系統
-L Label :掛載時以卷標的方式指明設備
mount -L Label dir
-U UUID:掛載時以UUID的方式指明設備
mount -U UUID dir
-o options:
sync/async :同步/異步操作
atime/noatim:文件或目錄在被訪問時是否更新其訪問時間戳
diratime/dirnoatime:目錄在被訪問時是否更新其時間戳
remount: 更新掛載
acl :支持使用facl功能
ro :只讀
rw :讀寫
/dev/nodev :此設備上是否允許創建設備文件
exec/noexec:是否允許運行此設備上的程序文件
auto/noauto
user/nouser: 是否允許普通用戶掛載此文件系統
suid/nosuid :是否允許程序文件上的suid和sgid特許權限生效
defaults: rw,suid,dev,exec,auto,nouser,async,and relatime
使用技巧:
可以實現將目錄綁定至另一個目錄上,作為其臨時訪問入口
mount –bind|-B 源目錄 目標目錄
例:將sdb2掛載到/mnt/mount/sdb2_point上
掛載之后,不允許運行此設備的還是那個的可執行文件,不讓suid生效,訪問文件時不更新文件的時間戳??梢栽诓恍遁d的情況下,執行remount操作。
umount 命令:
umount device|dir
注意:正在被進程訪問的掛載點無法被卸載
如何查看被哪個或哪些進程占用
lfos mount_point
fuser -v mount_point
踢出占用用戶
fuser -km mount_point
例:卸載掉sdb2
查看當前系統所有已掛載的設備
mount
cat /etc/mtab
cat /proc/mounts
掛載光盤
mount -r /dev/vdrom mount_point
交換分區的啟用和禁用
創建交換分區
mkswap device
啟用
swapon [options] [device]
-a :啟用所有定義在/etc/fstab文件中的swap設備
禁用
swapoff
swapoff device
自動掛載
swapon -a
例:將/dev/sdb5設備類型轉換為swap分區,并將其掛載
設定自動掛載
設定除根文件系統以外的其他文件系統能夠開機時自動掛載:/etc/fstab
每行定義一個要掛載的文件系統及相關屬性
6個字段
1)、要掛載的設備
設備文件
Label
UUID
偽文件系統
2)、掛載點
swap文件系統的掛載點為swap
3)、文件系統類型
4)、掛載選項
defaults: 使用默認的掛載選項
如果同時指明多個掛載選項,要用逗號","分開
5)、轉儲頻率
0: 從不備份
1: 每天備份
2:每隔一天備份
6)、自檢次序
0: 不自檢
1: 首先自檢,通常只能是根文件系統可用1
2: 次級自檢
…
mount -a: 自動掛載定義在/etc/fstab中支持自動掛載的設備
注:在掛載通過擴展分區創建的邏輯分區時,若有3個邏輯分區,分別為sdb5、sdb6、sdb7,若sdb6被刪除,則sdb7的磁盤號會自動變化為sdb6,這時,掛載的文件就不再是我們所需要的文件,為了避免這種情況,在掛載時,應盡量使用UUID來進行掛載。
例:1)將sdb2掛載到/mnt/mount/sdb2_point,并指定掛載選項為noexec,nosuid,noatime,以UUID的方式掛載,不備份,不自檢
2)在前一個例子中,我們將sdb5的文件類型設置為swap,先在將其掛載方式改為通過配置文件自動掛載。
總結一下系統新增硬盤到使用的過程:
一、購買新硬盤,并將其接入系統。在生產環境中,硬盤一般都支持熱插拔,即插入即可被系統識別到。在VMware虛擬環境中。需要執行命令讓系統識別新增加的硬盤
命令如下:
CentOS6系列:echo "- – -" > /sys/class/scsi_host/host2/scan
CentOS7系列:echo "- – -" > /sys/class/scsi_host/host0/scan
二、對硬盤進行分區,分區方式兩種,MBR和GPT。MBR最多支持2T的硬盤分區,GPT不受此限制,且GPT上沒有擴展分區和邏輯分區的概念,GPT上的分區都是主分區
三、對硬盤進行格式化,格式化的過程就是創建文件系統的過程。文件系統創建之后,可查看和修改。
四、將設備掛載到目錄上,需要指出的是,掛載的目錄事先得創建,否則掛載不成功。掛載可通過mount掛載和修改/etc/fstab掛載。通過mount掛載的操作在系統重啟后即被清除,若要永久有效,建議使用配置文件進行掛載。
五、文件系統修復,fsck和e2fsck
原創文章,作者:M20-1鐘明波,如若轉載,請注明出處:http://www.www58058.com/40871
文章內容完整,思路清晰,有自己的思考與總結,整篇博客還是能讓人看到很多專業性所在,還能看出很用心的地方,革命尚未成功,同志仍需努力啊,加油!
路漫漫其修遠兮,吾將上下而求索。
謝謝老師的鼓勵