磁碟知識體系結構

上善若水~小輝 發表於 2020-09-15

第1章           磁碟知識體系結構

1.1  磁碟知識體系結構

        1) 磁碟的外部結構和內部結構

        2) 磁碟陣列 RAID   LVM 邏輯卷管理

        3) 磁碟分割槽 主分割槽 擴充套件分割槽 邏輯分割槽

              fdisk

              parted

       4) 磁碟格式化

       5) 磁碟的使用 掛載

1.1.1  磁碟結構

1.1.1.1    外部結構

              機械磁碟

           固態磁碟

1.1.1.2    內部結構

1.1.1.2.1     磁碟的主軸

1.1.1.2.2     磁碟的轉速

       家用: 5.4K  7.2K

      企業: 10K   15K

1.1.1.2.3     磁碟碟片

                     作用:儲存資料

                  磁頭:

                    作用:

                     a)讀寫資料

                     b)盤面的數量等於磁碟磁頭的數量

                     c)磁碟介面

                       連線主機板

                      介面型別

                      IDC      淘汰

                      SCSI    淘汰

                      SATA

                      SAS

                      SSD

                      PCI-E

1.1.1.2.4     磁碟(Disk)
1.1.1.2.5     磁頭(Head)

               作用說明:用來寫入和讀取資料的

               特點說明:盤面數量等於磁頭數量

              工作原理:採用徑向運動讀寫資料

1.1.1.2.6     磁軌(Track)

               作用說明:用來儲存使用者資料

               特點說明:由多個同心圓組成

               儲存計數:最外面同心圓為0磁軌

              工作原理:磁碟預設按照磁軌尋找資料

              重點原理:磁頭徑向運動為機械運動(尋道)  效能小於固態硬碟(晶片)

              原理特點:磁頭機械運動較慢

1.1.1.2.7     扇區(Sector)

              作用說明:用來儲存使用者資料

              特點說明:磁碟儲存最小單位

              儲存計數:預設磁碟扇區從1扇區開始,扇區大小為512位元組

              系統儲存最小單位是block

1.1.1.2.8      柱面(Cylinder)

            作用說明:用來儲存使用者資料

            特點說明:不同盤面上相同的磁軌組成(圓柱體)

            工作原理:磁碟預設按照柱面進行讀寫

            重點原理:磁頭之間的切換為電子切換

             原理特點:磁頭電子切換較快

1.1.1.2.9     單元塊(Units)

             作用說明:用來儲存使用者資料

             特點說明:表示單個柱面大小

1.2  磁碟陣列

              磁碟陣列如何配置

              配置LVM  L 邏輯  v 卷組  M 管理  邏輯卷管理 --> 實現可以隨意調整磁碟分割槽大小

              獲得更大的容量

              獲得更高的效能

              獲得更好的安全性

1.2.1   raid 0

             具有最高的儲存效能(磁碟容量不浪費,讀寫很快),這些磁碟的總和

            10*1TB raid 0

             要製作RAID 0至少要1塊物理磁碟,不做raid不能安裝系統

             安全:任何一塊硬碟損壞,所有的資料無法使用,安全性最低

             可用容量:所有硬碟容量的和

             效能:讀寫速度最快

             使用場景:不要求安全,只要求速度

             舉例:資料庫從庫/儲存從庫

1.2.2    raid 1

        映象:損失50%的資料容量。例如2塊1T的盤,做完RAID 1後容量為1T

         raid只能2塊硬碟

         Mirror不能提高儲存效能。理論上寫效能和單盤相差不大

         安全冗餘:100% 

         可用容量:一半(兩塊硬碟容量之和)

         效能:寫入速度慢,讀取速度OK

         使用場景:只追求安全性對於速度沒要求

         舉例:系統盤,監控伺服器

1.2.3   raid 5

             需要至少3塊,損失一塊硬碟

            6*600G

           安全:最多可以損壞一塊硬碟

           可用容量:損失一塊盤的容量

           效能:寫入速度不快,讀取Ok

          使用場景:對於資料安全,對於速度要求不高

          舉例:普遍資料庫 ,儲存訪問量不高

1.2.4    raid 10 成本最高

           最少4塊硬碟,增加硬碟必須是2的倍數;所有硬碟容量的一半

           安全:最多損壞一半硬碟

           可用容量:損失所有硬碟一半的容量      

           效能:寫入和讀取 都很快

            使用場景:對於安全和效能都要

            舉例:高併發或高訪問量     資料庫主庫   儲存

 

磁碟知識體系結構

 

 

1.3  磁碟分割槽

          情況1:

           MBR格式

            4個主分割槽 sda1 sda2 sda3 sda4

           情況2:

            3個主分割槽 sda1 ada2 sda3 sda4(擴充套件分割槽) 無法直接使用 無法掛載

           sda4(200G)

           多個邏輯分割槽

            sda5 100G        可以直接使用      可以掛載

            sda6 100G        可以直接使用     可以掛載

            第1塊sas硬碟的第一個主分割槽

           /dev/sda1

            第2塊sata硬碟的第2個主分割槽

           /dev/sdb2

            第3塊sata硬碟的第1個邏輯分割槽

          /dev/sdc5

          伺服器的第一塊磁碟使用 sda

          第二快磁碟使用 sdb

          第一塊磁碟的第一個主分割槽 sda1

           第二個主分割槽 sda2

          第一個邏輯分割槽 sda5

         第二快磁碟的第一個主分割槽 sdb1

          第二個主分割槽 sdb2

          第一個邏輯分割槽 sdb5

1.4  磁碟格式化   fdisk

       fdisk  小於2T的磁碟進行分割槽 MBR

1.4.1  MBR格式 4個主分割槽

         Linux作業系統 RAID

         300G 600G 900G

         300*2快 RAID1 保護作業系統 600G--> MBR引導

1.4.2    parted 大於2T的磁碟進行分割槽 GPT

          GPT格式 128個主分割槽

1.5  磁碟分割槽: fdisk

        第一步: 準備一塊新的磁碟 100M

            虛擬機器新增

            工作: 物理機 購買新的磁碟

                  雲服務 購買雲端儲存

      第二步: 檢視確認磁碟已在作業系統中顯示 fdisk

            雲服務新的磁碟 需要重啟

            物理機新的磁碟  支援熱插拔

            虛擬機器vmware需要重啟

      第三步: fdisk 分割槽

[[email protected] ~]# fdisk /dev/sdb    # 對第二快磁碟進行分割槽
Command (m for help): m                       # help 幫助
Command action
d   delete a partition                                # 刪除分割槽
g   create a new empty GPT partition table    # 建立GPT分割槽表
l   list known partition types                       # 顯示分割槽表型別
m   print this menu                                   # 列印幫助選單
n   add a new partition                              # 建立新的分割槽
p   print the partition table                         # 顯示分割槽表
q   quit without saving changes                   # 退出不儲存
t   change a partition's system id                # 改變分割槽型別
w   write table to disk and exit                    # 儲存並退出                         
Command (m for help): n
Partition type:    # 分割槽類
p   primary (0 primary, 0 extended, 4 free)   #可用4個主分割槽
e   extended    # 擴充套件分割槽
Select (default p): # 選擇分割槽表型別 預設 p 主分割槽
Partition number (1-4, default 1):  選擇分割槽號碼預設1
First sector (2048-208895, default 2048): # 開始的扇區 預設
Using default value 2048         
Last sector, +sectors or +size{K,M,G} (2048-208895, default 208895): +20M  #結束的扇區 或者 K M G  +20M 第一個分割槽為20M
Partition 1 of type Linux and of size 20 MiB is set
檢視當前的分割槽
Command (m for help): p
Disk /dev/sdb: 106 MB, 106954752 bytes, 208896 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x5bcfea06
Device Boot      Start         End      Blocks   Id  System
/dev/sdb1         2048       43007       20480   83  Linux

第四步: 格式化

       xfs cenetos7預設的分割槽表型別

[[email protected] ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=1, agsize=5120 blks
               =                           sectsz=512        attr=2, projid32bit=1
               =                                crc=1        finobt=0,     sparse=0
      data   =                             bsize=4096   blocks=5120,  imaxpct=25
               =                              sunit=0      swidth=0 blks
 naming   =version 2               bsize=4096   ascii-ci=0 ftype=1
    log      =internal log           bsize=4096   blocks=855, version=2
              =sectsz=512            sunit=0 blks, lazy-count=1
  realtime =none                   extsz=4096   blocks=0, rtextents=0

       第五步: 掛載使用

[[email protected] ~]# mount /dev/sdb1 /mnt
[[email protected] ~]# df -h
tmpfs            98M     0   98M   0% /run/user/0
/dev/sdb1        17M  1.1M   16M   7% /mnt

       第六步: 解除安裝磁碟

[[email protected] ~]# umount /mnt

            作業練習:

            分割槽 3個主分割槽+1個擴充套件分割槽+2個邏輯分割槽

磁碟案例

注意:分割槽的時候,如果分三個主分割槽,把剩下的所有(預設)給第三個主分割槽,如果分三個主分割槽,1個擴充套件分割槽,把剩下的所有分給擴充套件分割槽.
Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-208895, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-208895, default 208895): +16M
Partition 1 of type Linux and of size 16 MiB is set
Command (m for help): n 
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
Partition number (2-4, default 2):
First sector (34816-208895, default 34816):
Using default value 34816
Last sector, +sectors or +size{K,M,G} (34816-208895, default 208895): +16M
Partition 2 of type Linux and of size 16 MiB is set
Command (m for help): n
Partition type:
   p   primary (2 primary, 0 extended, 2 free)
   e   extended
Select (default p): p
Partition number (3,4, default 3): 3
First sector (67584-208895, default 67584):
Using default value 67584
Last sector, +sectors or +size{K,M,G} (67584-208895, default 208895): +16M
Partition 3 of type Linux and of size 16 MiB is set
Command (m for help): n
Partition type:
   p   primary (3 primary, 0 extended, 1 free)
   e   extended
Select (default e): e
Selected partition 4
First sector (100352-208895, default 100352):
Using default value 100352
Last sector, +sectors or +size{K,M,G} (100352-208895, default 208895):
Using default value 208895
Partition 4 of type Extended and of size 53 MiB is set

 
Command (m for help): n
All primary partitions are in use
Adding logical partition 5
First sector (102400-208895, default 102400):
Using default value 102400
Last sector, +sectors or +size{K,M,G} (102400-208895, default 208895): +16M
Partition 5 of type Linux and of size 16 MiB is set
Command (m for help): n 
All primary partitions are in use
Adding logical partition 6
First sector (137216-208895, default 137216):
Using default value 137216
Last sector, +sectors or +size{K,M,G} (137216-208895, default 208895): +16M
Partition 6 of type Linux and of size 16 MiB is set

 

Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[[email protected]~]# ll /dev/sdb
sdb   sdb1  sdb2  sdb3  sdb4  sdb5  sdb6 

第2章      磁碟分割槽方式

2.1 開機自動載入方案

2.1.1  寫入rc.local

磁碟知識體系結構

 2.1.2  寫入/etc/fstab

UUID=d25e7543-.....   /          xfs                defaults     1               1
UUID或者裝置名稱  掛載點  檔案系統          掛載引數  是否備份 開機磁碟檢查

 2.1.3  檢視UUID

  lsblk  檢視

[[email protected]~]# lsblk -f
NAME   FSTYPE  LABEL           UUID                                 MOUNTPOINT
sda                                                                
├─sda1 xfs                     1af0c500-80df-4926-88aa-8e4419a636c9 /boot
├─sda2 swap                    35a4f6da-d8f3-4449-83d2-bef70f83bda0 [SWAP]
└─sda3 xfs                     32c0b660-ac0a-4b5c-b1c9-4f5209eba66a /
sdb                                                                
sr0    iso9660 CentOS 7 x86_64 2018-11-25-23-54-16-00     

blkid檢視

[[email protected]~]#  

/dev/sda1: UUID="1af0c500-80df-4926-88aa-8e4419a636c9" TYPE="xfs"

/dev/sda2: UUID="35a4f6da-d8f3-4449-83d2-bef70f83bda0" TYPE="swap"

/dev/sda3: UUID="32c0b660-ac0a-4b5c-b1c9-4f5209eba66a" TYPE="xfs"

/dev/sr0: UUID="2018-11-25-23-54-16-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"

2.2   磁碟分割槽fdisk

           fdisk適用於小於2TB磁碟 fdisk只支援mbr分割槽表

           開機自動掛載 /etc/fstab   掛載裝置的配置檔案 /etc/rc.local

[[email protected] ~]# tail -2 /etc/fstab
/dev/sdb1          /mnt          xfs     defaults      0 0
UUID=fc550328-186c-408f-aa4f-daf78bf04281 /data           xfs     defaults     0 0

       PS: 在使用df -h過程中發現無法正常顯示磁碟資訊

           使用umount -f /data 強制解除安裝後正常使用

2.3  磁碟分割槽parted

parted一般用於大於2TB磁碟 gpt支援更大的硬碟且支援更多的分割槽 不寫入記憶體直接生效

常用引數 主分割槽可分128個
GPT 格式:parted 命令可以建立全域性惟一的識別符號分割槽表 GPT,而 fdisk 和 cfdisk 則僅限於 DOS 分割槽表。
mktable 建立磁碟分割槽表
mktable gpt 建立分割槽為GTP格式 設定分割槽表為GPT
p     print  顯示磁碟分割槽資訊
mkpart  make partition 建立分割槽
rm    刪除分割槽
q   quit 退出
建立分割槽並檢視分割槽p  提示沒有找到分割槽 說明還沒有進行分割槽
    [[email protected] ~]# parted -l    # 檢視gpt格式分割槽資訊
    [[email protected] ~]# parted /dev/sdb
    (parted) mktable gpt                                                     
    (parted) p                                                               
    Model: VMware, VMware Virtual S (scsi)
    Disk /dev/sdb: 3221GB
    Sector size (logical/physical): 512B/512B
    Partition Table: gpt
    Disk Flags:
    Number  Start  End  Size  File system  Name  Flags
    (parted) mkpart primary
    File system type?  [ext2]? xfs    # 檔案系統                                       
   Start? 0                            # 開始                                    
   End? 1000                           # 結束                                    
   Warning: The resulting partition is not properly aligned for best performance.
   Ignore/Cancel? I      
   [[email protected] ~]# parted /dev/sdb
   GNU Parted 3.1
   Using /dev/sdb
   Welcome to GNU Parted! Type 'help' to view a list of commands.
   (parted) mkpart primary 1000 1500
    Warning: The resulting partition is not properly aligned for best performance.
   Ignore/Cancel? I                                                         
   (parted) print                                                            
    Model: VMware, VMware Virtual S (scsi)
   Disk /dev/sdb: 3221GB
    Sector size (logical/physical): 512B/512B
   Partition Table: gpt
    Disk Flags:
    Number  Start    End     Size       File system  Name     Flags
     1      17.4kB  1000MB   1000MB                primary
     2      1000MB  1500MB   500MB                  primary

2.4   刪除主分割槽

Number  Start   End     Size    File system  Name     Flags
1      17.4kB  1000MB  1000MB               primary
2      1000MB  1500MB  500MB                primary
(parted) rm 2  

2.5  非互動式parted分割槽

[[email protected] ~]# parted /dev/sdb mkpart primary 1000 2000
[[email protected] ~]# parted /dev/sdb mkpart primary 2000 2500
Information: You may need to update /etc/fstab.
[[email protected] ~]# parted /dev/sdb  print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 3221GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number  Start      End        Size              File system    Name         Flags

  1      17.4kB    1000MB  1000MB                primary

  2      1000MB   2000MB   999MB                primary

 3      2000MB     2500MB  500MB                primary

2.6  非互動式刪除

[[email protected] ~]# parted /dev/sdb  rm 2

格式化分割槽

[[email protected] ~]# mkfs.xfs /dev/sdb1

下一步掛載使用

[[email protected] ~]# mount /dev/sdb1 /mnt

2.7   企業場景

            磁碟空間不夠用

           雲主機 購買磁碟-->雲伺服器後臺掛載到對應的伺服器(在光碟機中放入映象檔案)

           物理機 直接插新的磁碟 支援熱插拔

2.7.1      格式化磁碟

[[email protected] ~]# mkfs.xfs -f /dev/sdb

2.7.2    掛載使用磁碟

[[email protected] ~]# mount /dev/sdb /data

2.7.3   檢視磁碟掛載

[[email protected] ~]# df -h
/dev/sdb        3.0T   33M  3.0T   1% /data

2.7.4    開機自動掛載  /etc/fstab

/dev/sdb         /data       xfs     defaults     0    0

2.8  磁碟案例

        企業案例:java環境記憶體不夠用,佔用大量的swap分割槽

        記憶體滿: 導致Linux系統的程式被殺 優先殺佔用記憶體最高的那個服務

        兩種情況:

        一種情況是流量達到了上線   記憶體8G 實際用到了7.xG 必須升級記憶體

        第二種情況流量沒有達到上線 網路波動引起的 某個時間點達到8G左右

        程式程式碼導致記憶體溢位(使用者量沒有達到8G值)

        swap 磁碟的空間臨時充當記憶體使用 速度較慢

        swap分割槽在安裝系統可以劃分

在進入作業系統後可以臨時擴充   

2.9  擴充套件swap分割槽大小

/dev/zero 白洞 不斷輸出內容
/dev/null 黑洞
/dev/urandom 隨機字元 

2.9.1  第一步: 生成一個200M的檔案

dd if=/dev/zero of=/tmp/200m bs=1M      count=200
inputfile    outfile      block size    複製次數
資料來源   輸出檔案 每次複製多大

2.9.2  第二步: 格式化swap分割槽

[[email protected] ~]# mkswap /tmp/200m
Setting up swapspace version 1, size = 204796 KiB
no label, UUID=6ecfd552-d6f1-4769-b57b-39bb1a33d87d

2.9.3  第三步: 啟用 掛載swap分割槽

[[email protected] ~]# swapon /tmp/200m
swapon: /tmp/200m: insecure permissions 0644, 0600 suggested.
You have 5new mail in /var/spool/mail/root
[[email protected] ~]# free -h
total        used          free      shared       buff/cache   available
Mem:      974M         97M        527M         13M           349M        698M
Swap:      1.2G          0B          1.2G

2.9.4  第四步: 解除安裝swap分割槽

[[email protected] ~]# swapoff /tmp/200m
You have new mail in /var/spool/mail/root
[[email protected] ~]# free -h
                          total         used        free      shared  buff/cache   available

       Mem:           974M         97M        527M         13M        349M        698M

       Swap:           1.0G          0B        1.0G

2.9.5  第五步:檢視swap的組成

[[email protected] ~]# swapon -s
Filename           Type        Size        Used   Priority
/dev/sda2        partition    1048572   0        -1
/tmp/200m         file         204796    0        -2

2.9.6  第六步: 開機自動掛載

  /tmp/200m          swap         swap    defaults      0    0

2.10  磁碟案例2:

1. du –sh 檢視某個目錄佔用空間大小  確認後刪除
2. 通過磁碟掛載的方式解決磁碟不夠用的情況

2.10.1    第一步: 生成10G的檔案

dd if=/dev/zero of=/var/log/10g bs=1M count=10000

2.10.2    第二步: 使用du命令查詢該檔案

du -h /*|grep G
du -h /var/log/*|grep G    

2.10.3    使用find查詢大檔案

[[email protected] ~]# find / -type f -size +1G
/var/log/10g

2.11  通過磁碟掛載的方式解決磁碟不夠用的情況

         查詢到的大檔案 有用 增加磁碟的方式解決 原始檔的路徑不能變

         /var/log/10g  持續不斷的往檔案中輸出日誌

2.11.1   第一步:  增加一塊新的磁碟進行格式化掛載     

mkfs.xfs /dev/sdb
mount /dev/sdb /data 

2.11.2     第二步:  把/var/log/10g 檔案移動到/data下 第二快磁碟          

2.11.3     第三步: 軟連結

[[email protected] ~]# ln -s /data/10g /var/log/10g

2.12   磁碟案例3: 如何查詢小檔案多的目錄

              使用find命令查詢目錄的大小      

2.13    磁碟案例4

              檔案是否被真的刪除

              顯示 no space left on device ,df –h檢視磁碟有剩餘

              inode和block的數量同時為0 檔案沒有被程式呼叫 重啟服務生效

2.13.1    第一步: 模式檔案被命令佔用

2.13.2    第二步: 使用lsof檢視被程式呼叫的檔案

安裝lsof命令 yum -y install lsof

[[email protected] ~]# lsof|grep 10g
tail      2053         root    3r      REG     8,16 10485760000       67 /data/10g

2.13.3  第三步: 在檔案被佔用的情況下刪除10g這個檔案

[[email protected] ~]# rm -f /data/10g
[[email protected] ~]# ll /data/
total 0
[[email protected] ~]# df -h
/dev/sdb        3.0T  9.8G  3.0T   1% /data

2.13.4  第四步: 重啟服務生效

httpd 服務---> /var/log/httpd/access.log

刪除access.log檔案後重啟(檔案過大但是還是沒有解決問題)

systemctl reload|restart httpd 重啟生效

[[email protected] ~]# lsof |grep 10g
tail      2053         root    3r      REG      8,16 10485760000   67 /data/10g (deleted)
[[email protected] ~]# kill -9 2053