動態

詳情 返回 返回

Linux 服務器磁盤滿了?教你快速找到大文件,安全刪掉不踩坑! - 動態 詳情

1. 磁盤空間檢查基礎命令

1.1 查看磁盤使用情況

# 查看所有掛載點的磁盤使用情況
df -h


# 查看指定目錄的磁盤使用情況
df -h /home

1.2 查找大文件和目錄

# 查找當前目錄下大於100MB的文件
find . -type f -size +100M -exec ls -lh {} \;


# 查找根目錄下大於1GB的文件
find / -type f -size +1G -exec ls -lh {} \;

2. 高級大文件查找方法

2.1 使用du命令

# 查看當前目錄下最大的10個目錄
du -sh * | sort -rh | head -10


# 查看根目錄下最大的10個目錄
du -sh /* | sort -rh | head -10


# 查看特定目錄下的大文件
du -ah /var/log | sort -rh | head -20

2.2 綜合查找腳本

#!/bin/bash
# 查找系統中最大的文件和目錄
echo "=== 最大的10個目錄 ==="
du -h / 2>/dev/null | sort -hr | head -10


echo -e "\n=== 最大的10個文件 ==="
find / -type f -size +100M 2>/dev/null | xargs ls -lh | sort -k5 -hr | head -10

3. 常見大文件類型分析

3.1 日誌文件清理

# 查看日誌目錄大小
du -sh /var/log/*


# 清理舊的日誌文件(保留最近7天)
find /var/log -name "*.log" -mtime +7 -delete


# 壓縮舊日誌文件
find /var/log -name "*.log" -mtime +3 -exec gzip {} \;

3.2 緩存文件清理

# 查看緩存目錄大小
du -sh /tmp /var/tmp /var/cache/*


# 清理臨時文件
rm -rf /tmp/*
rm -rf /var/tmp/*


# 清理包管理器緩存
yum clean all    # CentOS/RHEL
apt-get clean    # Ubuntu/Debian

4. 實用清理腳本

4.1 自動化清理腳本

#!/bin/bash
# disk_cleanup.sh - 自動清理大文件腳本


LOG_FILE="/var/log/disk_cleanup.log"


# 記錄日誌函數
log_message() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> $LOG_FILE
}


# 檢查磁盤使用率
check_disk_usage() {
    local usage=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
    if [ $usage -gt 80 ]; then
        log_message "警告:磁盤使用率過高: ${usage}%"
        return 1
    fi
    return 0
}


# 清理日誌文件
cleanup_logs() {
    log_message "開始清理日誌文件..."
    
    # 刪除超過30天的日誌
    find /var/log -name "*.log" -mtime +30 -delete
    
    # 壓縮舊日誌
    find /var/log -name "*.log" -mtime +7 -exec gzip {} \;
    
    log_message "日誌清理完成"
}


# 清理臨時文件
cleanup_temp() {
    log_message "開始清理臨時文件..."
    
    # 清理過期的臨時文件
    find /tmp -type f -mtime +1 -delete
    find /var/tmp -type f -mtime +1 -delete
    
    log_message "臨時文件清理完成"
}


# 主執行流程
main() {
    log_message "=== 開始磁盤清理任務 ==="
    
    if check_disk_usage; then
        cleanup_logs
        cleanup_temp
        log_message "=== 磁盤清理任務完成 ==="
    else
        log_message "磁盤使用率過高,跳過清理操作"
    fi
}


main

4.2 定時清理任務

# 添加到crontab中定期執行
# 每週日凌晨2點執行清理
0 2 * * 0 /path/to/disk_cleanup.sh


# 每天凌晨3點檢查磁盤使用情況
0 3 * * * df -h | grep -E "(Filesystem|/)" > /tmp/disk_usage.txt

5. 安全清理注意事項

5.1 清理前檢查

# 查看文件詳細信息,避免誤刪重要文件
ls -la /var/log/
ls -la /tmp/


# 查看文件權限和所有者
ls -l /var/log/messages

5.2 驗證清理操作

# 使用dry-run模式預覽將要刪除的文件
find /var/log -name "*.log" -mtime +7 -print


# 先備份再刪除
cp /var/log/syslog /var/log/syslog.backup
rm /var/log/syslog

6. 監控和預警

6.1 磁盤監控腳本

#!/bin/bash
# disk_monitor.sh - 磁盤監控腳本


THRESHOLD=80
EMAIL="admin@example.com"


# 檢查磁盤使用率
check_disks() {
    df -h | grep -vE '^Filesystem|tmpfs|cdrom' | while read line; do
        usage=$(echo $line | awk '{print $5}' | sed 's/%//')
        partition=$(echo $line | awk '{print $1}')
        mount_point=$(echo $line | awk '{print $6}')
        
        if [ $usage -gt $THRESHOLD ]; then
            echo "警告:$mount_point 磁盤使用率 $usage%"
            # 發送郵件通知
            echo "磁盤使用率過高,請及時處理" | mail -s "磁盤警告" $EMAIL
        fi
    done
}


check_disks

6.2 創建監控服務

# 創建systemd服務用於定時監控
cat > /etc/systemd/system/disk-monitor.service << EOF
[Unit]
Description=Disk Usage Monitor
After=network.target


[Service]
Type=oneshot
ExecStart=/usr/local/bin/disk_monitor.sh
User=root


[Install]
WantedBy=multi-user.target
EOF


# 啓用服務
systemctl enable disk-monitor.service

7. 常見問題解決

7.1 已刪除但仍在使用的文件

# 查找已刪除但仍被進程佔用的文件
lsof +L1


# 重啓相關服務釋放文件
systemctl restart nginx
systemctl restart httpd

7.2 大文件恢復

# 如果誤刪了重要文件,可以嘗試使用以下方法:
# 1. 使用testdisk或photorec恢復
# 2. 檢查是否有備份
# 3. 檢查文件系統日誌
journalctl -f

8. 最佳實踐建議

  1. 定期監控:設置定期的磁盤使用情況檢查
  2. 備份重要數據:清理前確保重要數據已備份
  3. 分步清理:先小範圍測試,再大規模執行
  4. 記錄操作:詳細記錄清理過程和結果
  5. 設置閾值:建立合理的磁盤使用率預警機制

通過以上方法,可以有效地管理和維護Linux服務器的磁盤空間,確保系統穩定運行。

user avatar longlong688 頭像 linx 頭像 shuirong1997 頭像 febobo 頭像 Z-HarOld 頭像 huangmingji 頭像 geeklab 頭像 congjunhua 頭像 shimiandeshatanku 頭像 hu_qi 頭像 baidujiagoushi 頭像 beverly0 頭像
點贊 48 用戶, 點贊了這篇動態!
點贊

Add a new 評論

Some HTML is okay.