概述:本章介紹磁盤分區和文件系統,深度了解linux存儲數據所依賴到各個部分模塊。
設備文件
I/O Ports: I/O設備地址
一切皆文件:
Linux為所有的設備文件都提供了統一的操作函數接口,方法是使用數據結構struct file_operations。這個數據結構中包括許多操作函數的指針,如open()、close()、read()和write()等,但由于外設 的種類較多,操作方式各不相同。Struct file_operations結構體中的成員為一系列的接口函數,如用于讀/寫的read/write函數和用于控制的ioctl等。 打開一個文件就是調用這個文件file_operations中的open操作。不同類型的文件有不同的file_operations成員函數,如普通的磁盤數據文件, 接口函數完成磁盤數據塊讀寫操作;而對于各種設備文件,則最終調用各自驅動程序中的I/O函數進行具體設備的操作。這樣,應用程序根本不必考慮操作的是設 備還是普通文件,可一律當作文件處理,具有非常清晰統一的I/O接口。所以file_operations是文件層次的I/O接口。
設備類型:
塊設備(block):隨機訪問,數據交換存取單位“塊”,磁盤
字符設備(character):線性訪問,數據交換存取單位“字符”,鍵盤
設備號碼:
主設備號: major number, 標識設備類型:區分設備類型;用于標明設備所需要的驅動程序;
次設備號: minor number, 標識同一類型下的不同設備:區分同種類型下的不同的設備;是特定設備的訪問入口;
硬盤種類:
機械硬盤
固態硬盤
硬盤接口類型
并行:
IDE(ata):并口 133MB/s
SCSI(IDE時代服務器上使用):并口 Ultrascsi320,320MB/s;Ultrascsi640,640MB/s
并口:同一線纜可以接多塊設備
IDE:兩個,主盤,從盤
SCSI:
寬帶16-1(必用一個)
窄帶8-1(必用一個)
串口:同一線纜只可以接一個設備
SATA: 6Gbps
SAS: 6Gbps
USB: 480MB/s
平均尋道時間:
rpm: rotations每分鐘轉速
例如:5400rpm,7200rpm,10000rpm,scsi:15000rpm
lops:io per minute 每分鐘IO次數機械硬盤一般在100-200之間
硬盤存儲術語
head:磁頭 (早期最多可有256個)
track:磁道 (早期最多可有1024個) =512*63
cylinder: 柱面(不同磁盤的相同磁道組成;并且分區是以柱面為) 柱面容量=track(磁道)63*head(磁頭)256*512bytes=8M
secotr: 扇區, 512bytes(早期有63個)
CHS尋址模式
1、CHS尋址模式將硬盤劃分為磁頭(Heads)、柱面(Cylinder)、扇區(Sector)。
磁頭(Heads):每張磁片的正反兩面各有一個磁頭,一個磁頭對應一張磁片的一個面。因此,用第幾磁頭就可以表示數據在哪個磁面。
柱面(Cylinder):所有磁片中半徑相同的同心磁道構成“柱面",意思是這一系列的磁道垂直疊在一起,就形成一個柱面的形狀。簡單地理解,柱面數=磁道數。
扇區(Sector):將磁道劃分為若干個小的區段,就是扇區。雖然很小,但實際是一個扇子的形狀,故稱為扇區。每個扇區的容量為512字節。
2、知道了磁頭數、柱面數、扇區數,就可以很容易地確定數據保存在硬盤的哪個位置。也很容易確定硬盤的容量,其計算公式是:
硬盤容量=磁頭數×柱面數×扇區數×512字節
3、LARGE尋址模式把柱面數除以整數倍、磁頭數乘以整數倍而得到的邏輯磁頭/柱面/扇區參數進行尋址,所以表示的已不是硬盤中的物理位置,而是邏輯位置。LBA尋址模式是直接以扇區為單位進行尋址的,不再用磁頭/柱面/扇區三種單位來進行尋址。但為了保持與CHS模式的兼容,通過邏輯變換算法,可以轉換為磁頭/柱面/扇區三種參數來表示,但表示的也和LARGE尋址模式一樣,已不是硬盤中的物理位置,而是邏輯位置了。
LBA(Logical Block Address),中文名稱:邏輯區塊地址;LBA可以意指某個數據區塊的地址或是某個地址所指向的數據區塊。
CHS地址可用以下公式轉成LBA,
#lba=(#c*H+#h)*S+#s-1
其中,
#c、#h、#s分別是磁柱、磁頭、扇區的編號
#lba是邏輯區塊編號
H=heads per cylinder,每個磁柱的磁頭數
S=sectors per track,每磁道的扇區數
LBA可用以下公式對應到CHS:
#c=#lba/(S*H)
#h=(#lba/S)%H
#s=(#lba%S)+1
其中,
/ 是整數除法
% 是取整數除法中的余數
請注意,當今的磁盤使用ZBR(Zone Bit Recording, 等密度記錄)方式,實際的每軌扇區數得根據它是哪一軌。不過磁盤還是會提供這個參數來符合公式,內部再自動調整。
其它公式:
#lba/S=q 余 r
#s=1+r
q/H=#c 余 #h
Linux的設備管理是和文件系統緊密結合的,各種設備都以文件的形式存放在/dev目錄下,稱為設備文件。應用程序可以打開、關閉和讀寫這些設備文件,完成對設備的操作,就像操作普通的數據文件一樣。為了管理這些設備,系統為設備編了號,每個設備號又分為主設備號和次設備號。主設備號用來區分不同種類的設備,而次設備號用來區分同一類型的多個設備。對于常用設備,Linux有約定俗成的編號,如硬盤的主設備號是3。
設備文件:關聯至設備驅動程序,設備的訪問入口,進而能夠跟與之對應硬件設備進行通信
磁盤設備的設備文件命名: /dev/DEV_FILE
IDE: /dev/hd
SCSI, SATA, SAS, USB: /dev/sd[a-z]
不同設備: a-z
/dev/sda, /dev/sdb, …
同一設備上的不同分區/dev/sd[a-z]#: 1,2, …
/dev/sda1, /dev/sda5
注意:CentOS6與7統統將硬盤設備文件標識為/dev/sd[a-z]#
創建設備文件命令:
mknod:創建塊或字符設備特殊文件
用法:
mknod [OPTION]… NAME TYPE [MAJOR MINOR]
mknod [選項]… 名稱 類型 [主設備號 次設備號]
選項:
-m:設置設備文件權限位,類似于chmod,不似a=rw,umask
-Z:設置SELinux安全環境默認類型
–context[=CTX]:將對應名稱文件的SELinux 安全環境設置為CTX
類型:
b:創建一個(有緩沖)塊設備特殊文件
c, u:創建一個(無緩沖)字符設備特殊文件
p:創建一個先進先出管道
注意:
當類型為"p"時可不指定主設備號和次設備號,否則它們是必須指定的。
如果主設備號和次設備號以"0x"或"0X"開頭,它們會被視作十六進制數來解析;如果以"0"開頭,則被視作八進制數;其余情況下被視作十進制數。
引用設備的方式:
設備文件名
卷標
UUID
生成UUID
[root@localhost ~]# uuidgen
e3a6116a-87f9-485d-8348-5e89dd7999d0
磁盤分區
兩種分區方式: MBR, GPT
MBR: Master Boot Record(主引導記錄),使用32位表示扇區數, 分區不超過2T
如何分區:按柱面分區
0磁道0扇區:512bytes
446bytes: boot loader:用于啟動硬盤的一些引導指令(即主引導程序,MBR)
64bytes:磁盤分區表(DPT),每16bytes標識一個分區,一共只能有4個分區(4個主分區或 3主分區+1擴展(N個邏輯分區))
2bytes: MBR區域的有效標識;55AA為有效;否則認為未分區無法使用
注意:
擴展分區(Extended)必須分區成若干個邏輯分區才能使用。擴展分區也存在類似MBR的EBR(擴展分區引導記錄)
主分區和擴展分區的標識:1-4
邏輯分區:5以上整數
一般一個數據塊(Block)=2^n個扇區
GPT分區
GPT:GUID patition table 支持128個分區,使用64位,支
持8Z(512Byte/block ) 64Z (4096Byte/block)
使用128位UUID 表示磁盤和分區 GPT分區表自動備份在頭
和尾兩份,并有CRC校驗位
UEFI (統一擴展固件接口)硬件支持GPT,使操作系統啟動
EFI部分又可以分為4個區域: EFI信息區(GPT頭)、分區表、 GPT分區、備份區域
管理分區
列出塊設備
lsblk
創建分區使用:
fdisk 創建MBR分區,也支持GPT,對于一塊硬盤,最多只能管理15分區
gdisk 創建GPT分區 推薦使用此工具管理GPT分區
GNU parted 高級分區操作(創建、復制、調整大小等等)
partprobe-重新設置內存中的內核分區表版本
分區工具fdisk和gdisk
注意:因為可以進行分區所以慎用
fdisk /dev/sd*
gdisk /dev/sd* 類fdisk 的GPT分區工具
1、查看磁盤分區信息
fdisk -l [-u] [device…]
示例:
[root@localhost ~]# fdisk -l /dev/sda
磁盤 /dev/sda:214.7 GB, 214748364800 字節,419430400 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
磁盤標簽類型:dos
磁盤標識符:0x000af0bf
設備 Boot Start End Blocks Id System
/dev/sda1 * 2048 411647 204800 83 Linux
/dev/sda2 411648 210126847 104857600 83 Linux
/dev/sda3 210126848 218515455 4194304 82 Linux swap / Solaris
/dev/sda4 218515456 419430399 100457472 5 Extended
/dev/sda5 218517504 260460543 20971520 83 Linux
注意:
Boot列*號所在分區代表引導分區(操作系統所在)
Start與End(分區開始與結束):CentOS6為從那個柱面開始到那個柱面結束
CentOS7為從那個扇區開始到那個扇區結束
Blocks:數據庫數量
Id(類型):正常分區用83(十六進制數字)表示;交換分區(有些場景可以理解為虛擬內存)用82表示;擴展分區用5表示
2、管理分區
fdisk [-uc] [-b sectorsize] [-C cyls] [-H heads] [-S sects] device
fdisk提供了一個交互式接口來管理分區,他有許多子命令,分別用于不同的管理功能;所有的操作均在內存中完成,沒有直接同步到磁盤;直到使用w命令保存至磁盤上
示例:
[root@localhost ~]# fdisk /dev/sdd
歡迎使用 fdisk (util-linux 2.23.2)。
更改將停留在內存中,直到您決定將更改寫入磁盤。
使用寫入命令前請三思。
Device does not contain a recognized partition table
使用磁盤標識符 0x51e40e4e 創建新的 DOS 磁盤標簽。
命令(輸入 m 獲取幫助):m
命令操作
a 切換可引導標志
b 編輯 bsd 磁盤
c 切換 dos 兼容性標志
d 刪除一個分區
l 列出已知的分區類型(Id)
m 打印此菜單
n 添加新的分區
o 創建一個新的空 DOS 分區表
p 顯示分區表
q 退出而不保存更改
s 創建新的空動作
t 改變分區的系統類型 id
u 更改顯示/輸入單位驗證分區表
w 寫入磁盤并退出
x 額外功能 (僅限于專家)
命令(輸入 m 獲取幫助):l
0 空 24 NEC DOS 81 Minix / 舊 Linu bf Solaris
1 FAT12 27 隱藏的 NTFS Win 82 Linux 交換 / 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 隱藏的 C: c6 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 85 Linux 擴展 c7 Syrinx
5 擴展 41 PPC PReP Boot 86 NTFS 卷集 da 非文件系統數據
6 FAT16 42 SFS 87 NTFS 卷集 db CP/M / CTOS / .
7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux 純文本 de Dell 工具
8 AIX 4e QNX4.x 第2部分 8e Linux LVM df BootIt
9 AIX 可啟動 4f QNX4.x 第3部分 93 Amoeba e1 DOS 訪問
a OS/2 啟動管理器 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 休 eb BeOS fs
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD ee GPT
f W95 擴展 (LBA) 54 OnTrackDM6 a6 OpenBSD ef EFI (FAT-12/16/
10 OPUS 55 EZ-Drive a7 NeXTSTEP f0 Linux/PA-RISC
11 隱藏的 FAT12 56 Golden Bow a8 Darwin UFS f1 SpeedStor
12 Compaq 診斷 5c Priam Edisk a9 NetBSD f4 SpeedStor
14 隱藏的 FAT16 <3 61 SpeedStor ab Darwin 啟動 f2 DOS 次要
16 隱藏的 FAT16 63 GNU HURD or Sys af HFS / HFS+ fb VMware VMFS
17 隱藏的 HPFS/NTF 64 Novell Netware b7 BSDI fs fc VMware VMKCORE
18 AST 智能睡眠 65 Novell Netware b8 BSDI swap fd Linux raid 自動
1b 隱藏的 W95 FAT3 70 DiskSecure 多啟 bb Boot Wizard 隱 fe LANstep
1c 隱藏的 W95 FAT3 75 PC/IX be Solaris 啟動 ff BBT
1e 隱藏的 W95 FAT1 80 舊 Minix
注意:在已經分區并且已經掛載其中某個分區的磁盤設備上的創建的新分區,內核可能在創建完成后無法直接識別
同步分區表
查看內核是否已經識別新的分區:
# cat /proc/partations
通知內核重新讀取硬盤分區表
CentOS 5,7:partprobe [/dev/DEVICE]
CentOS 6,7:partx,kpartx
partx [-a|-d|-s|-u] [-t TYPE] [-n M:N] [-] disk
partx [-a|-d|-s|-u] [-t TYPE] partition [disk]
-a:添加制定的分區或讀磁盤新增的分區
-d:刪除制定或所有的分區
-n:指定分區范圍(例如M:N輸入為2:-1表示最后兩個分區)
新增分區用
partx -a -n M:N /dev/DEVICE
kpartx -a /dev/DEVICE -f: force
刪除分區用
partx -d -n M:N /dev/DEVICE
centos6: –nr N-M
分區創建工具:parted,sfdisk;
parted命令
parted的操作都是實時生效的,小心使用
用法: parted [選項]… [設備 [命令 [參數]…]…]
parted /dev/sdb mklabel gpt|msdos
parted /dev/sdb print
parted /dev/sdb mkpart primary 1 200 (默認M)
parted /dev/sdb rm 1
parted -l
創建文件系統:
格式化:
低級格式化(分區之前進行,低級格式化就是將磁盤內容重新清空,恢復出廠時的狀態,劃分出的柱面和磁道,再將磁道劃分為若干個扇區,每個扇區又劃分出標識部分ID、間隔區GAP和數據區DATA等。而且低級格式化只能針對一塊硬盤而不能支持單獨的某一個分區。每塊硬盤在出廠時,已由硬盤生產商進行低級格式化,因此通常使用者無需再進行低級格式化操作。注意的是低級格式化一種損耗性操作)
高級格式化(分區之后對分區進行,高級格式化又稱邏輯格式化,它是指根據用戶選定的文件系統(如FAT12、FAT16、FAT32、NTFS、EXT2、EXT3等),在磁盤的特定區域寫入特定數據,以達到初始化磁盤或磁盤分區、清除原磁盤或磁盤分區中所有文件的一個操作。高級格式化包括對主引導記錄中分區表相應區域的重寫、根據用戶選定的文件系統,在分區中劃出一片用于存放文件分配表、目錄表等用于文件管理的磁盤空間,以便用戶使用該分區管理文件。即創建文件系統并清除所有數據以實現初始化)
元數據區、數據區
元數據區:
文件元數據:inode(index node)
大小、權限、屬主屬組、時間戳、數據塊指針 (但是不包括文件名,文件名保存在目錄數據塊中)
注意:最大單個文件大小由inode(數據塊指針)多少決定
特殊文件:
鏈接文件:存儲數據指針的空間當中存儲的是真實文件的訪問路徑(本身不占據磁盤塊);
設備文件:存儲數據指針的空間當中存儲的是設備號(major,minor)(本身不占據磁盤塊);
文件系統
文件系統是操作系統用于明確存儲設備或分區上的文件的方法和數據結構;即在存儲設備上組織文件的方法。操作系統中負責管理和存儲文件信息的軟件結構稱為文件管理系統,簡稱文件系統。
從系統角度來看,文件系統是對文件存儲設備的空間進行組織和分配,負責文件存儲并對存入的文件進行保護和檢索的系統。具體地說,它負責為用戶建立文件,存入、讀出、修改、轉儲文件,控制文件的存取,安全控制,日志,壓縮,加密等。
文件系統類型
Linux文件系統: : ext2(Extended file system), ext3,
ext4, xfs(企業級64位SGI) , btrfs(Oracle) , reiserfs(反刪除功能很好,但是開發受阻), jfs(
AIX) , swap
光盤: iso9660
Windows: fat32, ntfs
Unix: FFS(fast快速文件系統) , UFS(unix) , JFS2(日志文件系統)
網絡文件系統: NFS, CIFS
集群文件系統: GFS2, OCFS2(oracle)
內核級分布式文件系統:ceph
用戶空間分布式文件系統: moosefs, mogilefs, glusterfs,Lustre
偽文件系統:proc,sysyfs,tmpfs,hugepagefs
交換文件系統:swap
RAW:未經處理或者未經格式化產生的文件系統
文件系統分類
根據其是否支持"journal"功能:
日志型文件系統: ext3, ext4, xfs, …
非日志型文件系統: ext2, vfat
文件系統的組成部分:
內核中的模塊: ext4, xfs, vfat
用戶空間的管理工具: mkfs.ext4, mkfs.xfs,mkfs.vfat
Linux的虛擬文件系統: VFS(用戶與文件系統之間的接口)
查前支持的文件系統: cat /proc/filesystems
創建文件系統
mkfs命令:
(1) # mkfs.FS_TYPE /dev/DEVICE
ext4
xfs
btrfs
vfat
mkfs.vfat device
mkfs -t ext2 = mkfs.ext2
(2) # mkfs -t FS_TYPE /dev/DEVICE
-L 'LABEL': 設定卷標
創建ext文件系統
mke2fs: ext系列文件系統專用管理工具
mke2fs [OPTION] device
-t {ext2|ext3|ext4}:指明要創建的文件系統類型;
mkfs.ext4 = mkfs -t ext4 = mke2fs -t ext4
-b {1024|2048|4096}:指明文件系統的塊大?。?/p>
-L 'LABEL' 創建文件系統并設定卷標
-j: 相當于 -t ext3
mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3
-i #: 指明inode與字節的比率;即每多少字節創建一個Indode;此大小不應該小于block的大小
-N #:直接指明要為此文件系統創建的inode的數量
-I 一個inode記錄大小128—4096
-m #: 默認5%,為管理人員預留空間占總空間的百分比
-O FEATURE[,…]:啟用指定特性創建目標文件系統
-O ^FEATURE:關閉指定目標文件系統特性
對已創建文件系統管理卷標
e2label命令:卷標的查看與設定
查看:e2lable device
設定:e2label device LABEL
dumpe2fs:現實ext系列文件系統的屬性信息
dumpe2fs [-h] device
-h:查看超級塊信息(分組信息),分區用分組管理
tune2fs:查看或重新設定ext系列文件系統可調整參數的值(不用重新格式化)
-l:查看指定文件系統的超級塊信息; super block
-L 'LABEL':修改卷標
-m #:修預留給管理員的空間百分比
-j: 將ext2升級為ext3
-O: 文件系統屬性啟用或禁用, 例如:–O ^has_journal
-o[^]: 調整文件系統的默認掛載選項(mount_options),例如:–o ^acl關閉訪問控制列表
-U UUID: 修改UUID號
注意:塊大小創建后不可修改
因進程意外終止或系統崩潰等原因導致操作非正常終止時,可能會造成文件損壞;此時,應該檢測并修復文件系統;建議,離線進行(非掛載狀態,無人操作);
文件系統檢測和修復
常發生于死機或者非正常關機之后
掛載為文件系統標記為“ dirty”
fsck: 文件系統檢測修復
fsck.FS_TYPE
fsck -t FS_TYPE 指明文件系統類型;
fsck.ext4 = fsck -t ext4
-a: 無須交互而自動修復所有錯誤;(不推薦使用)
-r: 交互式修復錯誤
注意: FS_TYPE一定要與分區上已知文件類型相同;
e2fsck: ext系列文件專用的檢測修復工具
-y:對所有問題自動回答為yes
-f:即使文件系統處于clean狀態,也要強制檢測修復
文件系統標簽
指向設備的另一種方法,與設備無關
blkid:塊設備屬性信息查看
blkid [OPTION]… [DEVICE]
-U UUID: 根據指定的UUID來查找對應的設備
-L LABEL:根據指定的LABEL來查找對應的設備
findfs :查找分區
findfs [options] LABEL=<label>
findfs [options] UUID=<uuid>
文件系統要想使用必須要掛載
掛載mount
在linux操作系統中,掛載是一個非常重要的功能,使用非常頻繁。它指將一個設備(通常是存儲設備)掛接到一個已存在的目錄上。(這個目錄可以不為空,但掛載后這個目錄下以前的內容將不可用。)需要理解的是,linux操作系統將所有的設備都看作文件,它將整個計算機的資源都整合成一個大的文件目錄。
我們要訪問存儲設備中的文件,必須將文件所在的分區掛載到一個已存在的目錄上,然后通過訪問這個目錄來訪問存儲設備。
掛載:將額外文件系統與根文件系統某現存的目錄建立起關聯
關系,進而使得此目錄做為其它文件訪問入口的行為
卸載:為解除此關聯關系的過程
把設備關聯掛載點: mount Point
mount
卸載時:可使用設備,也可以使用掛載點
umount
掛載點下原有文件在掛載完成后會被臨時隱藏
掛載點目錄一般為空
用mount命令掛載文件系統
掛載方法: mount DEVICE MOUNT_POINT
mount:通過查看/etc/mtab文件顯示當前已掛載的所有設備
mount [-fnrsvw] [-t vfstype] [-o options] device dir
device:指明要掛載的設備;
(1) 設備文件:例如/dev/sda5
(2) 卷標: -L 'LABEL', 例如 -L 'MYDATA'
(3) UUID, -U 'UUID':例如 -U '0c50523c-43f1-45e7-85c0-a126711d406e'
(4) 偽文件系統名稱: proc, sysfs, devtmpfs, configfs
dir:掛載點
事先存在;建議使用空目錄
進程正在使用中的設備無法被卸載
mount常用命令選項
-t vsftype:指定要掛載的設備上的文件系統類型
-r: readonly,只讀掛載
-w: read and write, 讀寫掛載
-n: 不更新/etc/mtab,相當于#mount
-a:自動掛載所有支持自動掛載的設備(定義在了/etc/fstab文件中,且掛載選項中有auto功能)
-L 'LABEL': 以卷標指定掛載設備
-U 'UUID': 以UUID指定要掛載的設備
-B, –bind: 綁定目錄到另一個目錄上
目錄也可以掛在至另一個目錄上作為其臨時訪問入口;
mount –bind 源目錄 目標目錄
-o options: (掛載文件系統的選項),多個選項使用逗號分隔
async:異步模式
sync:同步模式,內存更改時,同時寫磁盤
atime/noatime:目錄或文件在被訪問時是否更新其訪問時間戳
diratime/nodiratime:目錄在被訪問時是否更新其訪問時間戳
auto/noauto:是否支持自動掛載,是否支持-a選項(一般寫在/etc/fstab中)
exec/noexec:是否支持在文件系統上運行應用程序
dev/nodev:是否支持在此文件系統上創建使用設備文件
suid/nosuid:是否支持程序文件上的suid和sgid特殊權限生效
remount:重新掛載;
ro:只讀
rw: 讀寫
user/nouser:是否允許普通用戶掛載此設備,默認管理員才能掛載
acl:啟用此文件系統上的acl功能
#mount -o acl device dir
#tune2fs -o acl device
Defaults:相當于rw, suid, dev, exec, auto, nouser, async
查看內核追蹤到的已掛載的所有設備:
#mount
#cat /etc/mtab
#cat /proc/mounts
卸載命令
查看掛載情況:
#findmnt MOUNT_POINT
查看正在訪問指定文件系統的進程:
#lsof MOUNT_POINT
#fuser -v MOUNT_POINT
終止所有在正訪問指定的文件系統的進程:
# fuser -km MOUNT_POINT
卸載:
# umount DEVICE
# umount MOUNT_POINT
設定除根文件系統以外的其它文件系統能夠開機時自動掛載:/etc/fstab文件
文件掛載配置文件
/etc/fstab 每行定義一個要掛載的文件系統;
第一列字段:要掛載的設備或偽文件系統(設備文件或LABEL=""卷標或UUID="")
偽文件系統:如sysfs,proc,tmpfs等
第二列字段:掛載點
swap類型的設備的掛載點為swap;
第三列字段:文件系統類型
第四列字段:掛載選項
defaults:使用默認掛在選項;
如果要同時指明多個掛載選項,彼此間以逗號分隔;
第五列字段:轉儲頻率(備份)
0:不做備份
1:每天轉儲
2:每隔一天轉儲
第六列字段:自檢次序
0:不自檢
1:首先自檢;一般只有rootfs才用1
2:次級自檢
自動掛載定義在/etc/fstab中的所有支持自動掛載的文件系統設備
#mount -a
swap文件系統:
Linux上的交換分區必須使用獨立的文件系統;且文件系統的System ID必須為82;
創建swap設備:mkswap命令
mkswap [OPTIONS] device
-L LABEL:指明卷標
-f:強制創建
windows無法識別Linux的文件系統;因此,存儲設備需要兩種系統之間交叉使用時,應該使用windows和Linux同時支持的文件系統;fat32(vfat);
處理交換文件和分區
交換分區是系統RAM的補充
基本設置包括:
創建交換分區或者文件
使用mkswap寫入特殊簽名
在/etc/fstab文件中添加適當的條目
使用swapon -a 激活交換空間
掛載交換分區
啟用: swapon
swapon [OPTION]… [DEVICE]
-a:激活所有的交換分區(定義在/etc/fstab文件中的所有swap設備);
-p PRIORITY:指定優先級
/etc/fstab:pri=value
禁用: swapoff [OPTION]… [DEVICE]
SWAP的優先級
用戶可以給某個swap指定一個0到32767的優先級
如果用戶沒有指定,那么核心會自動給swap指定一個優
先級,這個優先級從-1開始,每加入一個新的沒有用戶
指定優先級的swap,會給這個優先級減一。
先添加的swap的缺省優先級比較高,除非用戶自己指定一個優先級,而用戶指定的優先級(是正數)永遠高于核心
缺省指定的優先級(是負數)。
優化性能:分布存放,高性能磁盤存放
移動介質
掛載意味著使外來的文件系統看起來如同是主目錄樹的一部分
訪問前、介質必須被掛載
摘除時,介質必須被卸載
按照默認設置,非根用戶只能掛載某些設備(光盤、 DVD、軟盤、 USB等等)
掛載點通常在/media 或/mnt下
使用光盤
在圖形環境下自動啟動掛載/run/media/<user>/<label>
否則就必須被手工掛載
mount /dev/cdrom /mnt/
eject命令卸載或彈出磁盤
#eject
#eject -t 彈入
創建ISO文件
cp /dev/cdrom /root/centos7.iso
mkisofs -r -o /root/etc.iso /etc
刻錄光盤
wodim –v –eject centos.iso
掛載本地的回環設備:
回環設備:一般為使用鏡像文件(鏡像文件中也有文件系統)虛擬塊設備存在于實際的另一個文件系統中
#mount -o loop /PATH/TO/SOME_LOOP_FILE MOUNT_POINT
掛載USB介質
被內核探測為SCSI設備
/dev/sdaX、 /dev/sdbX、或類似的設備文件
在圖形環境中自動掛載
圖標在[計算機]窗口中創建
掛載在/run/media/<user>/<label>
手動掛載
mount /dev/sdb1 /mnt
常見工具
內存空間使用狀態:
free [OPTION]
-m: 以MB為單位
-g: 以GB為單位
-h:human-readable;以人類易讀的單位顯示
文件系統空間占用信息的查看工具:
df [OPTION]… [FILE]…
-H 以1000為單位
-T 文件系統類型
-h: human-readable;以人類易讀的單位顯示
-i: inodes instead of blocks;顯示inode的使用狀態而非blocks
-P: 以Posix兼容的格式輸出
-:僅顯示本地文件的相關信息(不包括網絡中的);
查看某目錄總體空間占用狀態:
du [OPTION]… DIR
-h: human-readable;以人類易讀的單位顯示
-s: summary;共計
工具dd
dd命令: convert and copy a file
用法:
dd if=/PATH/FROM/SRC of=/PATH/TO/DEST
bs=#: block size, 復制單元大小
count=#:復制多少個bs
of=file 寫到所命名的文件而不是到標準輸出
if=file 從所命名文件讀取而不是從標準輸入
bs=size 指定塊大?。仁鞘莍bs也是obs)
ibs=size 一次讀size個byte
obs=size 一次寫size個byte
cbs=size 一次轉化size個byte
skip=blocks 從開頭忽略blocks個ibs大小的塊
seek=blocks 從開頭忽略blocks個obs大小的塊
count=n 只拷貝n個記錄
conv=conversion[,conversion…] 用指定的參數轉換文件。
轉換參數:
ascii 轉換 EBCDIC 為 ASCII
ebcdic 轉換 ASCII 為 EBCDIC
block 轉換為長度為 cbs 的記錄,不足部分用空格填充。
unblock 替代cbs長度的每一行尾的空格為新行
lcase 把大寫字符轉換為小寫字符
ucase 把小寫字符轉換為大寫字符
swab 交換輸入的每對字節
noerror 出錯時不停止
notrunc 不截短輸出文件
sync 把每個輸入塊填充到ibs個字節,不足部分用空(NUL)字符補齊
磁盤拷貝:
dd if=/dev/sda of=/dev/sdb
備份MBR:
dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1
破壞MBR中的bootloader:
dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446
有一個大與2K的二進制文件fileA。 現在想從第64個字節位置開始讀取,需要讀取的大小是128Byts。又有fileB, 想把上面讀取到的128Bytes寫到第32個字節開始的位置,替換128Bytes,請問如何實現?
#dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc
備份:
dd if=/dev/sdx of=/dev/sdy
將本地的/dev/sdx整盤備份到/dev/sdy
dd if=/dev/sdx of=/path/to/image
將/dev/sdx全盤數據備份到指定路徑的image文件
dd if=/dev/sdx | gzip >/path/to/image.gz
備份/dev/sdx全盤數據,并利用gzip工具進行壓縮,保存到指定路徑
恢復:
dd if=/path/to/image of=/dev/sdx
將備份文件恢復到指定盤
gzip -dc /path/to/image.gz | dd of=/dev/sdx
將壓縮的備份文件恢復到指定盤
拷貝內存資料到硬盤
dd if=/dev/mem of=/root/mem.bin bs=1024
將內存里的數據拷貝到root目錄下的mem.bin文件
從光盤拷貝iso鏡像
dd if=/dev/cdrom of=/root/cd.iso
拷貝光盤數據到root文件夾下,并保存為cd.iso文件
銷毀磁盤數據
dd if=/dev/urandom of=/dev/sda1
利用隨機的數據填充硬盤,在某些必要的場合可以用來銷毀數據。執行此操作以后, /dev/sda1將無法掛載,創建和拷貝操作無法執行。
得到最恰當的block size
dd if=/dev/zero bs=1024 count=1000000
of=/root/1Gb.file
dd if=/dev/zero bs=2048 count=500000
of=/root/1Gb.file
dd if=/dev/zero bs=4096 count=250000
of=/root/1Gb.file
dd if=/dev/zero bs=8192 count=125000
of=/root/1Gb.file
通過比較dd指令輸出中所顯示的命令執行時間,即可確定系統
最佳的block size大小
測試硬盤讀寫速度
dd if=/root/1Gb.file bs=64k | dd of=/dev/null
dd if=/dev/zero of=/root/1Gb.file bs=1024
count=1000000
通過上兩個命令輸出的執行時間,可以計算出測試硬盤的讀/寫速度
修復硬盤
dd if=/dev/sda of=/dev/sda
當硬盤較長時間(比如1, 2年)放置不使用后,磁盤上會產生消磁點。當磁頭讀到這些區域時會遇到困難,并可能導致I/O錯誤。當這種情況影響到硬盤的第一個扇區時,可能導致硬盤報廢。上邊的命令有可能使這些數據起死回生。且這個過程是安全,高效的。
du -s 當前目錄下所有文件大小和
du -sh
du -sh /
du -sh /*
1、創建一個2G的文件系統,塊大小為2048byte, 預留1%可用空間,文件系統ext4,卷標為TEST,要求此分區開機后自
動掛載至/testdir目錄,且默認有acl掛載選項
2、寫一個腳本,完成如下功能:
(1) 列出當前系統識別到的所有磁盤設備
(2) 如磁盤數量為1,則顯示其空間使用信息
否則,則顯示最后一個磁盤上的空間使用信息
二、總結練習:
1、分區(mbr,gpt)區別和結構
MBR,全稱為Master Boot Record,即硬盤的主引導記錄。
硬盤的0柱面、0磁頭、1扇區稱為主引導扇區(也叫主引導記錄MBR)。它由三個部分組成,主引導程序、硬盤分區表DPT(Disk Partition table)和分區有效標志。在總共512字節的主引導扇區里主引導程序(boot loader)占446個字節,第二部分是Partition table區(分區表),即DPT,占64個字節,硬盤中分區有多少以及每一分區的大小都記在其中。第三部分是magic number,占2個字節,固定為0xAA55或0x55AA,這取決于處理器類型,如果是小端模式處理器(如Intel系列),則該值為0xAA55;如果是大端模式處理器(如Motorola6800),則該值為0x55AA。
注意
MBR是不屬于任何一個操作系統,也不能用操作系統提供的磁盤操作命令來讀取它,但可以通過命令來修改和重寫
MBR組成
一個扇區的硬盤主引導記錄MBR由4個部分組成。
主引導程序(偏移地址0000H–0088H):它負責從活動分區中裝載,并運行系統引導程序。
出錯信息數據區:偏移地址0089H–00E1H為出錯信息,00E2H–01BDH全為0字節。
分區表(DPT,Disk Partition Table)含4個分區項:偏移地址01BEH–01FDH,每個分區表項長16個字節,共64字節為分區項1、分區項2、分區項3、分區項4。
結束標志字:偏移地址01FE–01FF的2個字節值為結束標志0xAA55或0x55AA,稱為“魔數”(magic number)。如果該標志錯誤系統就不能啟動。
MBR使用磁盤的最開始的512Byte,結構圖如下??梢钥吹街挥兄虚g的64Byte是用來描述分區表的,每16Byte描述一個分區,所以最多只能同時劃分4個主分區。
具體含義如下:
(1)0x00~0x1BD:446個字節,包含一段指令,用以通知計算機如何訪問分區表并定位操作系統的位置
這部分的代碼會因為操作系統不同而不同,利用引導代碼可以實現多重系統引導。多系統引導有兩種方法可以實現:一種方法是用操作系統在引導分區中設置一段代碼,先加載進入用戶選擇系統的界面,允許用戶選擇要進入的系統,再進入指定的系統;第二種方法是改變MBR中的引導代碼,該代碼直接呈現給用戶一個選擇系統的界面。
(2)0x1BE~0x1FD:64個字節,4個分區表項,每個表項占用16個字節,描述一個分區,最多可以描述4個分區(這就是為什么MBR分區體系只能分成4個區【我們平時看到的分區一般可以從26個字母中選取任意多個當做分區標識(多于4個),這是因為那些分區是邏輯分區,這里的4個分區指的是主分區和擴展分區的數目,而邏輯分區是在擴展分區中劃分出來的,也叫做二級、三級擴展分區?!浚?/p>
分區表項并沒有順序要求,即不要求第一個分區表項在第二個分區表項前。
分區表也不要求從第一個分區表項開始
(3)0x1FE~0x1FF:2個字節,有效結束標志0xAA55或0x55AA。如果沒有這個標志,操作系統會認為磁盤沒有初始化,無法正確加載磁盤的分區。
而描述硬盤分區結構信息的這16Byte是如下這樣的結構。可以發現只有最后4Byte是用來描述分區總的扇區數的,4Byte是32位,也就是分區最大只能是2^32*512Byte,大概是2.2TB。
分區表參數含義(字節)
0 活動(80)或非活動分區(00)
1 2 3 起始的磁頭 01 柱面 01 扇區00值
4 分區類型符 NTFS(07)FAT32(0B)擴展(0F)
5 6 7 結束的磁頭 FE 柱面 FF 扇區FF值
8 9 A B 本分區之前已用扇區數
C D E F 本分區大小
虛擬MBR
即 EBR (extent boot record)擴展引導記錄,其記錄表項 與MBR相同 ,用于管理擴展分區上的邏輯驅動器。
GUID磁碟分割表(GUID Partition Table,縮寫:GPT)
其含義為“全局唯一標識磁盤分區表”,是一個實體硬盤的分區表的結構布局的標準。它是可擴展固件接口(EFI)標準(被Intel用于替代個人計算機的BIOS)的一部分,被用于替代BIOS系統中的一32bits來存儲邏輯塊地址和大小信息的主開機紀錄(MBR)分區表。
1、支持2TB以上的大硬盤。
2、每個磁盤的分區個數幾乎沒有限制?!皫缀酢笔且驗閃indows系統最多只允許每個劃分128個分區。不過也完全夠用了。
3、分區大小幾乎沒有限制。“幾乎”。因為它用64位的整數表示扇區號,即2^64=18,446,744,073,709,551,616??鋸堃稽c說,一個64位整數能代表的分區大小已經是個“天文數字”了,若干年內你都無法見到這樣大小的硬盤,更不用說分區了。
4、分區表自帶備份。在磁盤的首尾部分分別保存了一份相同的分區表。其中一份被破壞后,可以通過另一份恢復。
5、每個分區可以有一個名稱(不同于卷標)。
邏輯塊(LBA)大小是512Byte。出于兼容性考慮,LBA 0(即硬盤的第一個扇區)仍然用作MBR,之后LBA 1是分區表頭。LBA 2-33都用來描述分區表項,每個LBA可描述4個分區,即每個分區使用128Byte來描述。另外,GPT分區將在磁盤最后的33個扇區作為主分區表的備份,稱為備份分區表。
GPT 為了兼容 MBR,LBA 0 依舊保留了MBR的結構。在GPT工作時,會優先讀取 GPT (LBA1) 內容。如果沒有 GPT 內容,則認為這是一塊MBR磁盤。再從LBA 0 讀取MBR。 在硬盤末尾,GPT 備份了一份,這樣當GPT出錯時,可以快速的從硬盤末尾恢復。LBA -1 (負1) 表示倒數第一塊 LBA。 從LBA 2 到 LBA 33 ,一共預留了 128 個分區表空間。 GPT 支持在一塊硬盤上創建 128 個分區。所以每一個分區可以使用 128 bytes 的空間。
而每個分區表項是如下這樣的結構,可以看到它使用8Byte描述分區起始位置和結束位置,那么就是(2^64-1)*512Byte=9.4ZB(9.4×10^21字節)。
GPT磁盤與MBR磁盤
GPT(Globally Unique Identifier Partition Table Format)一種由基于 Itanium 計算機中的可擴展固件接口 (EFI) 使用的磁盤分區架構。與主啟動記錄 (MBR) 分區方法相比,GPT 具有更多的優點,因為它允許每個磁盤有多達 128 個分區,支持高達 18 千兆兆字節的卷大小,允許將主磁盤分區表和備份磁盤分區表用于冗余,還支持唯一的磁盤和分區 ID (GUID)。 與支持最大卷為 2 TB (terabytes) 并且與每個磁盤最多有 4 個主分區(或 3 個主分區,1 個擴展分區和無限制的邏輯驅動器)的主啟動記錄 (MBR) 磁盤分區的樣式相比,GUID 分區表 (GPT) 磁盤分區樣式支持最大卷為 18 EB (exabytes) 并且每磁盤最多有 128 個分區。與 MBR 分區的磁盤不同,至關重要的平臺操作數據位于分區,而不是位于非分區或隱藏扇區。另外,GPT 分區磁盤有多余的主要及備份分區表來提高分區數
2、作業:分區(mbr,gpt),創建文件系統(ext系列,xfs等),mount掛載各種選項
MBR分區:
GPT分區:
注意:文件系統是針對分區來使用的,如如下圖操作,則是將整個磁盤當成一個分區,格式化創建文件系統
創建ext系列文件系統
創建ext系列文件系統工具還有以下工具
mke2fs
創建xfs文件系統
注意:
對已經分區的硬盤新添加或刪除分區,需要執行以下命令,使內核能夠識別硬盤變動情況;而非分區過的硬盤不需要
通知內核重新讀取硬盤分區表
CentOS 5,7:partprobe [/dev/DEVICE]
CentOS 6,7:partx,kpartx
partx [-a|-d|-s|-u] [-t TYPE] [-n M:N] [-] disk
partx [-a|-d|-s|-u] [-t TYPE] partition [disk]
-a:添加制定的分區或讀磁盤新增的分區
-d:刪除制定或所有的分區
-n:指定分區范圍(例如M:N輸入為2:-1表示最后兩個分區)
新增分區用
partx -a -n M:N /dev/DEVICE
kpartx -a /dev/DEVICE -f: force
刪除分區用
partx -d -n M:N /dev/DEVICE
centos6: –nr N-M
例如
在已經分過區的磁盤上添加新分區
在已經分過區的磁盤上刪除分區
mount掛載各種選項
分區掛載
光盤掛載
掛載USB
#mount /dev/sdf /mnt/usb
掛載回環設備
#mount -o loop /PATH/TO/SOME_LOOP_FILE MOUNT_POINT
掛載swap
掛載目錄
mount –bind 源目錄 目標目錄
開機自動掛載
編輯/etc/fstab文件
自動掛載定義在/etc/fstab中的所有支持自動掛載的文件系統設備
#mount -a
激活所有的交換分區(定義在/etc/fstab文件中的所有swap設備);
#swapon -a
原創文章,作者:NameLess,如若轉載,請注明出處:http://www.www58058.com/42586