我最近下载了 Debian 7.5.0 Wheezy 并设法使用 Release.sig 签名来验证使用 GPG4Win 的 Release 校验和文件的完整性。不幸的是,我找不到关于在哪里可以找到 Release 文件中的 md5/SHA1/SHA256 校验和以验证 ISO 是否正确/没有被损坏/操纵的任何建议。在支持站点上也找不到有关此特定问题的任何帮助。如果相关,我正在使用 Windows 7。
编辑:我的 ISO 文件的名称是“debian-7.5.0-amd64-netinst”。其他版本可以在这里找到(ftp://cdimage.debian.org/cdimage/release/7.5.0-live/amd64/iso-hybrid/)并提供一种更简单的方法来验证完整性,因为这个文件:ftp: //cdimage.debian.org/cdimage/release/7.5.0-live/amd64/iso-hybrid/SHA256SUMS . 我需要在我验证的发布文件中找到类似的东西。
我的问题(在带有 的脚本中#!/bin/sh)如下:为了存档目的,我尝试对目录中的所有文件进行校验和。具有所有文件名的校验和(在我的情况下为 sha1)文件应位于同一目录中。假设我们有一个~/test包含文件f1和f2:的目录。
mkdir ~/test
cd ~/test
echo "hello" > f1
echo "world" > f2
Run Code Online (Sandbox Code Playgroud)
现在计算校验和
find -maxdepth 1 -type f -printf '%P\n' | xargs shasum
Run Code Online (Sandbox Code Playgroud)
正是我想要的,它只列出当前目录的所有文件并计算 sha1 总和(maxdepth 可能会在以后更改)。STDOUT 上的输出是:
f572d396fae9206628714fb2ce00f72e94f2258f f1
9591818c07e900db7e1e0bc4b884c945e6a61b24 f2
Run Code Online (Sandbox Code Playgroud)
不幸的是,当尝试将其保存到文件时
find -maxdepth 1 -type f -printf '%P\n' | xargs shasum > sums.sha1
Run Code Online (Sandbox Code Playgroud)
生成的文件显示自身的校验和:
da39a3ee5e6b4b0d3255bfef95601890afd80709 sums.sha1
f572d396fae9206628714fb2ce00f72e94f2258f f1
9591818c07e900db7e1e0bc4b884c945e6a61b24 f2
Run Code Online (Sandbox Code Playgroud)
因此在稍后失败shasum --check,因为在保存最后一个总和时附加文件修改的明显问题。
我环顾四周,通过使用-p标志 for xargs,我发现它甚至在执行 find 命令之前以某种方式创建了输出文件,因此找到了附加文件并将进行校验......
我知道作为一种解决方法,我可以将校验和保存到另一个位置(通过 临时目录mktemp)或专门在 find …
据我所知,即使更改一点文件,也会更改整个校验和结果,但是当我更改文件名时,这不会影响其校验和(我尝试过 SHA-1、SHA-256 和 MD5)。
为什么?文件名不是文件数据的一部分?它依赖于文件系统吗?
我想为我的应用程序存储文件的 SHA512 校验和。如何以共同(流行)的方式做到这一点?所以这个校验和可以被第三方应用程序使用。
我只是尝试从他们的.iso文件中刻录 Debian CD和Debian DVD,但我有一个奇怪的行为:CD 的校验和是正确的,但 DVD 的校验和不正确。
这是有效的:
通过发出以下命令验证 CD 是否正确:
dd if=/dev/sr0 | md5sum(或 sha-1 或 sha-256)
这工作正常:我通过使用dd和管道输入 md5、sha-1 或 sha-256从 CD 获得的校验和与官方校验和匹配。
现在我不明白的是,我确实从 DVD .iso刻录了一张DVD——并且我知道该文件已正确下载,因为.iso 文件校验和是正确的。
但是,如果我将 DVD 放入驱动器并发出相同的命令:
dd if=/dev/sr0 | md5sum (or sha-1 or sha-256)
Run Code Online (Sandbox Code Playgroud)
然后我得到一个伪造的校验和。
DVD看起来仍然正确,因为文件似乎都在那里。
所以这是我的问题:我可以通过使用dd并将其输出通过管道传输到 md5sum(或 sha-1 或 sha-256)来验证 DVD 是否已正确刻录,或者是否有一些“特殊”可以使dd用于验证刻录的 CD但不是刻录的 DVD?
*(请注意,我在 …
我在硬盘驱动器上运行 Ext4,老实说,我不太信任驱动器,因为它很旧并且有一些坏块。我在驱动器上有不必要的数据,所以如果它明天死了,那就没什么大不了的。
但是,我想知道它是否/何时开始死亡,并以只读方式重新安装。是否有任何选项可以在 Ext4 fs 上启用额外的文件检查?(我不在乎它是否会使文件系统变慢。)
我有一个大文件(2-3 GB,二进制,未记录格式),我在两台不同的计算机上使用它(通常我在桌面系统上使用它,但当我旅行时,我把它放在我的笔记本电脑上)。我使用 rsync 来回传输这个文件。
我不时对这个文件进行小的更新,更改不到 100 kB。这发生在两个系统上。
据我所知,rsync 的问题在于,如果它认为文件在源和目标之间发生了变化,它会传输完整的文件。在我的情况下,当文件的一小部分发生更改时,感觉就像是在浪费时间。我设想了一个协议,其中源和目标上的传输代理首先校验整个文件,然后比较结果。当他们意识到整个文件的校验和不同时,他们将文件拆分为 A 和 B 两部分,分别对它们进行校验。
啊哈,B 在两台机器上是一样的,我们忽略那一半。现在它将 A 拆分为 A1 和 A2。好吧,只有A2发生了变化。将 A2 拆分为 A2I 和 A2II 并进行比较等。以递归方式执行此操作,直到找到例如三个部分,每个部分均为 1 MB,在源和目标之间存在差异,然后仅传输这些部分并将它们插入目标文件中的正确位置。今天,有了快速的 SSD 和多核 CPU,这种并行化应该非常高效。
所以我的问题是,今天是否有任何工具可以像这样(或以我无法想象但具有类似结果的另一种方式)工作?
已发布澄清请求。我主要使用 Mac,所以文件系统是 HFS+。通常我这样启动 rsync
rsync -av --delete --progress --stats- 在这种情况下,我有时使用 SSH,有时使用 rsyncd。当我使用 rsyncd 时,我是这样启动的rsync --daemon --verbose --no-detach。
第二个说明:我要求使用一个工具来传输存在于两个位置的文件的增量,并且/或者 rsync 是否真的提供了这个。我对 rsync 的经验是它可以完整传输文件(但现在有一个答案可以解释这一点:rsync 需要一个 rsync 服务器才能仅传输增量,否则(例如,使用 ssh-shell)它会传输整个文件文件,但发生了很大变化)。
这里发生了什么?目录名和/或文件名中的反斜杠似乎会导致各种校验和实用程序报告以反斜杠斜杠开头的哈希值。
请注意,coreutilwc不会以这种方式运行。
行为符合预期:
#ppd# ls -1a
.
..
#ppd# mkdir a\\b
#ppd# ls -1
a\b
#ppd# for i in 1 2 3; do echo $i > a\\b/c$i; done
#ppd# ls -1 a\\b/c*
a\b/c1
a\b/c2
a\b/c3
#ppd# cat a\\b/c*
1
2
3
#ppd# wc --version
wc (GNU coreutils) 8.13
#pre# wc a\\b/c*
1 1 2 a\b/c1
1 1 2 a\b/c2
1 1 2 a\b/c3
#ppd# cd a\\b/
#ppd# md5sum --version
md5sum (GNU coreutils) 8.13
#ppd# md5sum c*
b026324c6904b2a9cb4b88d6d61c81d1 c1 …Run Code Online (Sandbox Code Playgroud) 想象一个文件在单个设备 Btrfs 上损坏的情况。在这种情况下,需要文件内容,包括损坏的位。
如安装手册页所述:
nodatasum
Enable/disable data checksumming for newly created files.
Run Code Online (Sandbox Code Playgroud)
所以它不会在读取文件时禁用校验和检查。
而且我猜所有涉及文件系统读取的标准系统调用都会在这个文件中失败。由于可能存在碎片,因此无法选择原始磁盘读取。
当我尝试cat此类文件时,出现错误:
cat: file: Input/output error
Run Code Online (Sandbox Code Playgroud)
dmesg 报告这样的消息:
[631847.884641] BTRFS warning (device loop0): csum failed ino 257 off 0 csum 1280268577 expected csum 2391276770
Run Code Online (Sandbox Code Playgroud)
有在 发生损坏的信息off 0,所以这是文件的前 4096 字节,确实我能够很容易地检索未损坏的块:
dd if=file bs=4K skip=1
Run Code Online (Sandbox Code Playgroud)
顺便说一句,将数据写入和附加到损坏文件的未损坏块也成功。至少当只有一个损坏的块并且它不是最后一个时。起初它让我感到惊讶,但后来我认为这可能是一个很好的功能,因此必须附加关键数据的应用程序不会停留在损坏的文件上。
问题是如何从损坏的块(或整个损坏的文件)中检索数据?
我试图确定使用bzip2压缩需要 100% 可重现的文件是否存在任何潜在问题。具体做法是:罐的元数据(名称/索引节点,的lastmod日期等)或任何其他原因相同的文件内容,以产生不同的校验和对所得.bz2的存档?
例如,除非使用gzip,否则默认情况下不是确定性的-n。
到目前为止,我的粗略测试表明,在给定相同的输入数据(无论元数据、平台、文件系统等)的情况下,bzip2 确实始终如一地生成相同的文件,但如果有更多轶事证据就更好了。