检测硬盘上的文件损坏,以保护您的宝贵照片和音乐收藏免受缓慢退化的影响。
项目描述
检测硬盘上的文件损坏,以保护您的宝贵照片和音乐收藏免受缓慢退化的影响。
用法
进入所需的目录,并简单地调用
$ bitrot
这将从递归索引找到的所有文件开始挖掘。索引存储在 .bitrot.db 文件中,这是一个SQLite 3数据库。
下次运行 bitrot 时,它将添加新文件并更新修改日期已更改的文件的索引。然而,最重要的是,它将报告所有错误,例如,硬盘上已更改但修改日期相同的文件。
.bitrot.db 中存储的所有路径都是相对的,因此在将其移动到另一个驱动器后重新扫描文件夹是安全的。只需记住以不接触修改日期的方式移动它。否则,校验和数据库将毫无用处。
性能
显然取决于底层驱动器的速度。从历史上看,该脚本曾是单线程的,因为早在2013年,单核上的校验和计算速度仍然超过典型的驱动器,包括当时的移动SSD。到了2020年,这种情况已不再存在,因此脚本现在使用进程池来计算SHA1哈希值并执行 stat() 调用。
尚未进行过严格的性能测试。在2018年MacBook Pro 15”上,扫描一个总计约5GB、包含约1000个文件的目录需要2.2秒。回顾2013年,同样的操作在2015年MacBook Air上使用SM0256G SSD需要超过20秒。
在同一台2018年MacBook Pro 15”上,扫描60+GB的音乐库需要24秒。而在2013年,使用典型的5400 RPM笔记本电脑硬盘大约需要15分钟。时代真是变化太快了!
测试
使用pytest和pytest-order <https://pypi.ac.cn/p/pytest-order>提供了一个简单但全面的测试场景。
安装
$ python3 -m venv .venv $ . .venv/bin/activate (.venv)$ pip install -e .[test]
运行
(.venv)$ pytest -x ==================== test session starts ==================== platform darwin -- Python 3.10.12, pytest-7.4.0, pluggy-1.2.0 rootdir: /Users/ambv/Documents/Python/bitrot plugins: order-1.1.0 collected 12 items tests/test_bitrot.py ............ [100%] ==================== 12 passed in 15.05s ====================
变更日志
1.0.1
正式移除了自1.0.0以来已损坏的Python 2支持;现在该软件包与Python 3.8+兼容,这是由于几个特性
1.0.0
通过使用进程池执行器来计算SHA1哈希值和执行stat()调用,显著提高了在固态驱动器上的执行速度;如果您的慢速磁驱动器运行受到此更改的负面影响,请使用-w1
通过将所有SQLite存储的哈希值预先加载到内存中,并使用Python集合进行比较来提高执行速度
现在数据库中的所有UTF-8文件名都规范化为NFKD,以启用跨操作系统的检查
SQLite数据库现在已真空处理,以最小化其大小
错误修复:在遇到Unicode名称时添加了额外的Python 3修复
0.9.2
错误修复:代码中的一个地方错误地将UTF-8硬编码为文件系统编码
0.9.1
错误修复:打印出使用FSENCODING无法解码的路径
错误修复:在传递-c参数时,不要隐藏无法进行stat或读取的文件的警告
错误修复:-s在Python 3上不再损坏
0.9.0
错误修复:bitrot.db校验和检查消息现在遵守–quiet
Python 3兼容性
0.8.0
bitrot现在通过在.bitrot.sha512中存储.bitrot.db的校验和来跟踪其自己的数据库的bitrot
错误修复:现在正确使用文件系统编码来解码用于.bitrotdb数据库的文件名。报告和原始补丁由pallinger提供。
0.7.1
错误修复:SHA1计算现在在Windows上正确工作;之前以文本模式打开文件。此修复将更改包含一些特定字节(如0x1A)的文件的哈希值。
0.7.0
当文件更改或重命名时,最后检查的时间戳也会更新
错误修复:现在正确忽略在运行期间消失的文件
错误修复:跳过锁定或以其他方式拒绝访问的文件。如果之前已读取,它们将在报告中被认为是“缺失”的。
错误修复:如果扫描的目录树中有多个具有相同内容的文件,现在将正确处理它们的重命名
重构了一些非常糟糕的代码,使其变得不那么糟糕
0.6.0
使用--commit-interval和--chunk-size命令行参数获得更多对性能的控制
错误修复:现在正确跳过符号链接(或如果传递了--follow-links,则可以跟随)
错误修复:现在优雅地跳过无法打开的文件
错误修复:在空目录中运行时修复了罕见的不为零除法错误
0.5.1
错误修复:仅在测试模式下警告测试模式
0.5.0
--test命令行参数用于在不更新磁盘上的数据库的情况下测试状态(适用于您没有写入权限的数据库)
完成时报告读取的数据大小
一些性能更新
0.4.0
现在将重命名报告为重命名
现在跳过所有非常规文件(例如符号链接、管道、套接字)
以百分比的形式显示进度
0.3.0
--sum命令行参数,用于轻松比较多个数据库
0.2.1
从0.2.0版本开始,新文件导致出现KeyError异常的固定回归
0.2.0
--verbose 和 --quiet 命令行参数
如果文件不再存在,则从数据库中删除其条目
0.1.0
首次发布版本。
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源分布
构建分布
bitrot-1.0.1.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d170c42a7b375350d1b0a49dee44e3e59285021b80ba014a641ded8d23e1d5c9 |
|
MD5 | ab20267b7050bfb38f1d08a6c2e1fdf8 |
|
BLAKE2b-256 | 055a948160fad98ab13a7eeb1e1011a24a6b99fb2007e3456eae2bec4aaa55d1 |
bitrot-1.0.1-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1ab725abdfb01acddaeda68ae0b6d5341c0a0506148d2fdfe28e7a217be378d6 |
|
MD5 | f8e1fabae7d282a3e33a53f7c87e1b74 |
|
BLAKE2b-256 | 8aecf88233ba4e60e02dfdcbe4a73194116c6c4c84999b64154a4794794bc323 |