针对于OSError:[Errno 122] Disk quota exceeded问题的解决

近期在是用服务器训练的代码的时候,并未在数据盘上传过多文件,但是已经爆满,为啥呢?

在这里插入图片描述
解决方法:

进入数据盘文件目录下输入如下指令:

du -h --max-depth=1 .

在这里插入图片描述
发现缓存文件占满。
使用如下指令清理对应的缓存:

rm -rf ./.Trash-0/*

由于不能长时间关注程序得运行情况可使用如下代码,自动清理缓存:

import os
import shutil
import datetime
import logging
import time
import schedule
from pathlib import Path

# 配置日志
log_file = os.path.join(os.getcwd(), "trash_cleanup.log")
logging.basicConfig(
    filename=log_file,
    level=logging.INFO,
    format="%(asctime)s - %(message)s",
    datefmt="%Y-%m-%d %H:%M:%S"
)

# 同时显示到控制台
console = logging.StreamHandler()
console.setLevel(logging.INFO)
formatter = logging.Formatter("%(asctime)s - %(message)s")
console.setFormatter(formatter)
logging.getLogger('').addHandler(console)

def cleanup_trash():
    """清理当前目录下的 .Trash-0 目录中的所有文件"""
    
    # 获取当前目录下的 .Trash-0 目录的路径
    trash_dir = os.path.join(os.getcwd(), ".Trash-0")
    
    logging.info(f"开始清理当前目录下的 .Trash-0 目录: {trash_dir}")
    
    # 检查目录是否存在
    if os.path.isdir(trash_dir):
        try:
            # 统计清理前的文件数量和文件大小
            total_size = 0
            file_count = 0
            files_list = []
            
            for root, dirs, files in os.walk(trash_dir):
                for file in files:
                    file_path = os.path.join(root, file)
                    try:
                        file_size = os.path.getsize(file_path)
                        total_size += file_size
                        file_count += 1
                        # 收集文件信息
                        files_list.append((file_path, file_size))
                    except Exception:
                        pass
            
            # 打印清理信息
            logging.info(f"清理前: 发现 {file_count} 个文件,总大小: {format_size(total_size)}")
            
            # 打印将被删除的所有文件
            if files_list:
                logging.info("将被删除的文件列表:")
                for file_path, file_size in files_list:
                    rel_path = os.path.relpath(file_path, trash_dir)
                    logging.info(f"  - {rel_path} ({format_size(file_size)})")
            
            # 遍历并删除目录中的所有内容
            deleted_count = 0
            for item in os.listdir(trash_dir):
                item_path = os.path.join(trash_dir, item)
                try:
                    if os.path.isfile(item_path) or os.path.islink(item_path):
                        os.unlink(item_path)
                        deleted_count += 1
                    elif os.path.isdir(item_path):
                        dir_file_count = sum(len(files) for _, _, files in os.walk(item_path))
                        deleted_count += dir_file_count
                        shutil.rmtree(item_path)
                except Exception as e:
                    logging.error(f"删除 {item_path} 时出错: {e}")
            
            logging.info(f"清理完成: 已删除 {deleted_count} 个文件")
        except Exception as e:
            logging.error(f"清理过程中出现错误: {e}")
    else:
        logging.error(f"错误: {trash_dir} 目录不存在")
    
    logging.info("清理结束")
    logging.info("-" * 40)

def format_size(size_bytes):
    """将字节大小转换为人类可读格式"""
    if size_bytes < 1024:
        return f"{size_bytes} B"
    elif size_bytes < 1024 * 1024:
        return f"{size_bytes/1024:.2f} KB"
    elif size_bytes < 1024 * 1024 * 1024:
        return f"{size_bytes/(1024*1024):.2f} MB"
    else:
        return f"{size_bytes/(1024*1024*1024):.2f} GB"

def run_as_daemon():
    """将脚本作为守护进程运行,按计划执行清理任务"""
    
    # 设置每分钟执行一次的计划
    # schedule.every(1).minutes.do(cleanup_trash)
    
    # 设置每10分钟执行一次的计划
    schedule.every(10).minutes.do(cleanup_trash)
    
    logging.info("启动定时清理服务")
    logging.info("设置为每10分钟清理一次")
    logging.info("-" * 40)
    
    # 运行循环,持续检查是否有计划任务需要执行
    while True:
        schedule.run_pending()
        time.sleep(1)

if __name__ == "__main__":
    import sys
    
    if len(sys.argv) > 1 and sys.argv[1] == "--daemon":
        # 作为守护进程运行
        run_as_daemon()
    else:
        # 单次执行清理
        cleanup_trash()

在数据盘新建cleanup_trash.py将上述代码粘贴在该文件中。
添加执行权限:

chmod +x cleanup_trash.py

运行方式:

  • 单次清理
./cleanup_trash.py
  • 作为守护进程运行(每分钟清理):
./cleanup_trash.py --daemon

每次清理时,脚本会在控制台和日志文件中详细列出被删除的文件。如果你想切换到每10分钟清理一次,只需调整代码中的注释部分即可。

"oserror: not enough disk space" 是一种操作系统错误的提示信息,意为:磁盘空间不足。 当计算机的磁盘空间不足时,会导致无法进行某些操作,例如保存文件、安装软件等。这个错误信息意味着您的计算机硬盘上的可用空间已经非常有限,这可能会影响到正常使用和操作系统的运行。 磁盘空间不足的原因可能有很多,其中包括: 1. 大量文件占用空间:您的电脑上可能存储了大量的文件、照片、音乐或视频等,这些文件占用了大量的磁盘空间,导致剩余空间不足。 2. 安装过多的软件:计算机上安装过多的软件也会占用大量的磁盘空间,尤其是那些较大的软件。 3. 缓存文件堆积:一些应用程序会在计算机上生成临时文件或缓存文件,这些文件可能会占用大量的磁盘空间,如果不及时清理,也会导致磁盘空间不足。 为了解决这个问题,您可以采取以下措施: 1. 删除不再需要的文件:检查您的文件夹并删除那些不再需要的文件、照片、音乐或视频等,以释放磁盘空间。 2. 卸载不常用的软件:卸载一些您很少使用或不再需要的软件,这样可以释放一些磁盘空间。 3. 清理缓存文件:一些应用程序会生成大量的缓存文件,请定期清理这些文件,以释放磁盘空间。 4. 扩展磁盘空间:如果磁盘空间不足的问题持续存在,您可以考虑购买一个更大的硬盘或外部存储设备,以增加计算机的磁盘空间。 总之,当您遇到"oserror: not enough disk space"这个错误提示时,应该考虑采取相应的措施来释放磁盘空间,以确保计算机正常运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值