問題#
最近在虛擬機上存儲文件時發現預留的 10G 虛擬磁盤竟然佔滿了,於是來清理一下空間。
步驟#
- 查看磁盤佔用情況
sudo df -h
可以發現 /dev/sda1 空間已經使用 7.4G, 這是清理後的容量。
/dev/sda1
是 Linux 中的一個塊設備文件,通常用於表示硬盤分區。在 Linux 中,硬盤通常被表示為/dev/sd*
的形式,其中*
表示一個小寫字母,例如/dev/sda
、/dev/sdb
等。
當一個硬盤被分成多個分區時,每個分區都會被分配一個設備文件,用於表示分區。其中,
/dev/sda1
表示第一個分區,/dev/sda2
表示第二個分區,以此類推。
- 查看硬盤中大文件
sudo du -ah . | sort -rh | head -n 10
du
命令可以查看指定目錄或文件的磁盤使用情況,包括文件大小和目錄大小等。可以使用-h
選項以人類可讀的方式顯示文件大小。例如,以下命令將在當前目錄中查找並列出所有文件和目錄的大小,並按照大小排序:
在這個命令中,
-a
表示列出所有文件和目錄的大小,-h
表示以人類可讀的方式顯示文件大小,.
表示當前目錄,可以改為你想查詢的目錄名,sort -rh
表示按照大小逆序排序,head -n 10
表示只顯示前 10 條結果。
- 分別使用命令清理大文件
發現/usr
佔用較多,但是經過清理之後發現容量幾乎沒有變化,可以考慮跳過。同時目錄包含了大量的用戶安裝的程序、庫文件和其他資源,因此清理該目錄需要謹慎操作,以免意外刪除了重要文件,導致系統出現問題。接下來講解命令的使用。
- 刪除不需要的語言文件:
sudo apt autoclean
- 刪除所有不再需要的包:
sudo apt autoremove --purge
- 刪除不再需要的依賴項和配置文件:
sudo apt clean
接下來清理 /var
var
是variable(變量)
的縮寫,這個目錄中存放著在不斷擴充著的東西,我們習慣將那些經常被修改的目錄放在這個目錄下。包括各種日誌文件。
. /lib/docker/overlay2
目錄是 Docker 存儲驅動程序中的一個重要目錄,用於存儲 Docker 鏡像和容器的文件系統層。在使用 Docker 時,該目錄的大小可能會逐漸增加,佔用大量磁盤空間。刪除不需要的 Docker 鏡像和容器,或者使用 Docker 的清理命令來清理無用的數據。以下是一些常用的 Docker 清理命令示例:
- 列出所有已停止的容器:
sudo docker ps -a -q -f status=exited
- 刪除所有已停止的容器:
sudo docker rm $(sudo docker ps -a -q -f status=exited)
- 列出所有未被使用的鏡像:
sudo docker images -q -f dangling=true
- 刪除所有未被使用的鏡像:
sudo docker rmi $(sudo docker images -q -f dangling=true)
- 清理所有未被使用的數據:
sudo docker system prune -a --volumes
請注意,在清理 Docker 數據時,最好備份一下需要保留的 Docker 鏡像和容器,以防誤刪重要數據。
使用 logrotate
工具來自動輪換和刪除舊日誌文件。logrotate
工具可以配置為按時間、大小或其他條件來輪換和刪除日誌文件,以保持日誌文件的大小和數量在可控範圍內。
- 刪除一個大文件,可以使用以下命令:
sudo truncate -s 0 /var/log/your_large_file.log
- 此命令將把
/var/log/your_large_file.log
文件的大小截斷為零,即清空該文件。然後運行logrotate
命令來輪換和歸檔舊日誌文件:
sudo logrotate -f /etc/logrotate.conf
-f
參數將強制 logrotate
立即執行輪換操作,即使當前不需要輪換文件。/etc/logrotate.conf
是 logrotate
的默認配置文件路徑,可以根據需要使用不同的配置文件路徑。
請注意,在使用 truncate
命令時,最好備份一下將要清空的文件,以防萬一需要恢復文件內容。
使用 journalctl
工具來清理舊的日誌消息和數據。journalctl
工具可以按時間、優先級、來源和關鍵詞等過濾日誌消息,以及限制日誌消息的數量和時間範圍。以下是一些常用的 journalctl
命令示例:
- 顯示最近的 100 條系統日誌信息:
sudo journalctl -n 100
- 顯示某個服務的日誌信息:
sudo journalctl -u your_service_name
- 顯示某個時間範圍內的日誌信息:
sudo journalctl --since "2022-01-01 00:00:00" --until "2022-02-01 00:00:00"
- 顯示某個進程的日誌信息:
sudo journalctl _PID=your_process_id
清理舊的日誌消息和數據,可以使用以下命令:
sudo journalctl --vacuum-size=100M
該命令將清理所有不再需要的日誌消息和數據,並將日誌文件大小限制為 100M。您可以根據需要調整 --vacuum-size
參數的值。請注意,此命令僅清理系統日誌。