Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
48e36fb
Update README.md
aspnmy Aug 24, 2025
65c707e
更新至v4.3版本
aspnmy2024 Aug 24, 2025
aab4e26
Merge branch 'master' of https://github.com/aspnmy/ColDataRefresh
aspnmy2024 Aug 24, 2025
d8a2444
Update README.md
aspnmy Aug 24, 2025
c62fcac
update: git-commit-msg
aspnmy2024 Aug 24, 2025
dc3eb71
Merge branch 'master' of https://github.com/aspnmy/ColDataRefresh
aspnmy2024 Aug 24, 2025
4183c8d
添加了多线程处理和内存优化功能。主要改进包括:
aspnmy2024 Aug 24, 2025
379522e
修复已知的错误
aspnmy2024 Aug 24, 2025
4947068
Update README.md
aspnmy Aug 25, 2025
50555b1
更新依赖组件
aspnmy2024 Aug 25, 2025
032ef7c
Merge branch 'master' of https://github.com/aspnmy/ColDataRefresh
aspnmy2024 Aug 25, 2025
41165f2
更新依赖关系
aspnmy2024 Aug 25, 2025
29ba673
feat: 增强日志管理和错误处理功能
aspnmy2024 Oct 22, 2025
6e3124e
fix(构建脚本): 改进pyinstaller调用方式并添加构建测试
aspnmy2024 Oct 22, 2025
bb2beb2
refactor: 重构日志路径配置并优化基准测试模块
aspnmy2024 Oct 22, 2025
87c855b
更新到v4.5版本:添加版本管理功能,实现动态版本号获取
aspnmy2024 Oct 22, 2025
bebe4e3
修复交互界面版本号显示,使用动态版本号
aspnmy2024 Oct 22, 2025
c407b4f
添加getWebSite函数,实现从GitHub获取QQ群和URL信息
aspnmy2024 Oct 22, 2025
f4a91a1
优化getWebSite函数:实现远程文件更新到本地并优先读取本地文件
aspnmy2024 Oct 22, 2025
a1a4f73
添加新版本检查功能,自动检测并提示GitHub上的最新版本
aspnmy2024 Oct 22, 2025
c2a8bff
优化requests模块依赖:添加异常处理,确保程序在模块缺失时仍能运行
aspnmy2024 Oct 22, 2025
7dfccb4
添加返回菜单功能,允许用户操作完成后返回交互界面或退出程序
aspnmy2024 Oct 22, 2025
0915654
增强操作确认机制:全盘刷新模式添加二次确认,TRIM模式添加一次确认
aspnmy2024 Oct 22, 2025
94b6eef
更新requirements.txt文件,添加依赖说明和版本要求
aspnmy2024 Oct 22, 2025
71c84c7
修正 elevate 依赖版本要求,从 1.2.0 降至 0.1.3 以匹配实际可用版本
aspnmy2024 Oct 22, 2025
2bbe035
优化确认流程:用户取消操作后返回到主菜单而不是退出程序
aspnmy2024 Oct 22, 2025
d442553
feat: 添加7-zip组件支持并优化冷数据处理工具
aspnmy2024 Oct 22, 2025
1379fda
refactor(bin): 移除7-zip相关文件并更新构建脚本
aspnmy2024 Oct 22, 2025
d13d3be
fix(build): 改进版本号读取逻辑并添加测试
aspnmy2024 Oct 22, 2025
2e7c273
feat: 更新版本至4.3.3并增强Windows 10+的TRIM优化功能
aspnmy2024 Oct 22, 2025
ab6f9c7
chore: 更新默认版本号至4.5.0并优化版本文件读取逻辑
aspnmy2024 Oct 22, 2025
62f48b2
fix: 修复版本号读取逻辑并添加测试
aspnmy2024 Oct 22, 2025
7091156
111
aspnmy2024 Oct 23, 2025
502d196
feat: 添加全盘数据覆写工具脚本
aspnmy2024 Oct 23, 2025
6d56396
feat: 添加磁盘写入测试功能和持续写入模式
Nov 24, 2025
29e855a
修复full_refresh_file函数数据写入问题,优化构建脚本,清理项目文件
Nov 27, 2025
d373f32
feat(全盘刷新): 实现完整的全盘刷新业务流程
Nov 27, 2025
165ca68
chore: 在.gitignore中添加build/目录
Nov 27, 2025
9267ca3
chore: 更新.gitignore文件,添加.trae/目录
Nov 27, 2025
e04463c
feat(FullRefreshManager): 添加盘符判断和格式化功能
Nov 27, 2025
d09a54f
feat: 升级版本至4.7.1并优化SSD冷数据维护功能
Nov 27, 2025
c714371
feat: 添加冷数据维护工具v4.71版本
Nov 27, 2025
9a9b93a
chore: 在.gitignore中添加coldatafresh目录
Nov 27, 2025
d8d0cc1
chore: 移除coldatafresh模块及其相关文件
Nov 28, 2025
340e5f7
docs: 删除GNU工具链安装指南文档
Nov 28, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
221 changes: 221 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,221 @@
# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
pip-wheel-metadata/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# Virtual environments
venv/
env/
ENV/
env.bak/
venv.bak/

# IDE
.vscode/
.idea/
*.swp
*.swo
*~

# OS
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
.codebuddy
# Logs
*.log
logs/

# Database
*.db
*.sqlite
*.sqlite3

# Environment variables
.env
.venv

# PyInstaller
*.spec

# Jupyter Notebook
.ipynb_checkpoints

# PyCharm
.idea/

# VS Code
.vscode/

# pytest
.pytest_cache/
.coverage
htmlcov/

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
bindd/
bin/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
pip-wheel-metadata/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/

# Translations
*.mo
*.pot

# Sphinx documentation
docs/_build/

# PyBuilder
target/

# IPython
profile_default/
ipython_config.py

# pyenv
.python-version

# pipenv
Pipfile.lock

# PEP 582; used by e.g. github.com/David-OConnor/pyflow
__pypackages__/

# Celery stuff
celerybeat-schedule
celerybeat.pid

# SageMath parsed files
*.sage.py

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/
.dmypy.json
dmypy.json

# Pyre type checker
.pyre/

# pytype static type analyzer
.pytype/

# Cython debug symbols
cython_debug/

# PyCharm
.idea/

# VS Code
.vscode/
*.code-workspace
# Windows
Thumbs.db
ehthumbs.db

# Folder config file
Desktop.ini

# Recycle Bin used on file shares
$RECYCLE.BIN/

# Windows Installer files
*.cab
*.msi
*.msm
*.msp

# Windows shortcuts
*.lnk

build/
bin/
dist/
test_data/
# Python
*.egg-info/
*.egg/
*.pyc

*.pyo
*.pyd
*.spec
# End of https://www.toptal.com/developers/gitignore/api/python
.venv/
build/

.trae/
coldatafresh/
78 changes: 78 additions & 0 deletions .trae/documents/修复全盘刷新功能的业务流程.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
## 问题分析

当前的全盘刷新功能存在以下问题:
1. 没有按照用户期望的业务流程执行
2. 没有询问用户是否保留已使用空间中的文件
3. 没有实现文件的临时备份和恢复功能
4. 没有实现填满可用空间的逻辑
5. 没有返回累积填入容量和最大写入速度

## 解决方案

根据用户描述的业务流程,我将重新设计和实现全盘刷新功能:

### 1. 重新设计业务流程

```
1. 获取指定目录的总容量和已使用容量
2. 询问用户是否保留已使用空间中的文件
3. 如果保留:
a. 将已使用空间中的文件复制到系统临时目录 d:\$aspnmytools
b. 删除指定目录下的原文件
4. 在指定目录下创建工作目录 $aspnmytools
5. 写入指定单位大小的数据文件(如50GB/个),直到填满可用空间
6. 记录累积填入容量和最大写入速度
7. 删除工作目录 $aspnmytools
8. 如果保留原文件:
a. 将临时目录中的文件复制回原位置
b. 删除临时目录 d:\$aspnmytools
9. 完成全盘刷新
```

### 2. 修改代码结构

- **新增函数**:
- `get_directory_stats(directory)` - 获取目录的总容量和已使用容量
- `backup_files(source_dir, backup_dir)` - 备份文件到临时目录
- `restore_files(backup_dir, target_dir)` - 从临时目录恢复文件
- `fill_available_space(directory, unit_size)` - 填满可用空间
- `calculate_max_files(directory, unit_size)` - 计算需要创建的文件数量

- **修改现有函数**:
- `full_refresh_file` - 重命名或重构,专注于单个文件的刷新
- `execute` - 修改主执行逻辑,添加全盘刷新的新流程

### 3. 实现关键功能

- **空间计算**:使用 `get_disk_space` 函数获取磁盘空间信息
- **文件复制**:使用 `shutil.copy2` 或类似函数实现文件的完整复制
- **文件写入**:使用现有的 `continuous_full_refresh_file` 函数写入数据
- **进度显示**:使用现有的 `Dashboard` 类显示进度
- **统计信息**:记录写入速度和总容量

### 4. 修改用户交互

- 在主菜单中添加全盘刷新选项
- 询问用户是否保留已使用空间中的文件
- 询问用户写入单位大小
- 显示空间信息和操作确认

## 预期效果

1. 全盘刷新功能按照用户期望的业务流程执行
2. 用户可以选择是否保留已使用空间中的文件
3. 实现了文件的临时备份和恢复功能
4. 实现了填满可用空间的逻辑
5. 返回累积填入容量和最大写入速度
6. 提高了固态硬盘的刷新效果

## 实施步骤

1. 分析当前代码结构和功能
2. 设计新的全盘刷新业务流程
3. 实现新的函数和修改现有函数
4. 添加用户交互逻辑
5. 测试新功能
6. 优化和调试

这个修改计划将确保全盘刷新功能按照用户期望的业务流程执行,提高固态硬盘的刷新效果。
55 changes: 49 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,33 @@
# ColDataRefresh
# ColDataRefresh SSD冷数据维护系统 v4.7.0

## 执行本程序 需要python3.12.0以上环境
- 首次执行记得 先运行install_dependencies.bat 安装所有依赖
智能检测固态硬盘的冷数据并解决冷数据掉速问题,带数据校验功能
[English](/README_EN.md)
- https://aspnmy.blog.csdn.net/article/details/150638290?spm=1011.2415.3001.5331

## v4.7.0 更新内容
- 修复了`full_refresh_file`模式,确保正确写入数据到磁盘
- 修复了PyInstaller构建脚本问题,确保依赖文件正确打包
- 确保日志保存在程序目录而不是临时目录,方便查询
- 实现了完整的全盘刷新业务流程,包括文件备份/恢复和空间填充
- 优化了全盘刷新业务流程:
- 先尝试格式化操作,失败后再进行文件删除操作
- TRIM操作放在最后一步执行,避免中间流程卡住
- 添加了自动管理员权限提升,简化用户操作
- 根据Windows版本优化了TRIM操作:
- Windows 11:执行ReTrim + SlabConsolidate + ReTrim组合操作
- Windows 10:只执行ReTrim操作
- Windows 10以下:使用DeviceIoControl方法执行TRIM操作
- 添加了重复TRIM操作避免机制,提高效率
- 增强了TRIM操作的用户提示,告知用户操作详情和注意事项
- 修复了SSL证书验证失败的问题,确保程序能在各种环境下正常运行
- 增强了日志记录和错误处理

## v4.4 更新内容
- 实现真正的TRIM功能:通过操作系统API通知SSD哪些数据块无效,提高写入性能并延长SSD寿命
- 优化了用户界面和交互体验
- 增强了跨平台兼容性支持
### 什么是冷数据
冷数据指存放在硬盘上且较长时间(如两年甚至更长)没有进行重新写入或者更新的数据,直观上以文件为单位,实际上反应到物理层面是文件对应的存储单元。通常,长时间存储在硬盘上的文档、视频、音乐、图片等静态资料都是冷数据,甚至操作系统、程序和游戏在较长一段时间内只读取过却没有修改或者更新的任何文件都会在未来“成长为”冷数据(热更新或者增量更新现在已经很成熟,一般来讲系统、游戏、应用的更新只会更新需要修改的部分,不需要修改的部分不会动)。
**注意,冷数据的形成只和写入有关,与读取频次无关,一个文件即使经常读取但是不修改写入,一样有可能成为冷数据**(这也是有人反应经常玩的游戏因为冷数据掉速导致加载变慢的原因)。
Expand All @@ -22,17 +48,34 @@
### 本工具的特点/与 `DiskFresh`等工具的区别

1. `DiskFresh`也是为处理冷数据而设计的,但是DiskFresh是基于更加底层的磁盘`Sector(扇区)`层面进行全面的覆写。其优点是更为彻底,缺点是刷新时间长,会刷新不必要的非冷数据区块,可能会缩减硬盘寿命,如果需要全盘刷新,`DiskFresh`会是更好的选择;**本工具基于文件系统层面,仅重构检测到的冷数据,可以跳过不必要的文件,并且带有CRC快速校验保证文件安全,尤其适合只需要刷新部分文件(夹)中的冷数据的情形,安全快速,最大限度取得硬盘寿命消耗和性能的平衡点。**
2. 本工具支持保存文件刷新进度,你可以随时退出并在下次继续数据刷新的操作
3. 本工具开源。
2. **实现真正的TRIM功能**:通过操作系统API(Windows的DeviceIoControl和Linux的ioctl)通知SSD哪些数据块无效,提高写入性能并延长SSD寿命
3. 本工具支持保存文件刷新进度,你可以随时退出并在下次继续数据刷新的操作
4. 本工具开源。

### 如何使用

> **请右键程序 - `以管理员身份运行`**,这是必要的,可以不授予权限,但特定文件可能会访问或者覆写失败。

1. Releases界面有编译的exe二进制文件,下载双击运行 / 你也可以从python源代码运行(你可以在代码里修改更多的配置)
2. 输入你需要扫描冷数据的目录,如`D:\DL`或者整个硬盘`D:\`(Windows用户可以选中文件夹按`Ctrl+Shift+C`复制目录地址),按下回车
3. 输入冷数据天数,如`300`,程序会扫描最后一次修改大于300天的文件。(输入0将会扫描目录下所有文件),按下回车程序即可运行。
4. **重要:如果运行中需要退出程序,请先在控制台按下`Ctrl+C`发送终止命令,否则可能会造成数据丢失!**
2. 程序提供三种模式:
- 智能模式:自动检测并刷新冷数据,保留文件原始内容
- 全盘激活冷数据模式:将文件内容替换为特定值,**此模式会导致文件内容丢失,谨慎使用!**
- TRIM模式:通知SSD哪些数据块无效,提高写入性能并延长寿命
3. 输入你需要扫描冷数据的目录,如`D:\DL`或者整个硬盘`D:\`(Windows用户可以选中文件夹按`Ctrl+Shift+C`复制目录地址),按下回车
4. 输入冷数据天数,如`300`,程序会扫描最后一次修改大于300天的文件。(输入0将会扫描目录下所有文件),按下回车程序即可运行。
5. **重要:如果运行中需要退出程序,请先在控制台按下`Ctrl+C`发送终止命令,否则可能会造成数据丢失!**

### TRIM功能说明

TRIM功能是一种高级SSD维护特性,通过通知固态硬盘哪些数据块不再有效,可以显著提高写入性能并延长SSD寿命。本工具实现的TRIM功能:

- 通过操作系统API直接与SSD通信,比文件系统级别的TRIM更加高效
- 支持Windows和Linux平台
- 在数据刷新过程中自动应用TRIM指令到相关数据块
- 不需要格式化或低级操作,安全可靠

> 注意:TRIM功能需要硬件和操作系统支持,请确保您的SSD和操作系统支持TRIM指令。

### 程序截图 Screenshots
![projectimage](./projectimage.png)

Loading