LinuxDay12——磁盤存儲和文件系統
一、硬盤簡介
機械硬盤(HDD):Hard Disk Drive,即是傳統普通硬盤,主要由:盤片,磁頭,盤片轉軸及控制電機,磁頭控制器,數據轉換器,接口,緩存等幾個部分組成。機械硬盤中所有的盤片都裝在一個旋轉軸上,每張盤片之間是平行的,在每個盤片的存儲面上有一個磁頭,磁頭與盤片之間的距離比頭發絲的直徑還小,所有的磁頭聯在一個磁頭控制器上,由磁頭控制器負責各個磁頭的運動。磁頭可沿盤片的半徑方向運動,加上盤片每分鐘幾千轉的高速旋轉,磁頭就可以定位在盤片的指定位置上進行數據的讀寫操作。數據通過磁頭由電磁流來改變極性方式被電磁流寫到磁盤上,也可以通過相反方式讀取。硬盤為精密設備,進入硬盤的空氣必須過濾
固態硬盤(SSD):Solid State Drive,用固態電子存儲芯片陣列而制成的硬盤,由控制單元和存儲單元(FLASH芯片、DRAM芯片)組成。固態硬盤在接口的規範和定義、功能及使用方法上與普通硬盤的完全相同,在產品外形和尺寸上也與普通硬盤一致
相較於HDD,SSD在防震抗摔、傳輸速率、功耗、重量、噪音上有明顯優勢,SSD傳輸速率性能是HDD的2倍
相較於SSD,HDD在價格、容量、使用壽命上占有絕對優勢
1、硬盤存儲術語
sector 扇區:在硬盤上每個磁道上的扇區用6bit標識,每個磁道最多標識64個扇區,每個扇區512byte
track 磁道:磁道數等於磁頭數,理論上256個
head 磁頭 :在硬盤上磁頭用8bit標識,最多標識256個磁頭
cylinder 柱面 :在硬盤柱面用10bit標識,最多標識1024個柱面
磁盤容量計算方式:扇區大小*64*256*1024=8589934592=8G
因此早期的硬盤無法突破8G容量
以上這種方式會浪費很多磁盤空間 (與軟盤一樣). 為了解決這一問題, 進一步提高硬盤容量, 人們改用等密度結構生產硬盤.也就是說,外圈磁道的扇區比內圈磁道多. 采用這種結構後, 硬盤不再具有實際的3D參數, 尋址方式也改為線性尋址,即以扇區為單位進行尋址。
二、硬盤分區
磁盤分區是使用分區編輯器(partition editor)在磁盤上劃分幾個邏輯部分,盤片一旦劃分成數個分區,不同類的目錄與文件可以存儲進不同的分區。越多分區,也就有更多不同的地方,可以將文件的性質區分得更細,按照更為細分的性質,存儲在不同的地方以管理文件;但太多分區就成了麻煩。空間管理、訪問許可與目錄搜索的方式,依屬於安裝在分區上的文件系統。當改變大小的能力依屬於安裝在分區上的文件系統時,需要謹慎地考慮分區的大小。
1、硬盤為什要分區
- 優化I/O性能
- 實現磁盤空間配額限
- 提高修復速度
- 隔離系統和程序
- 安裝多個OS
- 采用不同文件系統
2、分區表類型(MBR和GPT)
MBR: Master Boot Record 主引導記錄
又叫做主引導扇區,是計算機開機後訪問硬盤時所必須要讀取的首個扇區,它在硬盤上的三維地址為(柱面,磁頭,扇區)=(0,0,1)。在深入討論主引導扇區內部結構的時候,有時也將其開頭的446字節內容特指為“主引導記錄”(MBR),其後是4個16字節的“磁盤分區表”(DPT),以及2字節的結束標誌(55AA)。因此,在使用“主引導記錄”(MBR)這個術語的時候,需要根據具體情況判斷其到底是指整個主引導扇區,還是主引導扇區的前446字節。
mbr分區用4個字節存儲分區的總扇區數,最大能表示2的32次方的扇區個數,按每扇區512字節計算(2^32*512byte=2199023255552byte=2T),所以mbr無法識別大於2T以後的空間
0磁道0扇區:512bytes
446bytes:boot loader
64bytes:分區表,16bytes標識一個分區,支持4個分區,或者3個主分區和一個擴展分區
2bytes:分區標示位 55AA
MBR分區結構:
GPT: Globals Unique Identifiers
是一個實體硬盤的分區表的結構布局的標準。它是可擴展固件接口(EFI)標準(被Intel用於替代個人計算機的BIOS)的一部分,被用於替代BIOS系統中的一32bits來存儲邏輯塊地址和大小信息的主引導記錄(MBR)分區表。對於那些扇區為512字節的磁盤,MBR分區表不支持容量大於2.2TB(2.2×1012字節)[1]的分區,然而,一些硬盤制造商(諸如希捷和西部數據)註意到這個局限性,並且將他們的容量較大的磁盤升級到4KB的扇區,這意味著MBR的有效容量上限提升到16 TiB。 這個看似“正確的”解決方案,在臨時地降低人們對改進磁盤分配表的需求的同時,也給市場帶來關於在有較大的塊(block)的設備上從BIOS啟動時,如何最佳的劃分磁盤分區的困惑。GPT分配64bits給邏輯塊地址,因而使得最大分區大小在264-1個扇區成為可能。對於每個扇區大小為512字節的磁盤,那意味著可以有9.4ZB(9.4×1021字節)或8 ZiB個512字節(9,444,732,965,739,290,426,880字節或18,446,744,073,709,551,615(264-1)個扇區×512(29)字節每扇區)
GPT支持128個分區,使用64位表示扇區,如果每個扇區是512Byte,理論上則支持8Z的磁盤。
使用128位UUID(Universally Unique Identifier) 表示磁盤和分區 GPT分區表
自動備份在頭和尾兩份,並有CRC校驗位
UEFI (統一擴展固件接口)硬件支持GPT,使操作系統啟動
gpt分區結構:
3、LINUX中的分區管理
LINUX中硬盤及分區工具的標識
在早期系統中硬盤的標識區分接口,比如IED接口的硬盤在/dev/以hd[a-z]標識,新系統中都以sd[a-z]來標識,不區分接口了
分區由數字來標識,比如硬盤是sda,那此硬盤的第一個分區為sda1,第二個為sda2,依次類推
在LINUX中一切皆文件,設備是以文件的方式標識,設備有主設備號和次設備號,主設備號表示不同類型的設備,次設備號表示同類設備的不同設備
LINUX中管理分區的工具
fdisk /dev/DISK
-l:列出分區信息
-c:使用非柱面模式
交互式:
p:打印當前分區表
m:幫助
n:添加新分區
d:刪除分區
w:保存退出
l:列出分區類型
t:修改分區類型
q 不保存並退出
gdisk:用來管理gpt分區,用法和fdisk相似
parted /dev/DISK
mklabel {gpt|msdos} 設置硬盤的分區表類型,也可以進入交互式模式
-l:列出分區信息
交互式
partprobe 同步分區表,但在紅帽系列6.x上有bug
partx
-a /dev/sda 同步分區表(6.x),在增加分區出現不同步時使用
-d --nr m-n /dev/sda 同步分區表(6.x),在刪除分區出現不同步時使用
lsblk 查看內存現在生效的分區表
三、文件系統
文件系統是操作系統用於明確存儲設備(常見的是磁盤,也有基於NAND Flash的固態硬盤)或分區上的文件的方法和數據結構;即在存儲設備上組織文件的方法。操作系統中負責管理和存儲文件信息的軟件機構稱為文件管理系統,簡稱文件系統。文件系統由三部分組成:文件系統的接口,對對象操縱和管理的軟件集合,對象及屬性。從系統角度來看,文件系統是對文件存儲設備的空間進行組織和分配,負責文件存儲並對存入的文件進行保護和檢索的系統。具體地說,它負責為用戶建立文件,存入、讀出、修改、轉儲文件,控制文件的存取,當用戶不再使用時撤銷文件等。
Linux文件系統:ext2(Extended file system), ext3, ext4, xfs(SGI), btrfs(Oracle), reiserfs, jfs(AIX), swap
光盤:iso9660
Windows:FAT32, exFAT,NTFS
Unix: FFS(fast), UFS(unix), JFS2
網絡文件系統:NFS, CIFS
集群文件系統:GFS2, OCFS2(oracle)
分布式文件系統: fastdfs,ceph, moosefs, mogilefs, glusterfs, Lustre
RAW:未經處理或者未經格式化產生的文件系統
Linux的虛擬文件系統:VFS
由於底層文件系統類型太多,從而導致程序調用復雜,從而有VFS來作為一個統一接口,充當中間人的角色
super block 和 inode table 的關系
1、文件系統管理工具
mkfs.{ext4|ext3|xfs|...} 格式化指定設備分區
-t FSTYPE:格式化指定設備分區
-L:設定卷標
-b:塊大小
-t:分區類型
-m #:預留%
-i:為多少個字節創建一個節點號
-N:指定節點號
findfs LABEL=<label>|UUID=<uuid>:查找分區
blkid:查看分區屬性信息
-U UUID
-L LABEL
fsck: 文件系統檢查,FS_TYPE一定要與分區上已經文件類型相同,修復時分區一定要在非掛載狀態
fsck.FS_TYPE
fsck -t FS_TYPE
-p: 自動修復錯誤
-r: 交互式修復錯誤
-y:自動回答為yes
-f:強制修復
xfs_info:查看xfs文件系統的信息
2、創建ext文件系統
mke2fs:ext系列文件系統專用管理工具
-t{ext2|ext3}
-b{1024|2048|4096}
-L LABEL
-j相當於-t
-i為數據空間創建一個inode
-N指定分區中的inode號
-l一個inode急速占用的裁判空間大小
-m
-O feature啟用特性
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:重新設定ext系列文件系統可調整參數的值
-l:查看指定文件系統超級塊信息;super block
-L ‘LABEL‘:修改卷標
-m #:修預留給管理員的空間百分比
-j: 將ext2升級為ext3
-O: 文件系統屬性啟用或禁用,–O ^has_journal
-o: 調整文件系統的默認掛載選項,–o ^acl
-U UUID: 修改UUID號
dumpe2fs:
塊分組管理,32768塊
-h:查看超級塊信息,不顯示分組信息
掛載為文件系統標記為“no clean”
註意:一定不要在掛載狀態下修復
fsck: File System Check
fsck.FS_TYPE
fsck -t FS_TYPE
-p: 自動修復錯誤
-r: 交互式修復錯誤
FS_TYPE一定要與分區上已經文件類型相同
e2fsck:ext系列文件專用的檢測修復工具
-y:自動回答為yes
-f:強制修復
一個文件夾只能掛載一個設備(只生效一個)
一個設備可以掛載多個文件夾
空文件夾充當掛載點
fedre ubanti
3、設備掛載工具
mount
用法:mount 設備 掛載點
LABEL=卷標名 掛載點
UUID=‘xxxxxx’ 掛載點
-r 只讀方式掛載
-w 讀寫掛載,默認
-n 不更新/etc/mtab
-t 指定文件系統,一般不用,系統可以自動識別
-a 自動掛載/etc/fstab中的設備
-B | --bind 目錄掛載到目錄
-o:選項
acl:啟用acl
noacl:關閉acl
remount:重新掛載
ro:只讀
async:異步模式
sync:同步模式
loop:可以掛載文件,loop設備
atime/noatime:包含目錄和文件
diratime/nodiratime:目錄的訪問時間戳
auto/noauto:是否支持自動掛載,是否支持-a選項
exec/noexec:是否支持將文件系統上運行應用程序
dev/nodev:是否支持在此文件系統上使用設備文件
suid/nosuid:是否支持suid和sgid權限
user/nouser:是否允許普通用戶掛載此設備,/etc/fstab使用
defaults:相當於rw, suid, dev, exec, auto, nouser, async
umount {設備名|掛載點} 卸載設備
fuser
-v /dev/sda1 查看設備誰在用
-km /dev/sda1殺掉使用設備的進程
lsof /dev/sda1 查看設備那個進程在用
findmnt 查找某個文件夾是否處於掛載狀態
losetup -a 查看當前掛載的loop設備
losetup /dev/loop# loopfile 綁定文件到loop設備
4、內存及swap管理工具
free 查看內存和swap的信息
-m 以M為單位顯示
-g 以G為單位顯示
-h 以人類可以看懂的方式顯示
mkswap /dev/sdb1 -L swap_sdb1 格式化
swapon DEV|LOOPFILE 激活swap分區
-s 查看當前的swap信息
-a 激活fstab表中配置的swap
swapoff 禁用swap分區
5、其他塊設備操作工具
eject 彈出光驅
-t 彈入光驅
cp /dev/sr0 /data/centos7.iso 將光盤制作成iso文件
dd if=/dev/sr0 of=/data/centos7.iso 將光盤制作成iso文件
mkisofs -r -o etc.iso /etc/ 將目錄打包成iso文件,但不能引導
mkdvdiso.sh source /destination/DVD.iso 制作引導光盤
wodim –v –eject centos.iso 刻錄光盤
lsusb 查看UBS
6、df、du和dd
df 顯示以掛載的設備信息
-h:以人類可以看懂的方式顯示
-H:以1000為單位顯示分區大小
-T:顯示文件系統
-i:顯示節點號
-P:以標準格式顯示
du 顯示目錄大小
-h 以人類可以看懂的方式顯示
-s 只查看目錄
--max-depth # 查看子目錄深度
dd 轉換和復制文件
of=file 輸出
if=file 讀入
bs=size 每次字節大小
ibs=size 每次讀入大小
obs=size 每次讀出大小
cbs=size
skip=blocks 源跳過
seek=blocks 目標跳過
count=#
conv 用以下指定的參數轉換文件
ascii 轉換 EBCDIC 為 ASCII
ebcdic 轉換 ASCII 為 EBCDIC
lcase 把大寫字符轉換為小寫字符
ucase 把小寫字符轉換為大寫字符
nocreat 不創建輸出文件
noerror 出錯時不停止
notrunc 不截短輸出文件
sync 把每個輸入塊填充到ibs個字節,不足部分用空(NUL)字符補齊
拷貝內存資料到硬盤
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將無法掛載,創建和拷貝操作無法執行
測試硬盤寫速度
dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
測試硬盤讀速度
dd if=/root/1Gb.file bs=64k | dd of=/dev/null
修復硬盤
dd if=/dev/sda of=/dev/sda
當硬盤較長時間(比如1,2年)放置不使用後,磁盤上會產生消磁點。當磁頭讀到這些區域時會遇到困難,並可能導致I/O錯誤。當這種情況影響到硬盤的第一個扇區時,可能導致硬盤報廢。上邊的命令有可能使這些數據起死回生,且這個過程是安全高效的
四、raid磁盤列陣
獨立硬盤冗余陣列(RAID,Redundant Array of Independent Disks),簡稱磁盤列陣。其基本思想就是把相對多個相對便宜的硬盤組合起來,成為一個硬盤在陣列組,使性能達到甚至超過一個價格昂貴、容量巨大的硬盤。根據選擇的版本不同,RAID比單顆硬盤有以下一個或多個方面的好處:增強數據集成度,增強容錯功能,增加處理量或容量。另外,磁盤陣列對於電腦來說,看起來就像一個單獨的硬盤或邏輯存儲單元。分為RAID-0,RAID-1,RAID-1E,RAID-5,RAID-6,RAID-7,RAID-10,RAID-50,RAID-60。
1、標準RAID
RAID 0
RAID 0亦稱為帶區集。它將兩個以上的磁盤並聯起來,成為一個大容量的磁盤。在存放數據時,分段後分散存儲在這些磁盤中,因為讀寫時都可以並行處理,所以在所有的級別中,RAID 0的速度是最快的。但是RAID 0既沒有冗余功能,也不具備容錯能力,如果一個磁盤(物理)損壞,所有數據都會丟失,危險程度與JBOD相當。
RAID 1
兩組以上的N個磁盤相互作鏡像,在一些多線程操作系統中能有很好的讀取速度,理論上讀取速度等於硬盤數量的倍數,與RAID 0相同。另外寫入速度有微小的降低。只要一個磁盤正常即可維持運作,可靠性最高。其原理為在主硬盤上存放數據的同時也在鏡像硬盤上寫一樣的數據。當主硬盤(物理)損壞時,鏡像硬盤則代替主硬盤的工作。因為有鏡像硬盤做數據備份,所以RAID 1的數據安全性在所有的RAID級別上來說是最好的。但無論用多少磁盤做RAID 1,僅算一個磁盤的容量,是所有RAID中磁盤利用率最低的一個級別。
如果用兩個不同大小的磁盤建RAID 1,可用空間為較小的那個磁盤,較大的磁盤多出來的空間也可以分區成一個區來使用,不會造成浪費。
RAID 5
RAID Level 5是一種儲存性能、數據安全和存儲成本兼顧的存儲解決方案。它使用的是Disk Striping(硬盤分區)技術。RAID 5至少需要三塊硬盤,RAID 5不是對存儲的數據進行備份,而是把數據和相對應的奇偶校驗信息存儲到組成RAID5的各個磁盤上,並且奇偶校驗信息和相對應的數據分別存儲於不同的磁盤上。當RAID5的一個磁盤數據發生損壞後,可以利用剩下的數據和相應的奇偶校驗信息去恢復被損壞的數據。RAID 5可以理解為是RAID 0和RAID 1的折衷方案。RAID 5可以為系統提供數據安全保障,但保障程度要比鏡像低而磁盤空間利用率要比鏡像高。RAID 5具有和RAID 0相近似的數據讀取速度,只是因為多了一個奇偶校驗信息,寫入數據的速度相對單獨寫入一塊硬盤的速度略慢,若使用“回寫緩存”可以讓性能改善不少。同時由於多個數據對應一個奇偶校驗信息,RAID 5的磁盤空間利用率要比RAID 1高,存儲成本相對較便宜。
RAID 6
與RAID 5相比,RAID 6增加第二個獨立的奇偶校驗信息塊。兩個獨立的奇偶系統使用不同的算法,數據的可靠性非常高,任意兩塊磁盤同時失效時不會影響數據完整性。RAID 6需要分配給奇偶校驗信息更大的磁盤空間和額外的校驗計算,相對於RAID 5有更大的IO操作量和計算量,其“寫性能”強烈取決於具體的實現方案,因此RAID6通常不會通過軟件方式來實現,而更可能通過硬件/固件方式實現。
同一數組中最多容許兩個磁盤損壞。更換新磁盤後,數據將會重新算出並寫入新的磁盤中。依照設計理論,RAID 6必須具備四個以上的磁盤才能生效。
RAID 6在硬件磁盤陣列卡的功能中,也是最常見的磁盤陣列檔次。
2、混合RAID
JBOD
JBOD( Just a Bunch Of Disks)在分類上,JBOD並不是RAID的檔次。
RAID 10/01
RAID 10是先鏡射再分區數據,再將所有硬盤分為兩組,視為是RAID 0的最低組合,然後將這兩組各自視為RAID 1運作。
RAID 01則是跟RAID 10的程序相反,是先分區再將數據鏡射到兩組硬盤。它將所有的硬盤分為兩組,變成RAID 1的最低組合,而將兩組硬盤各自視為RAID 0運作。
當RAID 10有一個硬盤受損,其余硬盤會繼續運作。RAID 01只要有一個硬盤受損,同組RAID 0的所有硬盤都會停止運作,只剩下其他組的硬盤運作,可靠性較低。如果以六個硬盤建RAID 01,鏡射再用三個建RAID 0,那麽壞一個硬盤便會有三個硬盤離線。因此,RAID 10遠較RAID 01常用。
3、模式化的工具
mdadm[mode] <raiddevice> [options] <component-devices>
支持的RAID級別:LINEAR, RAID0, RAID1, RAID4, RAID5, RAID6, RAID10
Llinux中分區類型:fd
示例:mdadm -C /dev/md# -a yes -l 5 -c 32 -n 3 -x1 /dev/sd# 利用軟件創建一個軟raid5
-C:創建
-a:檢查
-l:raid級別
-c:thunk大小,默認512K
-n:硬盤成員
-x:備用硬盤
mdadm -D /dev/md# 查看raid狀態
mdadm -Ds /dev/md# > /etc/mdadm.conf 生成配置文件,下次開機自動生效
mdadm -S /dev/md# 停用raid設備
mdadm -A /dev/md# 激活raid設備
mdadm /dev/md# -f /dev/sd# 模擬硬盤損壞
mdadm /dev/md# -r /dev/sd# 手動移除硬盤
mdadm /dev/md# -a /dev/sd# 手動添新硬盤
-D:查看,cat /proc/mdstat 也可查看raid信息
-Ds:生成配置文件,保存到/etc/mdadm.conf
-S:停用
-A:激活
-f:標記硬盤損壞
-r:移除硬盤
-a:添加硬盤
mdadm -G /dev/md# -n4 -a /dev/sd# 擴展raid
-G:擴展raid
mdadm --zero-superblock /dev/sd# 刪除已移除硬盤的superblock,避免再次使用的影響
五、邏輯卷管理器LVM
1、LVM
邏輯卷管理器(英語:Logical Volume Manager,縮寫為LVM),又譯為邏輯卷宗管理器、邏輯扇區管理器、邏輯磁盤管理器,是Linux核心所提供的邏輯卷管理(Logical volume management)功能。它在硬盤的硬盤分區之上,又創建一個邏輯層,以方便系統管理硬盤分區系統。
Linux中的分區類型:8e
PV(Physical Volume) 物理卷
VG(Volume Group) 卷組
LV(Logical Volume) 邏輯分區
PE(Physical Extent) 物理範圍。VG中的最小單元,類似於RAID的chunk大小。
Linux中的設備路徑:
/dev/mapper/vg0-lv0
/dev/vg0/lv0
/dev/dm-0
2、lvm管理工具:
pvs:查看pv信息
pvscan:查看pv信息
pvdisplay:查看pv信息
pvcreate:創建pv
vgs:查看vg信息
vgscan:查看vg信息
vgdisplay:查看vg信息
vgcreate -s 16M vgname /dev/sd# 創建vg
-s:指定PE大小
lvs:查看lv信息
lvscan:查看lv信息
lvdisplay:查看lv信息
lvcreate -n lvname {-L #G|-l #|} vgname 創建lv
-n:指定lv的名字
-L #(G|M):指定lv大小
-l #%FREE | -l #(PE):指定lv大小
vgrename OLDvgname NEWvgname 重命名vg
lvrename /dev/vgname/OLDlvname /dev/vgname/NEWlvname 重命名lv
3、LVM的快照:
lvcreate -n lvname-snapshot -s -L 1G -p r /dev/vgname/lvname 創建快照
-s:快照功能
-p r:快照只讀屬性
lvconvert --merge /dev/vgname/lvname-snapshot 恢復快照
lvremove /dev/lvname-snapshot 刪除快照
LinuxDay12——磁盤存儲和文件系統