磁碟管理
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 結束程序即可