问题标签 [corruption]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
filesystems - 如何保护我的文件数据免受磁盘损坏?
最近,我读到一篇题为“SATA vs. SCSI 可靠性”的文章。它主要讨论消费级 SATA 驱动器中非常高的位翻转率,并得出结论“您现在无法从特定磁盘读取所有数据的可能性为 56%”。甚至 Raid-5 也无法拯救我们,因为它必须不断地扫描它是否有问题,如果磁盘确实死了,你几乎可以保证在重建的文件系统上有一些翻转的位。
注意事项:
我听说过 Sun 的ZFS with Raid-Z,但 Linux 和 BSD 的实现仍处于试验阶段。我不确定它是否已准备好迎接黄金时段。
我还阅读了很多关于Par2文件格式的内容。似乎与每个文件一起存储一些额外的 % 奇偶校验可以让您从大多数问题中恢复。但是,我不知道在内部执行此操作的文件系统,并且似乎很难管理单独的文件。
备份(编辑):
我知道备份是最重要的。但是,如果没有进行某种检查,您可能很容易在不知情的情况下向人们发送不良数据。此外,确定哪个备份具有该数据的良好副本可能很困难。
例如,您有一个运行了一年的 Raid-5 阵列,您发现了一个损坏的文件。现在你必须回去检查你的备份,直到你找到一个好的副本。理想情况下,您会转到包含该文件的第一个备份,但这可能很难弄清楚,特别是如果该文件已被多次编辑。更糟糕的是,考虑该文件是否在损坏发生后被附加或编辑。对于 Par2 等块级奇偶校验,仅此一项就足够了。
sqlite - 硬件相关磁盘或内存损坏的可能性?
我有几百台计算机运行一个应用程序。在一台计算机上,我看到在我从 SQLite 中提取的某些字符串上错误地设置了单个位的两个实例。如果这是我的开发计算机,我会假设我在某处有错误,但肯定有一些安装,此时我将开始看到罕见的基于硬件的错误。
这当然取决于我做了多少 IO,但是当有机会看到这种事情时,是否有任何经验法则?例如,对于 TCP 数据包,本文确定“1600 万到 100 亿个数据包中大约有 1 个”会发生无声的、未被检测到的损坏。
不幸的是,不太可能在有问题的机器上运行内存/磁盘检查器。
linux - Blackbox type data logging
In a Linux embedded application I'm developing, there is the need to record some events that happen from time to time. These records are saved on a MTD flash device and once written there is no need to change them or do efficient searches, but read access is required to show the data back to the user. A big problem is that power can go away at any time, without a proper shutdown sequence. The frequency these events occur can be very slow (days/weeks), but several of them will occur at once. The data to be saved for each event is strongly typed: date, time, a couple of short text strings and several integers.
Currently I inherited a solution based on jffs2 and SQLite that is far from optimal because the DB file sometimes get corrupted. When this happens the whole file gets unreadable and there is no way to understand if it was caused by a bug in jffs2, or in SQLite or if the flash sector was bad, or if the power was cut at the wrong time.
Is there a library or a combination of filesystem/library that can better help me solve this kind of problem ? Or should I just use a text file with a CSV-like format ?
php - 有效检测损坏的 jpeg 文件?
是否有一种有效的方法来检测 jpeg 文件是否损坏?
背景信息:
解决方案需要在 php 脚本
中工作 jpeg 文件在磁盘上
手动检查是没有选择的(用户上传的数据)
我知道imagecreatefromjpeg(string $filename);
可以做到。但是这样做的速度很慢。
有人知道更快/更有效的解决方案吗?
database - 如何修复可能的数据库损坏?
我在一个客户那里对他们的访问应用程序做一些快速修复。有一段时间我尝试了访问,但我正在迅速恢复。但是,我发现了一个有趣的问题:
对于某些报告,我收到“记录已删除”错误。我检查了报告,似乎一张桌子有问题。打开该表时,我发现所有列都标记为“#deleted”的记录。所以很明显,这一行似乎是罪魁祸首。但是,当我尝试删除该行时,并没有真正发生任何事情。如果我重新打开表,该行仍然存在。
数据库中是否存在损坏?我怎样才能永久删除此记录?
编辑:这是一个 MS2000 版本
解决方案:简单的压缩/修复不起作用。我将数据库转换为 2003 文件格式,这成功了。我已经标记了建议压缩/修复的第一个答案,因为它为我指明了正确的方向。谢谢!
c++ - 什么可以修改帧指针?
我现在在一个相当庞大的 C++ 应用程序中出现了一个非常奇怪的错误(在 CPU 和 RAM 使用以及代码长度方面非常大 - 超过 100,000 行)。这是在双核 Sun Solaris 10 机器上运行的。该程序订阅股票价格馈送并将它们显示在用户配置的“页面”上(页面是用户自定义的窗口结构 - 该程序允许用户配置此类页面)。在其中一个底层库变为多线程之前,该程序一直可以正常工作。受此影响的程序部分已相应更改。关于我的问题。
大约在每三次执行中,程序将在启动时出现段错误。这不一定是硬性规则——有时它会连续崩溃 3 次,然后连续工作 5 次。有趣的是段错误(阅读:痛苦)。它可能以多种方式表现出来,但最常见的情况是函数 A 调用函数 B,进入函数 B 时,帧指针会突然设置为 0x000002。功能一:
这是一个简单的信号实现。impl_ 和 _A_a1 在崩溃时的框架内定义良好。在实际执行该指令时,我们最终到达程序计数器 0x000002。
这并不总是发生在该功能上。事实上,它发生在很多地方,但这是最简单的情况之一,不会留下太大的错误空间。有时会发生的情况是堆栈分配的变量会突然无缘无故地坐在垃圾内存上(总是在 0x000002 上)。其他时候,相同的代码会运行得很好。所以,我的问题是,什么可以如此严重地破坏堆栈?什么实际上可以改变帧指针的值?我当然从来没有听说过这样的事情。我能想到的唯一一件事就是在数组上越界写入,但我已经使用堆栈保护器构建了它,它应该会出现这种情况的任何实例。我在这里的堆栈范围内也很好。我也不 看不到另一个线程如何覆盖第一个线程的堆栈上的变量,因为每个线程都有自己的堆栈(这都是 pthreads)。我已经尝试在 linux 机器上构建它,虽然我没有在那里遇到段错误,但大约有三分之一的时间它会冻结在我身上。
svn - 从 Subversion 损坏中恢复
颠覆中出了点问题,现在我面临
如果我尝试从存储库进行转储。我们在这里有另一个问题Subversion Repository Error,但是那里的解决方案对我来说还不够好,因为损坏是 85 次修订。
因为损坏在一个不太重要的目录中(不在主干/分支/标签中),所以我在考虑两种解决方案:
- 从健康部分创建转储,并将其导入新存储库后,重要目录的提交差异(丢失所有修订历史记录)
- 从健康部分创建一个转储并编写一个 ruby 脚本,该脚本将检查旧存储库中所需目录的每个修订版。这将为修订创建一个差异文件,并将其提交到带有作者姓名和原始评论的新存储库。
任何意见?:)
/亚努斯西姆
svn - SVN 存储库如何损坏?
有几次,我遇到了我的一个 SVN 存储库损坏的情况,我们可以在不知道我们做了什么的情况下对项目的某些版本或分支做任何事情。所以我在问什么会导致存储库损坏?
似乎客户端之间的不兼容可能会导致问题,尤其是字符集。
mysql - mysqldump和single-transaction在同时使用DDL时如何获取正确的dump?
我是 MySQL 新手,我正在寻找使用mysqldump
. 此页面建议使用此命令行:
但是...如果您仔细阅读文档,您会发现:
在
--single-transaction
转储过程中,为确保转储文件有效(正确的表内容和二进制日志位置),其他连接不应使用以下语句:ALTER TABLE, DROP TABLE, RENAME TABLE, TRUNCATE TABLE
. 一致性读取与这些语句并不隔离,因此在要转储的表上使用它们可能会导致SELECT
执行者mysqldump
检索表内容获取不正确的内容或失败。
那么,有什么方法可以防止这种可能的转储损坏情况?即可以暂时阻止这些语句的命令。
PS:关于这个主题的 MySQL 错误条目http://bugs.mysql.com/bug.php?id=27850
memory - Windows Mobile 内存损坏
WM 操作系统是否相互保护进程内存?一个写得不好的应用程序是否会因为错误地写入第一个内存而导致其他应用程序崩溃?