Linux磁盤

磁盤管理體系架構(gòu);

磁盤選型;

磁盤分區(qū),格式化,掛載;

磁盤swap;

磁盤分區(qū)的方案;

磁盤管理指令;

磁盤相關(guān)故障案例:磁盤空間不足;

======================================================================

磁盤分類:

機械硬盤:HDD,里邊有電機,無空氣(有的會充稀有氣體),電機帶動磁盤高速旋轉(zhuǎn),讀取數(shù)據(jù);

固態(tài)硬盤:SSD,集成電路與芯片,存儲芯片;

======================================================================

接口分類:類似于水壺的壺嘴,影響磁盤的讀寫速度;不同的類型有不同的讀寫速度,

SATA:中間被隔開了,一邊傳數(shù)據(jù),一邊接電源,短的接數(shù)據(jù),長的接電源;機械盤一般用這個接口,也有固態(tài)盤;一般家用;

SAS:機械固態(tài)盤都有,給企業(yè)環(huán)境使用;接口類似于SATA,也是一長一短,SAS中間沒有斷開,中間是連著的;

PCI-E:速度最快,固態(tài)硬盤用;這種接口一開始給網(wǎng)卡\顯卡用,后來用作硬盤;很占空間;企業(yè)級使用;

m.2 NVME:筆記本用的,固態(tài)硬盤接口;性能也比較快,也省空間;

======================================================================

固態(tài)硬盤存儲顆粒:

SLC,MLC,TLC

TLC最便宜,然后MLC,SLC,企業(yè)多用。

======================================================================

RAID:磁盤冗余陣列,管理磁盤方式.

使用raid,1)可以獲得更高的容量,2)更快的速度,更高的性能;3)更高的冗余(安全).

但上述三個特性,無法同時都滿足;

======================================================================

RAID級別:就是對這些硬盤的管理方式的選擇;

常用級別:

--------------------------------------------------------------------------------------------

0:條帶,串聯(lián),最少1塊硬盤,安全冗余:最低,可用容量:所有硬盤的和,性能:讀寫最快,使用場景:不要求安全,只要求速度;舉例:數(shù)據(jù)庫從庫存儲從庫web服務(wù)器;

--------------------------------------------------------------------------------------------

1:鏡像;只能有2塊盤;安全冗余:100%;可用容量:一半(兩塊容量之和),性能:寫入速度慢,讀取OK;使用場景:只追求安全性,對于速度沒;舉例:系統(tǒng)盤,監(jiān)控服務(wù)器;

--------------------------------------------------------------------------------------------

5:最少3塊盤,安全冗余:最多損壞1塊盤;可用容量:損失1塊硬盤的容量;性能:寫入性能不好,讀取OK;使用場景:對于速度安全,對于速度要求不高;使用場景:普通數(shù)據(jù)庫,存儲訪問量不高;

--------------------------------------------------------------------------------------------

10:最少4塊盤;安全冗余:可以損壞一半;可用容量:損失所有硬盤一半的容量;性能:讀寫很快;使用場景:對于安全和性能都要;舉例:高并發(fā)或高訪問量數(shù)據(jù)庫主庫 存儲;

======================================================================

磁盤分區(qū)

MBR,GPT;兩種方式,統(tǒng)稱磁盤引導程序;

MBR:只能支持2T以內(nèi)的硬盤;大于2T,只識別2T空間;且有主分區(qū),擴展,邏輯分區(qū);對應的命令fdisk/parted;

GPT:支持大容量的硬盤;主分區(qū)可以無限使用;一百多個主分區(qū);對應的命令:parted/gdisk;

注意:parted的命令,都是時時生效的;比較危險;

fdisk和gdisk操作類似,只是針對的盤不一樣。

---------------------------------------------------------------------------------------------------------------------------------

MBR分區(qū):每一塊硬盤上存放磁盤引導程序,引導程序在磁盤開頭部分,用于引導系統(tǒng)啟動。我們一般不用太關(guān)注,

我們安裝系統(tǒng)的時候自動安裝

位置:磁盤分區(qū)表,磁盤的開始部分:0磁頭,0磁道,1扇區(qū)(512字節(jié));

這512字節(jié)放了倆東西:

引導程序,446bytes(MBR);

磁盤分區(qū)表,64bytes;

分區(qū)結(jié)束標識2字節(jié):55AA;

分區(qū)表64字節(jié),每個分區(qū)占16字節(jié),最多4個分區(qū);

這4個分區(qū),叫主分區(qū);

擴展分區(qū)是用于解決主分區(qū)數(shù)量只能有4個的問題,擴展分區(qū)無法直接使用,需要在擴展分區(qū)下面創(chuàng)建邏輯分區(qū),邏輯分區(qū)用來存放數(shù)據(jù);

GPT分區(qū)詳解:https://blog.csdn.net/li33293884/article/details/50562527

<<大話存儲>>,有精力可以看看;

======================================================================

磁盤及分區(qū)的命名

磁盤文件或分區(qū)文件放在/dev/下面

命名方式如下

sda:SAS,STAT,SCSI;a就是第一塊硬盤;

vda:虛擬機,云;a就是第一塊硬盤;

分區(qū)命名:

? 主分區(qū)+擴展分區(qū),從1-4;

? 邏輯分區(qū)從5開始;

例:硬盤及分區(qū)命名

第2塊SATA硬盤的第1個主分區(qū) ? /dev/sdb1 ? ? ?

第3塊SAS硬盤的第2個邏輯分區(qū) ? /dev/sdc6

第5塊公有云的云盤的第3個主分區(qū) /dev/vde3

======================================================================

加硬盤分區(qū)使用操作步驟:

加一塊硬盤;

分區(qū)操作;

創(chuàng)建文件系統(tǒng)(格式化);

掛載(給設(shè)備設(shè)置一個入口,如果不掛載,設(shè)備就無法訪問使用,類似于沒門沒窗);

-----------------------------------------------------------------------------------------

看實例:先準備環(huán)境:

Vmware添加2塊硬盤,大小隨便;

查看磁盤信息:

fdisk -l | grep '/dev/sd'

案例1:創(chuàng)建20Mb的分區(qū);

//查看磁盤,進入交互式方式

# fdisk /dev/sdb //輸入命令后就可以操作磁盤了,一般就是增刪改查

p //print,輸出磁盤分區(qū)信息;

n //new,增加,創(chuàng)建分區(qū);

d //delete 刪除分區(qū)

w //保存并退出

q //quit,退出不保存

n //輸入n,會提示p或e的選擇,主分區(qū)和擴展

? p //默認就是p,可以直接回車;

? 1 //這一步讓選擇分區(qū)號,默認主分區(qū)就是1-4,選擇默認就可以;

? 起始扇區(qū) //這一步讓選擇起始扇區(qū),默認就行

? +20M //這一步讓選擇分區(qū)大小,Last 扇區(qū),可以是K,M,G,輸入這一步,就結(jié)束了;可以保存退出了;

//溫馨提示:fdisk操作的時候,按刪除鍵會出現(xiàn)無法刪除現(xiàn)象,使用 ctrl+u 或 ctrl+刪除鍵 即可刪除

# ll /dev/sdb* //查看磁盤生效沒

-----------------------------------------------------------------------------

案例2:創(chuàng)建一個分區(qū)使用硬盤所有空間

創(chuàng)建分區(qū)哪一步,輸入n后,一路回車,就是使用了磁盤所有空間;

======================================================================

要想使用磁盤,分區(qū)完還需要接著格式化,掛載后,才能使用。

格式化:? 創(chuàng)建 make 文件系統(tǒng) filesystem

mkfs 創(chuàng)建文件系統(tǒng)

mkfs 磁盤或分區(qū)

mkfs.xfs /dev/sdb1 //.,點后的xfs,文件系統(tǒng)格式,也可以寫成mkfs -t xfs

mkfs.xfs /dev/sdb //如果沒有劃分分區(qū),直接上硬盤名也行

//格式化時候,系統(tǒng)會自動創(chuàng)建inode和block

//-f,強制選項,如果格式化時候,磁盤有一個文件系統(tǒng)了,就需要加上否則無法格式化,提式你有一個文件系統(tǒng)了

mkfs.ext4

======================================================================

掛載

掛載:給設(shè)備指定入口

使用方法:mount 設(shè)備 入口

入口:掛載點,一般就是個空目錄;

mount /dev/sdb1 /mnt //這就掛載上了,臨時掛載

//檢查

df -h //查看有沒有這個磁盤的掛載信息,有就成功了

//卸載

umount 入口

umount /mnt

選項:-lf,強制卸載

------------------------------------------------------------------------------------------

永久掛載

永久掛載的話,就別用/mnt目錄了;

法1,掛載命令 mount /dev/sdb1 /data/ 寫入到/etc/rc.local,入口最好寫絕對路徑;

法2,寫入到開機自動掛載文件/etc/fstab; filesystem table文件系統(tǒng)的掛載表;

/etc/fstab每一列含義:

[root@web01 ~]# cat /etc/fstab

/dev/mapper/centos-root / xfs defaults 0 0

第一列:設(shè)備名字/dev/sdb1或UUID形式,UUID就是每個設(shè)備的唯一標識號碼;

//blkid可以查看UUID;

第二列:掛載點;

第三列:文件格式,文件系統(tǒng)類型,常見的xfs/ext4;

第四列:defaults,一般都是defaults,是掛載參數(shù),掛載選項;

第五列:0,是否備份;

第六列:0,是否檢查;

本例的內(nèi)容就這樣寫:

/dev/sdb1 /data/ xfs defaults 0 0

//書寫時候注意,平時用空格分隔,總是重啟失敗,用tab鍵分隔,就可以正常重啟掛載;

掛載光盤

mount /dev/cdrom /mnt/ //掛載后會提示,只能讀,不能寫;

ls -l /mnt/Packages/*.rpm |wc -l //查看多少安裝包

---------------------------------------------------------------------------

擴展,隨后研究LVM如何實現(xiàn)動態(tài)擴展分區(qū)空間.lvm邏輯卷;

邏輯卷使用建議:

優(yōu)點:可以動態(tài)調(diào)整分區(qū)大小;

缺點:軟件實現(xiàn),效率較低;

工作中可以搭配raid+lvm使用,來提高些效率;

或者直接raid部署系統(tǒng),不使用lvm;

======================================================================

下面介紹parted命令

案例:創(chuàng)建GPT分區(qū),大小10MB

//查看

parted /dev/sda print

//進入交互模式操作:

parted /dev/sdc //這就進入磁盤了

(parted) print //查看信息

//創(chuàng)建分區(qū)表gpt格式,或者mklabel gpt一樣,注意,mbr叫做msdos類型

(parted) mktable gpt

//創(chuàng)建分區(qū)10mb

(parted) mkpart primary 0 10

Warning: The resulting partition is not properly aligned for best performance.

Ignore/Cancel? i

//刪除分區(qū)

(parted) rm 1

(parted) p

//退出編輯

q或quit

======================================================================

SWAP

swap:交換分區(qū),內(nèi)存不足時,臨時充當內(nèi)存,占用的磁盤空間;

案例:服務(wù)器運行java程序,突然占用大量內(nèi)存,以至于占用swap空間了;如何解決?

第一,保證網(wǎng)站正常,增加swap空間;

第二,聯(lián)合開發(fā)一起排查導致這樣的原因;

-------------------------------------------------------------

實例演示如何創(chuàng)建添加掛載SWAP

創(chuàng)建SWAP:

1,創(chuàng)建指定大小的文件;比如1G;

2,把文件轉(zhuǎn)化為swap;

3,激活這個swap,把它加入到Linux中;

4,記得配置永久掛載;

1,創(chuàng)建指定大小的文件

dd if=/dev/zero of=/tmp/1g bs=1M count=1024

[root@web01 ~]# ll -h /tmp/1g

[root@web01 ~]# file /tmp/1g

/tmp/1g: data

2,把文件轉(zhuǎn)化為swap;類似于格式化

mkswap /tmp/1g

[root@web01 ~]# file /tmp/1g

/tmp/1g: Linux/i386 swap file (new style), version 1 (4K pages), size 262143 pages, no label, UUID=39974129-be6a-451f-99ef-1c2602130470

3,激活這個swap,把它加入到Linux中;

//查看內(nèi)存信息

//top,free -h

[root@web01 ~]# free -h

[root@web01 ~]# swapon /tmp/1g

swapon: /tmp/1g: insecure permissions 0644, 0600 suggested.

[root@web01 ~]# free -h //可以看到,激活成功并已加入Linux;

//swapoff,卸載

4,永久掛載swap;

方案一:swapon /tmp/1g 寫入到/etc/rc.local里;

方案二:寫入到/etc/fstab:/tmp/1g swap swap defaults 0 0

======================================================================

企業(yè)分區(qū)方案

公有云;

物理機/虛擬機(私有云);

--------------------------------------------------------------------

服務(wù)器存放的數(shù)據(jù),不重要:

分區(qū)方案:

/根分區(qū):所有剩余空間;

/boot/ 引導分區(qū):存放引導文件,存放系統(tǒng)內(nèi)核鏡像;推薦1G即可,用得很少,200M就夠了;

--------------------------------------------------------------------

swap:公有云可以不配置,如果是java建議配一點;大小可以根據(jù)實際內(nèi)存調(diào)整,實際內(nèi)存>8G,swap可以配8G,實際內(nèi)存<8G,可以實際內(nèi)存*1.5(2倍)配置,最大別超過8G;

--------------------------------------------------------------------

服務(wù)器存放的數(shù)據(jù),重要:

分區(qū)方案:

/根分區(qū):40G-200G(參考公有云服務(wù)器),主要安裝一些軟件,重要數(shù)據(jù)單獨存放;

/boot/ 引導分區(qū):存放引導文件,存放系統(tǒng)內(nèi)核鏡像;推薦1G即可,用得很少,200M就夠了;

swap:公有云可以不配置,如果是java建議配一點;大小可以根據(jù)實際內(nèi)存調(diào)整,實際內(nèi)存>8G,swap可以配8G,實際內(nèi)存<8G,可以實際內(nèi)存*1.5(2倍)配置,最大別超過8G;

/data/:剩余所有空間;

--------------------------------------------------------------------

不知道是否重要:

/boot/:這三塊參照上述分區(qū)方案;

swap:這三塊參照上述分區(qū)方案;

/根分區(qū):這三塊參照上述分區(qū)方案;

剩余空間不劃分:未來誰使用誰劃分;

======================================================================

磁盤空間不足故障案例

案例1:正??臻g不足;

這種情況最簡單,現(xiàn)像:df -h一看,某個磁盤分區(qū)使用率達到了100%,如何排查,如何處理?

模擬:創(chuàng)建1個大文件;

dd if=/dev/zero of=/var/log/nginx.log bs=1M count=2000

df -h //排查第1步,先整體看一下,磁盤哪里空間沒了;

du -sh //詳細查看目錄所占空間

[root@web01 ~]# du -sh / //查看根所占空間,看不了其他的;

[root@web01 ~]# du -sh /* //看根下第一級目錄所占的空間大小;

//找出一級目錄,接著找二級目錄,一層一層找,直到找到具體的大文件或目錄;

//找出目錄或文件后,確認是否可以刪除;

解決:能刪就刪,不能刪就只能加硬盤加空間了;

--------------------------------------------------------------------

案例2:inode引起的;

提示:no space left on device

先用df -h,查看磁盤空間發(fā)現(xiàn)沒有滿;可以懷疑inode引起的;

原因:磁盤空間不足,block導致,或者inode導致;

排查:df -i 來查看inode使用情況;

如果發(fā)現(xiàn)inode快用完了,找出這個分區(qū)中,大目錄(目錄本身大小大于1MB,du -sh目錄所占空間)就行;

找個目錄模擬與分析:

[root@web01 ~]# mkdir -p /mclind/test-inode

[root@web01 ~]# cd /mclind/test-inode/

[root@web01 test-inode]# ll -d /mclind/test-inode/

// ls -l 查看目錄大小表示目錄下面1層,文件名字大小

// 目錄占的磁盤空間:du -sh 查看 目錄下面所有文件block大小之和;

解決:確認是否可以刪除或處理;

模擬inode滿了;創(chuàng)建小文件磁盤,比如,100k,變成分區(qū),掛載使用;

dd if=/dev/zero of=/tmp/100k bs=1k count=100

mkfs.ext4 /tmp/100k //xfs不一定成功,磁盤太小的話,不會成功

mkdir -p /mclind/inode

mount /tmp/100k /mclind/inode

touch /mclind/inode/{1..10}

df -h

df -i

//這種情況不常見;

--------------------------------------------------------------------

案例3:文件未徹底刪除,磁盤空間不足;

前提:

條件1:刪除文件,需要權(quán)限,假如有權(quán)限,可以刪除,如果硬連接數(shù)為0,才是成功刪除,使用rm命令;

條件2:文件調(diào)用數(shù)也為0,文件是否被使用中(命令,或服務(wù)在使用);

排查:如何知道硬連接數(shù)是否為0,一般rm后通過ls,find查看,找不到就是沒了;

如何知道進程調(diào)用數(shù)是否為0, lsof,顯示系統(tǒng)調(diào)用與使用了哪些文件(list open file),需要用yum安裝lsof, lsof | grep 文件名

故障模擬:

現(xiàn)象:提示磁盤空間不足,no space ...

df -h ,查看提示磁盤滿了;

繼續(xù)排查:du -sh排查,這種查詢,統(tǒng)計總大小,可能發(fā)現(xiàn)沒有滿;

可以懷疑可能是文件未徹底刪除導致的;

模擬:dd創(chuàng)建文件

[root@web01 ~]# dd if=/dev/zero of=/var/log/nginx2.log bs=1M count=10000

tail -f /var/log/nginx2.log

rm -rf /var/log/nginx2.log

df -h

du -sh //查看發(fā)現(xiàn)空間占用并不是很大

接著就需要使用lsof

lsof | grep delete //在lsof中delete是一個標記,表示這個文件沒有入口,就是硬連接為0,但是還有進程或服務(wù)在調(diào)用它;

lsof | grep nginx

結(jié)束這個服務(wù),就自動釋放了這個文件,建議重啟服務(wù);

ps aux | grep tail

kill tail_pid

再次用df -h查看,磁盤已恢復;

======================================================================

磁盤其他補充:

文件系統(tǒng):磁盤中文件的存放組織方式.

常見文件系統(tǒng):

xfs:CentOS 7 默認的系統(tǒng);

ext4:CentOS 6/ubuntu默認的文件系統(tǒng);

ext3:CentOS 5 默認;

--------------------------------------------------------------------

磁盤性能常用指標:

吞吐量:就是讀寫速度,

iops:每秒讀寫次數(shù);

延遲:讀寫的時候操作延時;

--------------------------------------------------------------------

磁盤總結(jié):

磁盤的選型;

Raid級別;

磁盤分區(qū),格式化,掛載,永久掛載;

swap創(chuàng)建;

企業(yè)分區(qū)規(guī)則;

磁盤故障案例分析:空間故障,inode/block;

文件系統(tǒng);

磁盤性能指標;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容