1. 程式人生 > >LinuxDay12——磁盤存儲和文件系統

LinuxDay12——磁盤存儲和文件系統

分區管理 技術分享 AC 早期 center 模式 問題 std 設備

  

一、硬盤簡介

機械硬盤(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、硬盤為什要分區

  1. 優化I/O性能
  2. 實現磁盤空間配額限
  3. 提高修復速度
  4. 隔離系統和程序
  5. 安裝多個OS
  6. 采用不同文件系統

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——磁盤存儲和文件系統