linux之磁碟管理

被时光移动的城市發表於2024-11-24

磁碟管理

1.磁碟分類

  • 機械硬碟: 碟片 主軸 傳動手臂 做機械運動 類似 DVD
  • 固態硬碟:內部是主機板和隨身碟類似

2.硬碟大小

  • 3.5英寸:桌上型電腦
  • 2.5英寸:筆記本伺服器

3.硬碟介面

  • IDE介面 過時

  • scsi介面 過時

  • sata介面 桌上型電腦 3.0

  • nvme介面 固態硬碟

  • SAS介面 企業級

4.硬碟儲存和傳輸速度

  • sata 3.0介面硬碟 傳輸速度600MB/s 1T 2T 4T 8T 20T
  • NVMe介面硬碟 專為高效能SSD設計,基於PCIe匯流排
  • SAS介面硬碟 300G 600G 900G 轉速5400 7200 10K 15K

5.磁碟陣列

  • 就是把多塊硬碟組合起來使用,透過硬體或軟體技術對資料儲存空間、效能、速度、安全,穩定等特點,發揮特性。
  • 磁碟陣列的核心技術是 RAID,(Redundant Array of Independent Disks,獨立磁碟冗餘陣列),透過不同的配置方式平衡效能、可靠性和儲存容量。

raid概念

  • 冗餘:透過資料備份或校驗機制,在硬碟故障時保護資料。
  • 切割:將資料分成小塊分散儲存在多塊硬碟上,以提升讀寫速度。
  • 映象:將資料完整複製到另一塊硬碟上,增加資料冗餘性。
磁碟陣列raid卡組合
作用:
獲得更大的容量		 # 將多塊磁碟邏輯的組合成一塊磁碟
獲得更高的效能	     # 寫入伺服器 寫兩塊磁碟比寫一塊磁碟速度快
獲得更好的安全性    # 可以同時將資料寫入兩塊盤 一塊盤做備份
RAID級別 硬碟數量 可用容量 安全性 效能 使用場景
0 至少1塊 磁碟綜合 讀寫速度塊 要求速度
1 只能2塊 50% 可壞一塊 寫最慢,讀還行 要求安全與速度
5 至少3塊 n-1(硬碟數量-1) 壞一塊 0和1的折中 業務流量較穩定
10 至少4塊 50% 壞50% 讀寫速度快 高併發場景

6.磁碟分割槽

  • windows磁碟預設的是MBR格式
  • MBR格式最多支援4個主分割槽 C D E F
  • MBR格式支援3個主分支+1個擴充套件分割槽

6.1 Linux磁碟分割槽fdisk

#磁碟表示
sda   # 表示第一塊磁碟
    sda1 # 表示第一塊磁碟的第一個分割槽
    sda2 # 表示第一塊磁碟的第二個分割槽
sdb   # 表示第二塊磁碟
    sdb1 # 表示第2塊磁碟的第1個分割槽
    sdb5 # 表示第2塊磁碟的第1個邏輯分割槽
    
#Linux磁碟分割槽
1.系統分割槽
第一種分割槽: 標準分割槽   300G磁碟
/boot   200M    # 存放系統核心的位置 載入程式所在的位置
/		剩餘空間 # 存放系統

第二種分割槽: swap分割槽
/boot  200M
swap   2G       # 當記憶體空間不夠用時,臨時使用磁碟空間充當記憶體來使用 速度慢 解決OOM問題 記憶體溢位。
			    # linux記憶體如果達到最大限制,則自動殺死佔用最高記憶體的程序來讓系統正常執行
				# swap 對使用者的伺服器需要增加實體記憶體
		        # 比較著急,或者公司內部測試伺服器 自己使用的。
/       剩餘空間

第三種分割槽: 企業
/boot  200M
swap   2G
/      50G    # 系統
/data  1.8T   # 資料分割槽

2.磁碟分割槽格式
MBR格式 小於2T的磁碟使用fdisk分割槽
GPT格式 大於2T的磁碟使用parted分割槽

vmare 磁碟分割槽

#在虛擬機器新新增一塊磁碟 fdisk 檢視剛新增的硬碟nvme0n2: 20 GiB
[root@localhost ~]# fdisk -l

#目前虛擬機器有兩塊 1塊50G 2個分割槽
Disco /dev/nvme0n1: 50 GiB, 53687091200 bytes, 104857600 sectores
Disposit.      Inicio Comienzo     Final  Sectores Tamaño Id Tipo
/dev/nvme0n1p1 *          2048   2099199   2097152     1G 83 Linux
/dev/nvme0n1p2         2099200 104857599 102758400    49G 8e Linux LVM

#新新增的 1塊硬碟 20G
Disco /dev/nvme0n2: 20 GiB, 21474836480 bytes, 41943040 sectores

#fdisk命令幫助
   d   delete a partition		  # 刪除一個分割槽  
   l   list known partition types # 顯示分割槽型別
   n   add a new partition		  # 建立新的分割槽
   p   print the partition table  # 輸出分好的分割槽表
   m   print this menu		      # 列印選單
   w   write table to disk and exit #儲存並且推出
   q   quit without saving changes	# 退出不儲存
   
   
#對nvme0n2: 20 GiB 硬碟分割槽
[root@localhost ~]# fdisk /dev/nvme0n2

Welcome to fdisk (util-linux 2.35.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x1d7843e7.

# 輸入n新建分割槽 primary主分割槽,只能4個,第4個為擴充套件分割槽 在擴充套件分割槽 新建邏輯分割槽
Command (m for help): n
Partition type
   p   primary (2 primary, 0 extended, 2 free)
   e   extended (container for logical partitions)
Select (default p): p #選擇主分割槽
Partition number (3,4, default 3): 
First sector (20973568-41943039, default 20973568): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (20973568-41943039, default 41943039): +2G #給分割槽設定多少G容量

Created a new partition 3 of type 'Linux' and of size 2 GiB.

Command (m for help): p #列印已經分割的分割槽
Disk /dev/nvme0n2: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: VMware Virtual NVMe Disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x1d7843e7

#共分3塊主分割槽,1個擴充套件分割槽 下兩個邏輯分割槽

Command (m for help): p
Disk /dev/nvme0n2: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: VMware Virtual NVMe Disk

Device         Boot    Start      End  Sectors Size Id Type
/dev/nvme0n2p1          2048 10487807 10485760   5G 83 Linux
/dev/nvme0n2p2      10487808 20973567 10485760   5G 83 Linux
/dev/nvme0n2p3      20973568 25167871  4194304   2G 83 Linux
/dev/nvme0n2p4      25167872 41943039 16775168   8G  5 Extended
/dev/nvme0n2p5      25169920 33558527  8388608   4G 83 Linux
/dev/nvme0n2p6      33560576 41943039  8382464   4G 83 Linux

3.檢視系統中的分割槽並格式化
[root@localhost ~]# ll /dev/nvme*
crw------- 1 root root 242,  0 Nov 21 09:07 /dev/nvme0
brw-rw---- 1 root disk 259,  0 Nov 21 09:07 /dev/nvme0n1
brw-rw---- 1 root disk 259,  1 Nov 21 09:07 /dev/nvme0n1p1
brw-rw---- 1 root disk 259,  2 Nov 21 09:07 /dev/nvme0n1p2
brw-rw---- 1 root disk 259,  3 Nov 21 11:12 /dev/nvme0n2
brw-rw---- 1 root disk 259, 10 Nov 21 11:12 /dev/nvme0n2p1
brw-rw---- 1 root disk 259, 11 Nov 21 11:12 /dev/nvme0n2p2
brw-rw---- 1 root disk 259, 12 Nov 21 11:12 /dev/nvme0n2p3
brw-rw---- 1 root disk 259, 13 Nov 21 11:12 /dev/nvme0n2p4
brw-rw---- 1 root disk 259, 14 Nov 21 11:12 /dev/nvme0n2p5
brw-rw---- 1 root disk 259, 15 Nov 21 11:12 /dev/nvme0n2p6

#使用mkfs.xfs 格式化分割槽
[root@localhost ~]# mkfs.xfs /dev/nvme0n2p1

4.建立掛載點 並掛載/dev/nvme0n2p1
[root@localhost ~]# mkdir /data
[root@localhost ~]# mount /dev/nvme0n2p1 /data/

#df -h 檢視 已成功掛載
[root@localhost ~]# df -h
Filesystem             Size  Used Avail Use% Mounted on
/dev/nvme0n2p1         5.0G   68M  5.0G   2% /data

#測試使用
[root@localhost ~]# cat /data/hello.txt 
hello

#解除安裝掛載
[root@localhost ~]# umount /data

5.開機自動掛載
[root@localhost ~]# vi /etc/rc.d/rc.local 
[root@localhost ~]# vi /etc/fstab 

[root@localhost ~]# tail -1 /etc/fstab 
/dev/nvme0n2p1          /data                   xfs     deafaults       0 0

6.2 Linux磁碟分割槽parted

# 基於麒麟系統 vmare scsi硬碟 新插入一塊4T硬碟 parted分割槽至少是2T以上
# fdisk -l 檢視新加入的硬碟
[root@kylin-sp3v10 ~]# fdisk -l
##Linux系統
Disk /dev/sda: 50 GiB, 53687091200 bytes, 104857600 sectors
Device     Boot   Start       End   Sectors Size Id Type
/dev/sda1  *       2048   2099199   2097152   1G 83 Linux
/dev/sda2       2099200 104857599 102758400  49G 8e Linux LVM

1.加入4T硬碟
#新加入的4T硬碟
Disk /dev/sdb: 3.91 TiB, 4294967296000 bytes, 8388608000 sectors

#parted相關命令
help [COMMAND] 
  mklabel,mktable LABEL-TYPE               # 建立分割槽表型別
  mkpart PART-TYPE [FS-TYPE] START END     # 建立分割槽 
  print 								   # 列印分割槽	
  quit                                     # 退出即儲存
  rm NUMBER                                # 刪除分割槽
 
 2.使用parted分割槽 格式化
 #對4T硬碟分割槽
[root@kylin-sp3v10 ~]# parted /dev/sdb

(parted) mklabel gpt  #將修改磁碟分割槽表型別為gpt模式(預設為msdos格式,最大支援2T)

#檢視
(parted) print                                                            
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 4295GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

#建立分割槽
parted) mkpart
Partition name?  []? primary              #分割槽為主分割槽                                
File system type?  [ext2]? xfs            #檔案系統為xfs                                 
Start? 0                                  #分割槽大小的起始   (開始1% 結尾30%)                             
End? 500G                                 #分割槽大小的結束 (單位K,M,G,T)                               
Warning: The resulting partition is not properly aligned for best performance: 34s % 2048s != 0s
Ignore/Cancel? I #預設不是從2048開始 是否忽略寫入 是 按I                                                         

(parted) print                           #檢視已建立的分割槽                                  
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 4295GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End    Size   File system  Name     Flags
 1      17.4kB  500GB  500GB  xfs          primary

#無互動式建立分割槽
(parted) mkpart primary xfs  500G 4295G   #一行寫完         500G 100%                            

(parted) print                            #檢視                                 
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 4295GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     Flags
 1      17.4kB  500GB   500GB   xfs          primary
 2      500GB   4295GB  3795GB  xfs          primary
 
 #刪除分割槽
 Number  Start   End     Size    File system  Name     Flags
 1      17.4kB  500GB   500GB   xfs          primary
 2      500GB   4295GB  3795GB  xfs          primary

(parted) rm 1  #rm 加編號即可

(parted) print         #列印檢視已刪除primary 1                                                   
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 4295GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start  End     Size    File system  Name     Flags
 2      500GB  4295GB  3795GB  xfs          primary


#新建分割槽 從0% 500G
(parted) mkpart primary xfs 0% 500G
(parted) print                                                            
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 4295GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  500GB   500GB   xfs          primary
 2      500GB   4295GB  3795GB  xfs          primary

#quit(建立分割槽即生效,已經寫入系統)


3.格式化分割槽
[root@kylin-sp3v10 ~]# mkfs.xfs -f /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=30517568 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=122070272, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=59604, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

4.掛載使用
[root@kylin-sp3v10 ~]# mount /dev/sdb1 /data/

5.永久掛載 寫入/etc/fstab
[root@kylin-sp3v10 ~]# vi /etc/fstab
/dev/sdb1              /data                    xfs     defaults        0 0

6.reboot 並檢視
[root@kylin-sp3v10 ~]# df -h
Filesystem             Size  Used Avail Use% Mounted on
devtmpfs               451M     0  451M   0% /dev
tmpfs                  467M     0  467M   0% /dev/shm
tmpfs                  467M  6.8M  460M   2% /run
tmpfs                  467M     0  467M   0% /sys/fs/cgroup
/dev/mapper/klas-root   47G  3.8G   44G   8% /
tmpfs                  467M     0  467M   0% /tmp
/dev/sdb1              466G  3.3G  463G   1% /data

9.ext3、ext4、xfs對比

特性 ext3 ext4 xfs
日誌功能 支援 支援 支援
最大檔案尺寸 2TB 1EB 8EB
最大檔案系統尺寸 32TB 1EB 8EB
效能
適用場景 通用 通用,尤其最佳化了大檔案處理 大資料量處理,資料庫應用
特殊功能 檔案系統壓縮 Extents, 持久預分配 並行I/O, 實時碎片整理

10.磁碟相關案例

10.1 服務佔大量記憶體,臨時建立交換分割槽,來充當記憶體使用

swap磁碟分割槽: 大小是記憶體的1-1.5倍 如果記憶體大於8G,則最多swap給8G即可。
什麼情況下使用swap: 
       測試伺服器 
       內部伺服器 
       自己用的虛擬機器 
       流量波動的業務
線上伺服器,業務伺服器禁止使用swap,增加記憶體的方式解決OOM問題。OOM(記憶體溢位)
建立swap分割槽的方式:
方法1: 安裝作業系統的時候
方法2: 安裝完成作業系統
# 測試伺服器上測試軟體記憶體不夠用,也無法新增記憶體,為了正常讓測試業務正常執行,臨時建立swap分割槽。
第一步: 生成一個1G的裝置檔案。
[root@kylin-sp3v10 ~]# dd if=/dev/zero of=/opt/1g bs=1M count=1000
第二步: 格式化成swap型別  # 磁碟是使用 mkfs.xfs /dev/sdb1
[root@kylin-sp3v10 ~]# mkswap /opt/1g 
mkswap: /opt/1g: insecure permissions 0644, 0600 suggested.
Setting up swapspace version 1, size = 1000 MiB (1048571904 bytes)
no label, UUID=0f956b74-3121-4949-9d98-11ecea5b08c5
第三步: 掛載使用swap 直接增加到原有的swap空間上。

#檢視原有 是2G
[root@kylin-sp3v10 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:          932Mi       215Mi        71Mi       1.0Mi       645Mi       571Mi
Swap:         2.0Gi       6.0Mi       2.0Gi

#swapon 再增加1G
[root@kylin-sp3v10 ~]# swapon /opt/1g
swapon: /opt/1g: insecure permissions 0644, 0600 suggested.
[root@kylin-sp3v10 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:          932Mi       215Mi        69Mi       1.0Mi       646Mi       570Mi
Swap:         3.0Gi       6.0Mi       3.0Gi

#檢視swap分割槽的組成
[root@kylin-sp3v10 ~]# swapon -s
Filename				Type		Size	Used	Priority
/dev/dm-1                              	partition	2138108	6412	-2
/opt/1g                                	file    	1023996	0	-3

第四步: 寫入開機自動掛載
vi /etc/fstab
/opt/1g swap /opt/1g defaults 0 0

10.2 查詢磁碟中的大檔案

#第一種情況:磁碟空間滿
find / -type f -size +1G

#第二種情況: inode號滿
find / -type d -size +1M      #目錄大於1M,可以目錄下有上萬個小檔案(3-5w) 大量佔用inode

10.3 解決磁碟不夠用的問題

#購買新的硬碟,分割槽,格式化,掛載使用,做軟連線,日誌的路徑不能變,解決磁碟不夠用的問題

#現日誌檔案超過1T,把現有日誌檔案,mv到/data目錄下, data是4T硬碟,然後做軟連線 ln -s /var/log/logs /data 
#建立日誌
[root@kylin-sp3v10 ~]# dd if=/dev/zero of=/var/log/1g.log bs=1M count=1000
#把原有日誌檔案 移動到4T硬碟中
[root@kylin-sp3v10 ~]# mv /var/log/1g.log /data/
#做軟連線 原有日誌檔案對映到4T硬碟中的日誌檔案
[root@kylin-sp3v10 ~]# ln -s /data/1g.log /var/log/1g.log
#檢視
[root@kylin-sp3v10 ~]# ll /var/log/1g.log /data/1g.log 
-rw-r--r-- 1 root root 1048576000 Nov 24 14:17 /data/1g.log
lrwxrwxrwx 1 root root         12 Nov 24 14:19 /var/log/1g.log -> /data/1g.log
[root@kylin-sp3v10 ~]# 

10.4 刪除檔案檔案後發現磁碟空間還沒釋放

磁碟上有個一39G的檔案,刪除後發現磁碟沒有釋放。
檔案如果被程序所佔用,會出現刪除檔案磁碟沒有釋放的問題。
檢視當前的檔案被哪個程序所佔用:
#程序佔用
[root@kylin-sp3v10 ~]# tail -f /var/log/1g.log
#刪除之後磁碟空間並未釋放
#使用lsof 查詢
[root@kylin-sp3v10 ~]# lsof |grep 1g
tail      4428                          root    3r      REG              253,0 1048576000   69099039 /var/log/1g.log (deleted)
#kill 4428 結束程序即可

相關文章