磁盤管理

硬盤存儲術語

CHS三維存儲結構

採用24bit位尋址:其中前10位表示cylinder,中間8位表示head,後面6位表示sector,最大尋址空間8GB。

head:磁頭 磁頭數與盤面數相同,一個盤片兩個面;由8個二進制位表示磁頭數,所以最多有2^8-1=255個邏輯磁頭。
track:磁道 從外向內編號,最外層0磁道;由10個二進制位表示磁道數,所以最多有2^10-1=1023個磁道。
cylinder:柱面 ,磁盤隨主軸旋轉多個盤面上的同一磁道構一個柱面,最外層則爲0柱面,柱面數與磁道數相同。
sector:扇區,磁道上的物理存儲單元,一個存儲單容量爲512bytes ;由6個二進制位表示扇區數,所以最多有2^6-1=63個扇區
容量計算:
傳統硬盤計算方法:CHS=cylinder*head*sector*512bytes,所以早期硬盤理論最大8GB
一個柱面的容量:1cylinder=扇區數*磁頭數*512B=63*255*512B=8MB
一個磁盤的容量:柱面容量*柱面數=63*255*512B*1023

LBA(logical block addressing)邏輯塊地址

區位記錄磁盤扇區結構 :ZBR(Zoned Bit Recording)所有磁道物理存儲單元面積相同,如此導致一個現象外圈磁道的扇區多於內圈的扇區數,磁盤轉一圈讀取的容量肯定比內圈多,所以外圈的讀取效率高於內圈,柱面由外向內編號,基於這個理論在系統性能優化方面,可以考慮將頻繁讀寫的數據存儲在磁盤的外層柱面,分區號較小的的分區內。

LBA是一個整數,通過轉換成CHS格式完成磁盤具體尋址,即:不再侷限於CHS三維尋址方式,而是將整個磁盤規定有多少個扇區,每個扇區容量爲512Byte.ATA-1規範中定義了28位尋址模式,以每扇區512位組來計算,ATA-1所定 義的28位LBA上限達到128 GiB。2002年ATA-6規範採用48位LBA,同樣以 每扇區512位組計算容量上限可達128 Petabytes

CHS以柱面爲單位劃分分區,LBA則以扇區爲單位劃分分區
由於CHS尋址方式的尋址空間在大概8GB以內,所以在磁盤容量小於大概8GB 時,可以使用CHS尋址方式或是LBA尋址方式;在磁盤容量大於大概8GB時,則 只能使用LBA尋址方式

磁盤初始化過程

一塊磁盤從被系統掃描正常識別到能夠被系統用來存儲數據共分三步:分區、格式化、掛載,本文將以這三個步驟來梳理Linux系統中磁盤管理相關的命令。

一、磁盤分區

磁盤分區有MBR和GPT兩種,在實際生產中要做好磁盤存儲分區,一定要理解這兩種分區的存儲原理,及各自的功能特性。

1.MBR分區

MBR全稱Master Boot Record主引導記錄,主要用於加載操作系統、定義磁盤如何分區,存儲在在磁盤的0柱面1扇區(以前是0道、0面、1扇區),對於機械硬盤而言,每次斷電停止工作磁頭都會回到磁盤最外圈的停泊塢,磁盤加電後機械手會引導磁頭到第1號扇區讀取主引導記錄。

MBR由主引導程序、出錯信息數據區、分區表、結束標記四部分組成:

主引導程序: 用於引導計算機找到操作系統引導文件所在的分區。與出錯信息數據區共佔446個字節,出錯信息數據區:不知道是做什麼的。

分區表: 記錄整個磁盤的分區結構,共佔64字節,每個分區表項佔16字節,所以MBR磁盤最多只能有4個主分區。如果想用更多分區則需要採用擴展分區,就變爲3主+1擴展。

結束標記: 如果該值爲55AA,則表示該磁盤有分區,否則系統無法識別磁盤的分區。

MBR的主要特點:
最多隻有支持4個主分區
最大支持2TB磁盤

GPT分區特點:
1.UEFI引導方式支持GPT分區引導,具說引導速度更快。
2.最多支持128個分區
3.支持更大容量的磁盤
GPT分區表:

2.分區工具:

fdisk:用於mbr磁盤分區,也支持gpt磁盤但還處於實驗階段,分區後需並未同步到內存,所以需要同步分區信息到內存

gdisk:用於gpt磁盤分區,分區後需並未同步到內存,所以需要同步分區信息到內存

gdisk、fdisk分區工具操作流程:
1.fdisk /dev/sda 指定要分區的磁盤進入分區交互界面
2.進入界面後可以按m或help查看幫助
3.分區流程:
    n創建分區
    p/e指定分區類型
    1-4指定分區編號
    指定分區起始位置
    指定分區大小
4.查看分區按p鍵查看分區表
5.刪除分區按d鍵,輸入分區號
6.分區操作完成後按w鍵保存即出

parted:兩種磁盤都可以,支持命令行和菜單兩種模式,但操作後實時生效沒有後悔的機會,所有要小心慎用!

parted語法: parted 設備號 操作命令 操作參數
例1:設置磁盤類型標識
    parted /dev/sdb mklable {gtp|msdos} //msdos就是mbr磁盤
例2:創建一個10G的分區,分區編號爲1
    parted /dev/sdb mkpart 1 10G //1是分區編號,10G是分區大小
例3:查看分區信息
    parted /dev/sdb print
例4:刪除分區
    parted /dev/sdb rm 1 // 1爲分區編號
例5:查看分區信息
    parted -l

3.分區表同步:

查看內核是否已經識別新的分區
cat /proc/partations或lsblk查看

centos6通知內核重新讀取硬盤分區表

新增分區用partx -a /dev/DEVICE 或kpartx -a /dev/DEVICE -f: force  
刪除分區用partx -d --nr M-N /dev/DEVICE

CentOS 5,7: 使用partprobe

partprobe [/dev/DEVICE] 

二、分區格式化

對分區格式化就是創建文件系統,規定數據如何存儲,文件管理具備什麼功能屬性都是由文件系統決定的。例如:ext2文件系統沒有日誌功能,如果啓用日誌功能就是ext3。
文件系統都具有哪些詳細的功能和特性可以參考:
https://en.wikipedia.org/wiki/Comparison_of_file_systems

也可以使用man 5 fs查看Linux系統自帶的手冊。

查看系統支持的文件系統:ls /lib/modules/uname -r/kernel/fs

mkfs命令:

Linux中想創建哪種類型的文件系統就在哪種類型前加mkfs,可以輸出mkfs後,快速連擊兩個TAB鍵這樣就可以看文件系統創建命令的了。還可以利用mkfs的-t選項指定要創建的文件系統類型

例1:創建ext4文件系統
mkfs.ext4 /dev/sdb1

例2:mkfs -t指定文件系統類型
mkfs -t ext4 /dev/sdb1

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 -t ext4 -b 1024 -L "webs" /dev/nvme0n5p1

tune2fs:重新設定ext系列文件系統可調整參數的值

-l 查看指定文件系統超級塊信息;super block
-L 'LABEL’ 修改卷標 
-m # 修預留給管理員的空間百分比 
-j 將ext2升級爲ext3 
-O 文件系統屬性啓用或禁用, –O ^has_journal
-o 調整文件系統的默認掛載選項,–o ^acl 
-U UUID 修改UUID號 

dumpe2fs:顯示ext文件系統信息,將磁盤塊分組管理

-h:查看超級塊信息,不顯示分組信息

xfs_info:顯示已掛載的 xfs 文件系統信息

文件系統檢測和修復

服務器非正常關機,業務進程掛死非正常結束、集羣磁盤掛載方式不對都有導致文件系統異常,掛載爲文件系統標記爲“no clean”,文件無法正常訪問此時就需要修復文件系統。

文件系統修復工具:

fsck 該工具會自動識別分區的文件系統類型,如果ext系列就會調用e2fsck,如果xfs文件系統則會調用xfs_repair。與mkfs一樣fsck也提供兩種同樣風格的命令行:使用文件修復工具一定要用正確認的文件系統修復工具

fsck.文件系統類型 設備標識

fsck -t 文件系統類型 設備標識

命令選項:

-a 自動修復 
-r 交互式修復錯誤

e2fsck:ext系列文件專用的檢測修復工具

-y 自動回答爲yes
-f 強制修復 
-p 自動進行安全的修復文件系統問題

xfs_repair:xfs文件系統專用檢測修復工具

-f 修復文件,而設備
-n 只檢查 
-d 允許修復只讀的掛載設備,在單用戶下修復 / 時使用,然後立即reboot

謹記:

1.文件系統修復操作一定不要在分區掛載狀態下進行,否則會造成二次傷害。
2.使用文件修復工具一定要用正確認的文件系統修復工具

三、分區掛載

磁盤經過分區、格式化後,只需要指定一個訪問入口就可以啦,這個過程就是系統掛載分區。Linux系統提供了分區掛載管理工具mount命令,mount命令選項不少,只需要記住幾個常用的功能選項即可,其它的選項用的時候查一下手冊就可以了,沒必要浪費無意義的時間,所以這一小節也只是記錄常用的選項。

mount命令語法:

mount 設備標識 掛載點

掛載常用選項

mount -l 查看已掛載設備列表,可以結合 grep過濾查看指定設備的掛載點。與mount -v效果一樣沒什麼區別
mount -a 加載/etc/fstab文件,沒有掛載的條目會自動掛載。
mount -o 指定掛載功能選項,各功能選項之間用逗號分隔。
mount -r 以只讀方式掛載,相當於mount -o ro
mount -r 以讀寫方式掛載,相當於mount-o rw
mount -t 指定待掛載設備的文件系統類型,如果不知道目標設備是什麼文件系統就別用這個選項
mount -L 以卷標爲設備標識掛載
mount -U 以UUID爲設備標識掛載
mount -B 目錄掛載目錄,也就是將一個目錄綁定到另一個目錄,便於統一管理。

實例技巧1:
新增加一塊磁盤共分三個區,分別以UUID和LABLE方式掛載分區,以下是掛載流程
1.lsblk -f 查看磁盤分區情況

-U 使用UUID掛載分區
mount -U 06e1ba7d-6b6f-4c07-9375-5864019bf2bd /mnt/mysql/
-L 使用分區label掛載
mount -L /dbs/oracle /mnt/oracle/
-B 將目錄掛載到目錄。
mount -B /mnt/mysql/ /data/dbs/

實例技巧2:
查詢系統已掛載的設備的方法

1.lsblk -f查詢指定磁盤所有分區的掛載情況
例:lsblk -f /dev/nvme0n2
2.查看/etc/mtab Centos6是一個單獨的文件,Centos7以後mtab是一個軟鏈接指向/proc/self/mounts
例:cat /etc/mtab /proc/self/mounts /proc/self/mountstats
3.mount -l 與grep結合過濾
例:mount -l |grep mysql
4.findmnt 指定設備文件或掛載點
    findmnt /dev/nvme0n2p1 指定設備可以查找到所有的掛載點
    findmnt /mnt/mysql 基於掛載點查詢設備

實例技巧3:
卸載已掛載的設備,查看正在訪問指定文件系統的進程,找到後視情況結束進程。

1.lsof指定掛載點
例:lsof /mnt/mysql
2.fuser -v 指定掛載點
例:fuser -v /mnt/mysql
3.fuser -km 指定掛載點
例:fuser -km /mnt/mysql
4.umount 提定設備或掛載點即可卸載
例:umount /mnt/mysql

掛載常用功能選項

mount -o 後可以跟很多功能選項,如果需要同時啓用多個功能則用逗號分割即可。

async  異步模式  sync 同步模式,內存更改時,同時寫磁盤.
atime/noatime  包含目錄和文件
diratime/nodiratime 目錄的訪問時間戳
auto/noauto  是否支持自動掛載,是否支持-a選項
exec/noexec  是否支持將文件系統上運行應用程序
dev/nodev  是否支持在此文件系統上使用設備文件
suid/nosuid  是否支持suid和sgid權限
remount  重新掛載
ro 只讀
rw 讀寫
user/nouser  是否允許普通用戶掛載此設備, /etc/fstab使用  
acl   啓用此文件系統上的acl功能
loop  使用loop設備
defaults:相當於rw, suid, dev, exec, auto, nouser, async

fstab文件解析

mount命令可以管理當前系統下的設備掛載,但不能保存,系統重啓後會消失,如果想永久保存掛載則需要寫到配置文件中,/etc/fstab文件就是系統設備掛載的配置文件,該文件共有6個字段組成,6個字段缺一不可,配置錯了更不行系統重啓會罷工的!

1、要掛載的設備或僞文件系統
    設備文件:LABEL:LABEL=""  或UUID:UUID=""
    僞文件系統名稱:proc, sysfs
2、掛載點 swap類型設備掛載點就是swap,其它類型基本上都有目錄。
3、文件系統類型:ext4,xfs,iso9660,nfs,none
4、掛載選項:defaults ,acl,bind
5、轉儲頻率:0:不做備份 1:每天備份 2:每隔一天備份
6、fsck檢查的文件系統的順序:允許的數字是0 1 2   
    0:不自檢 
    1:首先自檢;一般只有rootfs才用   
    2:非rootfs使用 

swap分區管理

Linux中的swap分區就是虛似內存,與Windows下的虛似內存原理差不多,只不過Windows下虛似內存被映射成了文件pagefile.sys,Linux系統同樣提供了swap管理工具。

swap是爲臨時性的補充內存不足,當然是性能越快越好,建議將磁盤中分區號較小(即:磁盤最外圈)的分區作爲swap分區,如果沒有獨立分區可用也可以用swap格式的文件來代替。

swapon 激活Linux中swap分區

語法:swapon [選項][設備標識]
swapon什麼參數都不加,則顯示所有swap設備列表簡要信息
swapon /dev/dev/nvme0n2p1 開啓指定設備
swapon -a 激活/etc/fstab文件中定義的所有swap設備
swapon -s 顯示交換分區的使用情況,實際就是cat /proc/swaps的信息
swapon -p 激活swap類型設備前可以用-p指定優先級
技巧:輸入swapon 按兩下tab鍵會列表系統中所有可用的swap類型分區。

swapoff 關閉swa分區

swapoff什麼參數都不加,則卸載所有swap設備
swapoff -a卸載所有swap分區
swapoff /dev/dev/nvme0n2p1 關閉指定swap設備

SWAP的優先級

1.可以指定swap分區0到32767的優先級,值越大優先級越高
2.如果用戶沒有指定,那麼核心會自動給swap指定一個優先級,這個優先級從 -1開始,每加入一個新的沒有用戶指定優先級的swap,會給這個優先級減一
3.先添加的swap的缺省優先級比較高,除非用戶自己指定一個優先級,而用戶 指定的優先級(是正數)永遠高於核心缺省指定的優先級(是負數) 
4.優化性能:分佈存放,高性能磁盤存放

SWAP設備如果想永久升效同樣需要寫入/etc/fstab文件中

在/etc/fstab文件中建議用UUID掛載,但文件擴展的不要使用UUID

技巧:查詢swap設備標籤,然後寫入到fstab文件中
swaplabel /dev/nvme0n2p1

案例一:以獨立分區擴展swap

1.修改分區類型爲Linux swap分區
使用fdisk工具 t鍵設備分區類型
2.將分區格式化成swap分區
mkswap /dev/nvme0n2p1
3.激活swap分區,可以用-p選項指定優先級,值越大優先級越高
swapon -p 10 /dev/nvme0n2p1
4.查看新擴展的swap是否生效
swapon -s 或cat /proc/swaps

案例二:以文件擴展swap
1.生成文件
dd if=/dev/zero of=/data/swap.img bs=1M count=100
2.在文件之上建立swap文件系統系統
mkswap /data/swap.img
3.激活swap文件
swapon -p 5 /data/swap1.img
4.查看新擴展的swap是否生效
swapon -s 或cat /proc/swaps

五、實工具

1.製作光盤映像

創建ISO文件

cp /dev/cdrom  /root/centos.iso  
mkisofs  -r  -o  /root/etc.iso /etc

刻錄光盤

wodim –v –eject centos.iso 

2.工具dd

語法:dd if=/PATH/FROM/SRC of=/PATH/TO/DEST bs=# count=#
if=file 從所命名文件讀取而不是從標準輸入
of=file 寫到所命名的文件而不是到標準輸出
ibs=size 一次讀size個byte
obs=size 一次寫size個byte
bs=size block size, 指定塊大小(既是是ibs也是obs)
cbs=size 一次轉化size個byte
skip=blocks 從開頭忽略blocks個ibs大小的塊
seek=blocks 從開頭忽略blocks個obs大小的塊
count=n 複製n個bs

conv=conversion[,conversion...] 用指定的參數轉換文件
轉換參數:
ascii 轉換 EBCDIC 爲 ASCII
ebcdic 轉換 ASCII 爲 EBCDIC
lcase 把大寫字符轉換爲小寫字符
ucase 把小寫字符轉換爲大寫字符
nocreat 不創建輸出文件
noerror 出錯時不停止
notrunc 不截短輸出文件
sync 把每個輸入塊填充到ibs個字節,不足部分用空(NUL)字符補齊
fdatasync 寫完成前,物理寫入輸出文件

3.dd工具實例

dd操作MBR

1.備份MBR
dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1 
2.破壞MBR中的bootloader
dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446 

dd備份與還原操作

1.磁盤克隆
dd if=/dev/sda of=/dev/sdb
2.磁盤克隆到鏡像文件
dd if=/dev/sda of=/path/to/img
3.從鏡像文件還原到磁盤
dd if=/path/to/img of=/dev/sdx
4.dd讀取磁盤管道輸出給gzip,並重定向到img文件,實現磁盤克隆並壓縮
dd if=/dev/sdx | gzip >/path/to/img.gz
5.將壓縮的備份文件恢復到指定盤 
gzip -dc /path/to/img.gz | dd of=/dev/sdx

dd信息安全相關

1.讀取內存資料到硬盤 用於安全響應取證 必要時遠程dd克隆磁盤防止數據污染
dd if=/dev/mem of=/root/mem.bin bs=1024
2.從光盤拷貝iso鏡像
dd if=/dev/cdrom of=/root/cdrom.iso
3.銷燬磁盤數據
dd if=/dev/urandom of=/dev/sda1 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章