跳转到主要内容

检测硬盘上的文件损坏,以保护您的宝贵照片和音乐收藏免受缓慢退化的影响。

项目描述

检测硬盘上的文件损坏,以保护您的宝贵照片和音乐收藏免受缓慢退化的影响。

用法

进入所需的目录,并简单地调用

$ 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分钟。时代真是变化太快了!

测试

使用pytestpytest-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

  • 首次发布版本。

作者

Łukasz Langa 组装。Ben Shepherd、Jean-Louis Fuchs、Marcus Linderoth、p1r473、Peter Hofmann、Phil Lundrigan、Reid Williams、Stan Senotrusov、Yang Zhang 和 Zhuoyun Wei 做了多项改进。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

bitrot-1.0.1.tar.gz (13.7 kB 查看哈希值)

上传时间

构建分布

bitrot-1.0.1-py3-none-any.whl (11.7 kB 查看哈希值)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面