在日常維護(hù)Linux
系統(tǒng)時(shí),磁盤(pán)空間不夠用是個(gè)挺常見(jiàn)的麻煩事。如果磁盤(pán)滿(mǎn)了,可能會(huì)導(dǎo)致程序出錯(cuò)、服務(wù)掛掉,嚴(yán)重時(shí)連系統(tǒng)都啟動(dòng)不了!不過(guò)別擔(dān)心,學(xué)會(huì)幾個(gè)常用的命令就能幫你快速定位問(wèn)題,甚至輕松解決磁盤(pán)滿(mǎn)的問(wèn)題。接下來(lái),我會(huì)介紹一些命令,幫你應(yīng)對(duì)這種情況,確保系統(tǒng)穩(wěn)定運(yùn)行。
先看一眼磁盤(pán)空間
首先,要了解當(dāng)前磁盤(pán)空間的使用情況,得使用df
命令:
df -h
-h
選項(xiàng)會(huì)以可讀性較強(qiáng)的方式顯示磁盤(pán)空間,輸出類(lèi)似:
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 100G 90G 5G 95% /
tmpfs 16G 4G 12G 25% /dev/shm
/dev/sdb1 200G 100G 100G 50% /data
從輸出可以看出,/dev/sda1
分區(qū)的使用率達(dá)到了 95%,說(shuō)明系統(tǒng)根分區(qū)的空間已經(jīng)接近滿(mǎn)了。此時(shí)我們要針對(duì)/
分區(qū)進(jìn)行排查。
查看每個(gè)目錄占用的空間
想要找出哪些目錄占用了大量磁盤(pán)空間,可以使用du
命令:
du -sh /* | sort -h
這個(gè)命令會(huì)顯示每個(gè)頂級(jí)目錄的空間占用情況,并通過(guò)sort
排序。輸出大概是這樣:
1.3G /snap
2.6G /opt
3.3G /usr
7.8G /var
通過(guò)上面的結(jié)果,我們可以快速發(fā)現(xiàn)/var
占用了7.8G
空間,可能是我們需要關(guān)注的重點(diǎn)。
找出大文件并清理
如果我們需要深入了解某個(gè)目錄或子目錄的文件占用情況,可以進(jìn)入目錄后使用find
命令來(lái)查找大文件。例如,在/var
目錄下找出所有大于100MB
的文件:
find /var -type f -size +100M
這將列出所有符合條件的文件,可以幫助我們快速定位大文件。接下來(lái),根據(jù)文件的用途決定是否刪除或者備份。
root@didiplus:~# find /var -type f -size +100M
/var/lib/docker/overlay2/d868589f060052fd1543bf393e4ebc0759e5f521384e34ead32a08f45352ba6b/diff/opt/java/openjdk/lib/modules
/var/lib/docker/overlay2/1a1009115bd48b6df32e87f305c5022ff191c45315baed88271d61c686264365/diff/opt/java/openjdk/lib/modules
/var/lib/docker/overlay2/e2b58562f389558a896f78855f4a3a4dab2967f614b054e8dc05b72aab8abe25/merged/opt/java/openjdk/lib/modules
root@didiplus:~# find /usr -type f -size +100M
/usr/local/bin/1panel
/usr/local/cloudmonitor/bin/argusagent
/usr/bin/dockerd
清理日志文件
日志文件是磁盤(pán)空間的另一個(gè)大敵,尤其是在生產(chǎn)環(huán)境中。我們可以通過(guò)以下命令查看哪些日志文件占用了大量空間:
root@didiplus:~# du -h /var/log/* | sort -rh
2.0G /var/log/journal/949ee72b23b94d4aa7e2f5f7612118d6
2.0G /var/log/journal
533M /var/log/atop
查了之后發(fā)現(xiàn),日志文件里有兩個(gè)文件夾特別大,一個(gè)是journal,另一個(gè)是atop。接下來(lái)可以根據(jù)具體情況來(lái)處理這些日志文件。
如果某些日志文件過(guò)大,可以根據(jù)需求進(jìn)行清理。比如清空syslog
文件:
sudo truncate -s 0 /var/log/syslog
或者通過(guò)logrotate
工具設(shè)置日志輪換策略,避免日志文件無(wú)限制增長(zhǎng)。
清理臨時(shí)文件
臨時(shí)文件夾通常會(huì)存放一些不必要的臨時(shí)文件,定期清理這些文件可以有效釋放空間。使用tmpwatch
或rm
命令清理/tmp
目錄:
sudo rm -rf /tmp/*
?注意,/tmp
目錄中的文件一般都是不重要的臨時(shí)文件,但清理前最好確認(rèn)沒(méi)有正在使用的程序或服務(wù)依賴(lài)其中的文件。
卸載不必要的軟件包
除了清理文件,有時(shí)不再使用的軟件包也是磁盤(pán)占用的一大來(lái)源??梢允褂?/span>dpkg
(Debian 系)或rpm
(RedHat 系)來(lái)卸載不需要的軟件包。
例如,在 Debian 系統(tǒng)中,我們可以通過(guò)以下命令查找并刪除不必要的軟件包:
sudo apt-get autoremove
sudo apt-get clean
autoremove
命令會(huì)刪除那些自動(dòng)安裝的、現(xiàn)在不再需要的依賴(lài)包;clean
會(huì)清理緩存文件。
使用lsof
查找占用空間的文件
有時(shí)候,磁盤(pán)空間被占滿(mǎn)是因?yàn)槟承┏绦蛘加昧颂嗟目臻g。你可以用lsof
命令(這個(gè)命令是用來(lái)列出所有被打開(kāi)的文件)來(lái)看看哪些文件正被這些程序占用。
例如,通過(guò)lsof命令查看被刪除的文件。
lsof | grep deleted
這個(gè)命令能幫你找出那些已經(jīng)被刪了但還被某些程序占著的文件。雖然這些文件看起來(lái)像是被刪掉了,但實(shí)際上只要相關(guān)程序還在運(yùn)行,它們就會(huì)繼續(xù)占用硬盤(pán)空間。
如果發(fā)現(xiàn)有這種情況,可以嘗試重啟相關(guān)的程序,這樣就能釋放出被占用的空間了。
通過(guò)腳本方式檢測(cè)磁盤(pán)情況
定期用腳本來(lái)檢查服務(wù)器的磁盤(pán)空間是個(gè)不錯(cuò)的方法,這樣可以早點(diǎn)發(fā)現(xiàn)磁盤(pán)快滿(mǎn)的問(wèn)題。下面有個(gè)簡(jiǎn)單的腳本,它能查看磁盤(pán)用了多少空間,如果使用率超過(guò)了80%,就會(huì)自動(dòng)發(fā)警告到釘釘上。
#!/bin/bash
# 設(shè)置警告閾值
THRESHOLD=80
# 獲取磁盤(pán)使用情況
DISK_USAGE=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')
# 獲取當(dāng)前日期時(shí)間并進(jìn)行 URL 編碼
DATE=$(date '+%Y-%m-%d %H:%M:%S')
ENCODED_DATE=$(echo "$DATE" | sed 's/ /%20/g; s/:/%3A/g')
# 檢查磁盤(pán)使用情況是否超過(guò)閾值
if [ $DISK_USAGE -gt $THRESHOLD ]; then
# 如果超過(guò)閾值,輸出警告信息
echo "$DATE - WARNING: Disk usage is above $THRESHOLD% - Current usage is $DISK_USAGE%"
# 用 curl 發(fā)送 HTTP 請(qǐng)求,代入編碼后的日期時(shí)間
curl "https://push./send/1QGmWWdzmlRD?DATE=${ENCODED_DATE}&THRESHOLD=${THRESHOLD}&DISK_USAGE=${DISK_USAGE}"
else
# 如果沒(méi)有超過(guò)閾值,輸出正常信息
echo "$DATE - Disk usage is normal: $DISK_USAGE%"
# 用 curl 發(fā)送正常信息(也可以不發(fā)送)
curl "https://push./send/1QGmWWdzmlRD?DATE=${ENCODED_DATE}&THRESHOLD=${THRESHOLD}&DISK_USAGE=${DISK_USAGE}"
fi
當(dāng)腳本發(fā)現(xiàn)服務(wù)的根目錄使用量超過(guò)80%時(shí),就會(huì)給釘釘發(fā)一條告警消息,如下圖所示。
總結(jié)
當(dāng)Linux
磁盤(pán)空間不足時(shí),首先通過(guò)df
和du
命令了解磁盤(pán)使用情況,然后使用find
查找大文件,清理不必要的日志和臨時(shí)文件,卸載不必要的包,最后考慮擴(kuò)展磁盤(pán)。掌握這些命令,你就能有效應(yīng)對(duì)磁盤(pán)空間不足的問(wèn)題,保證系統(tǒng)順暢運(yùn)行。遇到問(wèn)題不要慌,這幾個(gè)命令幫你輕松梭哈解決!