磁盤,計算機最常見的存儲硬件設備。對Linux而言,其哲學思想之一就是一切皆文件,因此linux之上所有設備的操作都是通過文件接口來實現的,也就是說在訪問設備的時候就如同訪問一個文件一樣,因為他們使用的都是文件系統接口。
向磁盤中寫入數據的操作過程:
首先硬件設備在系統上會映射成一個一個文件,我們在對硬件中寫入數據就相當于在打開一個文件中去執行讀寫操作,對于程序而言會先open()一個文件,然后執行read()或者write()操作,最后關閉文件close()。
設備類型:
塊設備:block,存取單位“塊”,如磁盤/dev/sda
字符設備:char,存取單位“字符”,如/dev/null(linux里面的黑洞設備,放什么進去都會消失)
設備文件:
每一個設備都有一個文件作為它的訪問入口,此文件我們稱之為設備文件;該文件關聯至一個設備驅動,進而能夠跟與之對應的硬件設備進行通信。
設備號碼:
用來標識設備,不同類別的設備有不同的設備號,同一類別的設備有不同的設備或多個設備,因此就有主設備號和次設備號。
主設備號:major number,標識設備類型
次設備號:minor numbei,標識同以類型下的不同設備
磁盤的接口類型:每一種的接口傳輸速率都是不同的
并口:數據傳輸有n根線并行傳輸的
IDE:133MB/S
SCSI:640MB/S
串口:數據傳輸有一根線按照順序傳輸
SATA:6Gbps(第三代sata傳輸速度)
SAS:6Gbps
USB:480MB/s
磁盤設備的設備文件命令:
IDE:/dev/hd
SCSI、SATA、SAS、USB:/dev/sd
不同設備表示方法:在設備文件名后面追加一些字母a-z來表示
/dev/sda,/dev/sdb,/dev/sdc
同一設備上的不同分區,采用數字遞增的方式
/dev/sda1,/dev/sda2…
硬盤結構
head:磁頭
track:磁道,是由廠商劃分好的
secotr: 扇區,每一個512bytes,固定角速度的設備,任意磁盤上的任意扇區,讀取的平均時間稱為平均尋道時間
cylinder: 柱面chs
磁盤分區
為什么要分區?
優化I/O性能
實現磁盤空間配額限制
提高修復速度
隔離系統和程序
安裝多個OS
采用不同文件系統
兩種分區方式:MBR,GPT
MBR: Master Boot Record,1982年創建,使用32位表示扇區數,分區不超過2T
MBR使用legacy的引導方式啟動
如何分區?:按柱面
0磁道0扇區:512bytes
446bytes: boot loader 系統引導
64bytes:分區表,其中每16bytes:標識一個分區,可以有4個主分區,或者3個主分區1個擴展分區
2bytes: 55AA,判斷有無分區
4個主分區;3主分區+1擴展(N個邏輯分區)
GPT:GUID(Globals Unique Identifiers)partition table
支持128個分區,使用64位,支持8Z(512Byte/block )64Z (4096Byte/block)
使用128位UUID 表示磁盤和分區GPT分區表自動備份在頭和尾兩份,并有CRC校驗位
支持2TB以上的硬盤分區
GPT引導需要UEFI (統一擴展固件接口)硬件支持,使操作系統啟動
分區管理
列出塊設備
lsblk
創建分區使用:
fdisk創建MBR分區,也支持GPT,對于一塊硬盤,最多只能管理15分區
gdisk創建GPT分區
GNU parted高級分區操作(創建、復制、調整大小等等)
partprobe-重新設置內存中的內核分區表版本
分區工具fdisk和gdisk
fdisk /dev/sd*
gfisk /dev/sd* 類fdisk 的GPT分區工具(gdisk命令參考fdisk,大體是一樣的)
# fdisk -l [-u] [device…]
fdisk子命令:
p 分區列表
t 更改分區類型
n 創建新分區
d 刪除分區
w 保存并退出
q 不保存并退出
示例:創建一個分區
輸入fdisk /dev/sdb對sdb磁盤進行分區,按m表示查看幫助信息
分區前按p查看一下磁盤信息
按n,創建一個新的分區,按p,創建一個主分區,1表示主分區編號 ,+10G表示該分區為10G
創建然查看一下確認一下創建的磁盤信息
最后按w,保存退出,如果不店保存退出的話,上面的操作是不會生效的,然后再輸入lsblk再確認
同步分區表
查看內核是否已經識別新的分區:
# cat /proc/partations
通知內核重新讀取硬盤分區表
CentOS 6使用:
新增分區用
partx -a /dev/DEVICE
kpartx -a /dev/DEVICE -f: force
CentOS 6新增分區同步示例:
刪除分區用(CentOS 6用)
partx-d –nr N-M /dev/DEVICE (N-M指分區的minor,如果要刪1-5的話就輸入1-5)
CentOS 5,7: (CentOS5和7新增和刪除都一條命令即可,CentOS 6此命令有bug不能用)
使用partprobe 示例 partprobe [/dev/DEVICE]
此處因為上面分區已經同步完成,所以這里沒什么用,一般來說,只有舊硬盤同步的時候會報錯,新的硬盤一般報錯的機率比較少,所以舊的硬盤可能要同步多次才會顯示出來
parted命令
parted的操作都是實時生效的,小心使用,建議不要使用,大家了解即可
用法:parted [選項]… [設備[命令[參數]…]…]
parted /dev/sdb mklabel gpt|msdos 此命令用于創建gpt或者msdos的分區
parted /dev/sdb print 顯示/dev/sdb磁盤信息
parted /dev/sdb mkpart primary 1 200 (默認M) 創建一個200M的分區
parted /dev/sdb rm 1 刪除/dev/sdb序列號為1的分區
parted -l 顯示所有分區
此命令不建議使用,所以這里就不做示例說明了,需要使用的話大家參考以上命令格式即可
文件系統
文件系統是操作系統用于明確存儲設備或分區上的文件的方法和數據結構;即在存儲設備上組織文件的方法。操作系統中負責管理和存儲文件信息的軟件結構稱為文件管理系統,簡稱文件系統。
從系統角度來看,文件系統是對文件存儲設備的空間進行組織和分配,負責文件存儲并對存入的文件進行保護和檢索的系統。具體地說,它負責為用戶建立文件,存入、讀出、修改、轉儲文件,控制文件的存取,安全控制,日志,壓縮,加密等。
文件系統類型
Linux文件系統: :ext2(Extended file system), ext3, ext4, xfs(SGI), btrfs(Oracle) reiserfs, jfs(AIX), swap(虛擬內存),VFS(虛擬化文件系統)
光盤:iso9660
Windows:fat32, ntfs
Unix: FFS(fast), UFS(unix), JFS2
網絡文件系統:NFS, CIFS
集群文件系統:GFS2, OCFS2(oracle)
分布式文件系統:ceph, moosefs, mogilefs, glusterfs, Lustre
RAW:未經處理或者未經格式化產生的文件系統
文件系統分類
根據其是否支持"journal"功能:
日志型文件系統: ext3, ext4, xfs, …
非日志型文件系統: ext2, vfat
文件系統的組成部分:
內核中的模塊:ext4, xfs, vfat
用戶空間的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat
Linux的虛擬文件系統:VFS
查前支持的文件系統:cat /proc/filesystems
VFS作用:
VFS的作用就是采用標準的Unix系統調用讀寫位于不同物理介質上的不同文件系統。VFS是一個可以讓open()、read()、write()等系統調用不用關心底層的存儲介質和文件系統類型就可以工作的粘合層。在古老的DOS操作系統中,要訪問本地文件系統之外的文件系統需要使用特殊的工具才能進行。而在Linux下,通過VFS,一個抽象的通用訪問接口屏蔽了底層文件系統和物理介質的差異性。
每一種類型的文件系統代碼都隱藏了實現的細節。因此,對于VFS層和內核的其它部分而言,每一種類型的文件系統看起來都是一樣的。
創建文件系統
mkfs命令:(make file system)
(1) # mkfs.FS_TYPE /dev/DEVICE =mkfs -t FS_TYPE (FS-TYPE ext4、xfs、btrfs 等)
示例:msfs.ext4 /dev/sda
(2) # mkfs -t FS_TYPE /dev/DEVICE
-L 'LABEL': 設定卷標
示例:將/dev/sda1的文件系統創建為ext4
注意:CentOS 7默認的文件系統是xfs,如果轉成ext4,有可能會造成文件系統破壞導致開不了機
創建ext文件系統
mke2fs:ext系列文件系統專用管理工具
-t {ext2|ext3|ext4}:指定文件系統
-b {1024|2048|4096}:指定塊大小
-L 'LABEL'
-j: 相當于-t ext3
mkfs.ext3 = mkfs-t ext3 = mke2fs -j = mke2fs -t ext3
-i#: 為數據空間中每多少個字節創建一個inode;此大小不應該小于block的大小
-N #:為數據空間創建個多少個inode
-I 一個inode記錄大小128—4096
-m #: 默認5%,為管理人員預留空間占總空間的百分比
-O FEATURE[,…]:啟用指定特性
-O ^FEATURE:關閉指定特性, 示例.關閉日志功能 mke2fs -O ^has_journal /dev/sdb1
示例:常用選項說明
文件系統標簽
指向設備的另一種方法,與設備無關
blkid:塊設備屬性信息查看
blkid [OPTION]… [DEVICE]
-U UUID: 根據指定的UUID來查找對應的設備
-L LABEL:根據指定的LABEL來查找對應的設備
示例:
e2label:管理ext系列文件系統的LABEL
# e2label DEVICE [LABEL]
示例:
findfs:查找分區
findfs[options] LABEL=<label>
findfs[options] UUID=<uuid>
tune2fs
tune2fs [option] DEVICE:重新設定ext系列文件系統可調整參數的值
-l:查看指定文件系統超級塊(superblock)信息
-L 'LABEL':修改卷標
-m #:修預留給管理員的空間百分比
-j: 將ext2升級為ext3
-O: 文件系統屬性啟用或禁用,–O ^has_journal
-o: 調整文件系統的默認掛載選項,–o ^acl
-U UUID: 修改UUID號,可以使用uuidgen命令獲取一個隨機的UUID
dumpe2fs [option] DEVICE:此命令相當于 tune2fs -l DEVICE
-h:查看超級塊信息(分組信息),分區用分組管理
超級塊
什么是超級塊?
超級塊(superblock)的作用是存儲文件系統的大小、有多少是空的和已經填滿的占多少,以及它們各自的總數和其他諸如此類的信息。要使用一個分區來進行數據訪問,那么第一個要訪問的就是超級塊。所以,如果超級塊壞了,那磁盤基本就沒救了。
超級塊占用第一號物理塊,是文件系統的控制塊,超級塊包括:文件系統大小、空閑塊數目、空閑塊索引表、空閑inode節點數目、空閑inode節點索引表、封鎖標記等。超級塊是系統為文件分配存儲空間、回收存儲空間的依據。
所以為了防止超級塊數據損壞,就需要對超級塊數據進行備份,以便于損壞時可以恢復。
超級快和inode_table關系圖
什么是超級塊?
超級塊(superblock)的作用是存儲文件系統的大小、有多少是空的和已經填滿的占多少,以及它們各自的總數和其他諸如此類的信息。要使用一個分區來進行數據訪問,那么第一個要訪問的就是超級塊。所以,如果超級塊壞了,那磁盤基本就沒救了。
超級塊占用第一號物理塊,是文件系統的控制塊,超級塊包括:文件系統大小、空閑塊數目、空閑塊索引表、空閑inode節點數目、空閑inode節點索引表、封鎖標記等。超級塊是系統為文件分配存儲空間、回收存儲空間的依據。
所以為了防止超級塊數據損壞,就需要對超級塊數據進行備份,以便于損壞時可以恢復。
文件系統檢測和修復
常發生于死機或者非正常關機之后(windows操作系統崩潰后系統也會開機自檢原理一樣)
掛載為文件系統標記為“dirty”
fsck: File System Check
fsck.FS_TYPE [option] DEVICE
-t FS_TYPE
-a: 自動修復錯誤
-r: 交互式修復錯誤
注意: FS_TYPE一定要與分區上已經文件類型相同;
e2fsck:ext系列文件專用的檢測修復工具
-y:自動回答為yes
-f:強制修復
示例:修復損壞的磁盤
掛載mount
掛載:將額外文件系統與根文件系統某現存的目錄建立起關聯關系,進而使得此目錄做為其它文件訪問入口的行為
卸載:為解除此關聯關系的過程
把設備關聯掛載點:mount DEVICE MOUNT_POINT
卸載時:可使用設備,也可以使用掛載點 umount DEVICE
掛載點下原有文件在掛載完成后會被臨時隱藏
掛載點目錄一般為空
查看掛載情況:
findmntMOUNT_POINT
查看正在訪問指定文件系統的進程:
lsofMOUNT_POINT
fuser -v MOUNT_POINT
終止所有在正訪問指定的文件系統的進程:
fuser -km MOUNT_POINT
卸載:
umountDEVICE
umountMOUNT_POINT
用mount命令掛載文件系統
掛載方法:mount DEVICE MOUNT_POINT
mount:通過查看/etc/mtab文件顯示當前已掛載的所有設備
查看內核追蹤到的已掛載的所有設備:
cat /proc/mounts
mount [option]…[-t FSTYPE] [-o option] DEVICE MOUNT_POINT
DEVICE:指明要掛載的設備;
(1) 設備文件:例如/dev/sda5
(2) 卷標:-L 'LABEL',例如-L 'MYDATA'
(3) UUID, -U 'UUID':例如-U '0c50523c-43f1-45e7-85c0-a126711d406e'
(4) 偽文件系統名稱:proc, sysfs, devtmpfs, configfs
固定掛載點MOUNT_POINT:/mnt /media
掛載點需要具備以下兩點
1.掛載點事先存在,并且使用空目錄
2.進程正在使用中的設備無法被卸載
mount常用命令選項
-t FSTYPE:指定要掛載的設備上的文件系統類型
-r: readonly,只讀掛載
-w: read and write, 讀寫掛載
-n: 不更新/etc/mtab,相當于#mount
-a:自動掛載所有支持自動掛載的設備(定義在了/etc/fstab文件中,且掛載選項中有auto功能)
-L LABEL: 以卷標指定掛載設備
-U UUID='UUID': 以UUID指定要掛載的設備
-B, –bind: 綁定目錄到另一個目錄上
-o options:(掛載文件系統的選項),多個選項使用逗號分隔
async:異步模式,內存更改時,不會馬上寫入磁盤,以節省IO資源
sync:同步模式,內存更改時,同時寫磁盤
atime/noatime:包含目錄和文件
diratime/nodiratime:目錄的訪問時間戳
auto/noauto:是否支持自動掛載,是否支持-a選項
exec/noexec:是否支持將文件系統上運行應用程序
dev/nodev:是否支持在此文件系統上使用設備文件
suid/nosuid:不否支持suid和sgid權限
remount:重新掛載
ro:只讀
rw:讀寫
user/nouser:是否允許普通用戶掛載此設備,默認管理員才能掛載
acl:啟用此文件系統上的acl功能
注意:1、上述選項可多個同時使用,彼此之間使用逗號分隔。
2、默認掛載選項:rw, dev, exec, auto, nouser, async
示例1:掛載/dev/sdb1到/mnt/sdb1目錄下面
示例2:取消/dev/sdb1的掛載
示例3:重新掛載設備/dev/sdb1且為只讀
示例4:掛載目錄具有suid權限的目錄(此操作過于危險,請謹慎使用)
當掛載具有suid的目錄后,假如目錄下面有某些系統命令在該目錄下面,使用這些命令,可以直接查看到或修改到系統的文件,所以需要我們謹慎操作此命令。
查看內核追蹤到的已掛載的所有設備:
cat /proc/mounts
原創文章,作者:~微風~,如若轉載,請注明出處:http://www.www58058.com/41864