如何在损坏的Ubuntu ISO中识别和替换损坏的文件?


14

因此,这不是运行Ubuntu的问题,而是安装它的问题。

每次我尝试从任何来源下载Ubuntu ISO时,它似乎都损坏了。也就是说,MD5的总和永远都不正确。

Ubuntu ISO文件附带一个文件,该文件列出了ISO中的所有文件以及它们各自的MD5SUM。

我希望做的是遍历此文件,并将其与ISO中的文件进行比较,找出哪些文件已损坏,希望我可以从其他iso文件之一中提取损坏的文件,以创建一个工作的安装程序。

但是,我不知道如何执行此操作,当然,更糟糕的是,我必须从Windows 7中执行此操作。

有谁知道如何解决这一问题?


Jigdo(Debian的首选方式)不应该能够做到这一点吗?现在的主要目的是通过更新ISO内的软件包来对ISO上的点发布进行增量更新。关于Debian ISO和Jigdo
gertvdijk 2013年

@gertvdijk不适用于Ubuntu的桌面ISO,因为它们大多只包含一个文件(请参阅我的回答)。这就是为什么桌面ISO .jigdo在下载服务器上没有关联文件的原因。备用CD和服务器CD ISO 确实具有.jigdo文件。桌面ISO具有Ubiquity安装程序,该安装程序的工作原理是将实时CD系统写入磁盘,然后对其进行更改,以便为正常(安装)使用做好准备。
伊莱亚·卡根

@EliahKagan有意义。好的,在那种情况下,是否应该没有PAR奇偶校验块文件来修复完整的ISO?这样会更高效,更容易且更通用。“ Parchive最初是为解决在Usenet上可靠传输文件的问题而编写的,但现在通常用于保护任何类型的数据免遭数据损坏,位腐烂以及意外或恶意破坏。”
gertvdijk

1
为什么PAR会比以下更好zsync?即使PAR受到Ubuntu项目的正式支持(就像zsync是),是否还有明显的优势?关于jigdo:它适用于备用CD和服务器CD。他们使用debian-installer,创建基础系统,chroot和安装软件包。因此,它们的所有.deb文件都位于程序包池中(在桌面CD上仅包含很少的文件)。它们可以很容易地用.jigdo(或其他方法)组装。您可能想jigdo为服务器/备用服务器发布基于答案的答案,以了解如何仅下载损坏的文件。
伊莱亚·卡根

1
@EliahKagan应该提到-PAR可以脱机执行操作,例如“您需要3个奇偶校验块进行修复”,并向它们提供“可以,完成操作...完成!”。Zsync实际上需要一个完整的完整副本(在这种情况下为远程)。但是,是的,原理是一样的。顺便说一句,我认为Zsync可以gzip很好地处理ed存档,但是我认为,在SquashFS上,这种智能是无用的吗?无论如何,对于Ubuntu ISO而言,zsync确实是必经之路。
gertvdijk

Answers:


34

其实我知道哪个文件损坏了

尝试将多个损坏的ISO映像中的文件合并为一个良好的ISO映像不是解决此问题的好方法。这就是为什么。

ISO映像中的几乎所有数据属于一个文件casper/filesystem.squashfs

即在Ubuntu桌面CD或DVD ISO映像上。在服务器CD映像或备用CD映像上,情况有所不同。

Ubuntu 12.10 i386桌面CD上的filesystem.squashfs的Nautilus属性

因此,我现在可以告诉您几乎确定在您下载的每个ISO上损坏了哪个文件:该文件,在所有文件上。当Ubuntu ISO中的某些内容损坏时,坏字节几乎总是在那里。

filesystem.squashfs本身磁盘映像; 它是在实时CD上引导系统时安装的。您可以潜在地从ISO中提取它,然后提取内容,查看损坏的内容并替换损坏的文件。尽管您可以在Windows上挂载或提取squashfs文件系统,但您可能会发现这样做并非易事。而且此映像已压缩,因此无法保证包含的ISO中的轻微损坏不会影响多个文件。

此外,如果您尝试多次下载ISO映像并且该映像始终损坏,则可以确定它不仅仅是轻微损坏。如果您尝试以这种方式进行操作,则可能必须替换成百上千个文件。

相反,您应该使用更可靠的方法下载ISO映像。

方便地,其中一个(zsync)与您的想法类似,不同之处在于它只会下载必要的ISO文件,而不仅仅是下载其中包含的必要文件。

确保您正在与正确的MD5哈希进行比较

当您的MD5总和不正确时(尤其是在您再次下载文件后出错),第一件事就是要确保将其与正确文件的MD5哈希值进行比较。

我的猜测是

  • 您有一个12.04 LTS映像,并且正在使用MD5哈希处理12.04.1 LTS映像
    (这不是同一文件),或者
  • 您有一个12.04.1 LTS映像,并且正在使用MD5散列用于12.04 LTS映像,或者
  • 您有一个32位(“ i386”)图像,并且您正在使用MD5哈希作为64位图像,或者
  • 您有一个64位(“ amd64”)图像,而您正在为32位图像使用MD5哈希。

每个文件的MD5哈希列表在此处。

通常,如果您的MD5哈希错误,但对于多个下载而言却相同,通常

  • 您正在与错误的哈希进行比较,或者
  • 该文件在服务器上已损坏(因此,如果是这种情况,请从其他镜像下载,并且,如果愿意,请针对ubuntu-website-content报告错误,以解决问题),
  • 您正在使用缓存Web内容的代理或VPN,并且以某种方式缓存了损坏的副本(从另一个镜像下载也可以解决此问题),或者
  • 您通过FTP下载时,服务器或FTP客户端出现问题,导致文件以文本模式而不是二进制模式传输(这会破坏文件,并且通常每次都以相同的方式破坏文件),或者
  • 您的连接被恶意的第三方故意拦截和更改,该第三方故意向您提供错误的文件(不过,这通常不太可能)。

您可以在此页面底部手动选择一个(不同的)下载镜像。

如果您的ISO映像确实已损坏,则可以通过以下几种方法来获取良好的文件。

同步

zsync(另请参阅此处)是一个实用程序,可以通过仅下载您没有正确版本的部分部分正确的文件转换为完全正确的文件。它的主要应用程序是下载略微更新的图像,例如从一个每晚构建的图像下载到另一个。

zsync工作方式是这样的:提供文件的人(例如Ubuntu项目)创建了一个.zsync包含许多校验和的文件-与文件的许多小部分相对应的校验和,而不是整个文件的一个校验和。您可以从任何内容到整个文件开始。

一无所有,整个文件被下载。对于文件的一部分(即,具有不同大小的相同名称的文件或具有任意数量的二进制差异的相同大小的文件),它可以确定需要下载哪些部分,然后下载这些部分。对于整个文件,它不会下载任何内容。

对于非常不可靠的Internet连接zsync从头开始下载整个文件并不比Web浏览器好多少,除非您愿意运行两次或更多次,在这种情况下,以后的运行将纠正早期运行中的问题。对于所有错误率最高的Internet连接,在文件上运行zsync两次(偶尔运行3次)应该足够了。

但是您不必担心zsync多次运行。既然您已经(大概)已经拥有大部分文件,那么这应该不是问题。和往常一样,如果zsync给您某些损坏的东西,您可以随时zsync再次运行以修复它。

获取zsyncWindows

zsync传统上是在类似Unix的系统上运行(实际上不包括Windows)。但是,最近已创建了Windows的本机Windows端口zsync,因此您可以使用它。

zsync是一个命令行程序,因此在Windows中,您可以在命令提示符下运行它。(打开命令提示符的一种方法是cmd.exe在“开始”菜单中键入文本框,然后按Enter。或者,在Windows XP和更早版本中,单击“开始”>“运行”> cmd.exe。)

另一种方式:获取zsyncCygwin

如果您的Windows端口有任何问题zsync,可以随时使用Cygwin版本。Cygwin为Windows提供了一个类似Unix的环境。它不允许运行已编译的可执行文件(例如,您不能zsync从Ubuntu软件包中使用),而是使用从源代码为其编译的程序的特殊版本。(在Cygwin中编译为类Unix操作系统编写的程序要容易得多,要比在Windows上本地运行要容易得多。)

  1. 首先,从此处获取Cygwin的安装程序(setup.exe(或使用此直接链接)。
  2. 运行它,在第一个屏幕上单击“ 下一步 ”,然后选择“ 从Internet安装”,然后再次单击“ 下一步”
  3. 在接下来的两个屏幕上,将Cygwin和本地软件包目录放在您喜欢的任何位置(默认情况下通常很好)。
  4. 选择您的Internet连接类型(通常使用Direct Connection是很好的选择),然后setup.exe将下载镜像列表。
  5. 选择任何镜像,它将下载可用软件包的列表。您可能会被警告该版本与上一个版本有何不同。除非您在同一台计算机上使用了以前版本的Cygwin,否则这不是问题。

    有关您是如何首次安装此特定版本的Cygwin的设置警报消息。 如果您以前从未使用过Cygwin,则可以忽略。 如它所说:“如果这是您第一次在该系统上安装Cygwin,则可以忽略此消息。”

  6. 现在,您可以选择要安装的软件包。有一个文本框,用于按名称搜索软件包。类型zsync有(但Enter--IF你做什么,这就像单击下一步)。将出现一个Net条目。通过单击+左侧的展开它,您将看到“ 跳过”出现在其下方。这意味着,如果您不进行任何更改,setup.exe不会安装zsync

    Velma Dinkley在Cygwin中安装zsync,同时更新了“ Siren's Song”中的博客。

  7. 因此,单击一次,显示“ 跳过”。现在,它将安装zsyncCygwin 的最新可用稳定版本。

    在此处输入图片说明

  8. 再次单击“ 下一步”完成安装。Cygwin环境和zsync将会下载并安装。(如果要求您安装作为依赖项所需的软件包,请继续安装。)

安装完成后,打开Cygwin外壳。您可以zsync从那里运行。

参考文献

请注意,尽管您可以在Cygwin邮件列表中发布有关Cygwin 的问题(在阅读了该内容以及它告诉您阅读的材料之后),但可以理解的是,他们支持非官方的说明。cygwin拥有非常好的文档,因此像其他具有良好的集中文档的项目(例如OpenBSD)一样,他们希望寻求帮助的人们将阅读该文档并正在使用(或至少非常熟悉)它。

(因此,如果您对我的说明有任何疑问,最好的询问地点可能在这里。)

zsync 在Ubuntu上

这不适用于您的特定情况,但是对于想zsync在Ubuntu 上使用的人,只需安装zsync即可安装zsync。可以在软件中心中执行此操作,也可以在终端窗口(Ctrl+ Alt+ T)中运行此操作:

sudo apt-get update && sudo apt-get install zsync

现在,您可以从终端运行它。

相关:如何使用zsync更新ISO?

使用zsync修复已损坏的ISO映像

在命令提示符下,转到包含损坏的ISO文件的目录。(您可以cd用来更改目录,与Ubuntu相同。dir用于列出目录的内容。)确保您拥有的文件具有与获取时相同的文件名。

现在以zsync下列方式之一运行,具体取决于它是哪个Ubuntu ISO映像:

  • 12.10,32位:

    zsync http://releases.ubuntu.com/quantal/ubuntu-12.10-desktop-i386.iso.zsync
    
  • 12.10,64位:

    zsync http://releases.ubuntu.com/quantal/ubuntu-12.10-desktop-amd64.iso.zsync
    
  • 12.04.1 LTS,32位:

    zsync http://releases.ubuntu.com/12.04.1/ubuntu-12.04.1-desktop-i386.iso.zsync
    
  • 12.04.1 LTS,64位:

    zsync http://releases.ubuntu.com/12.04.1/ubuntu-12.04.1-desktop-amd64.iso.zsync
    
  • 12.04 LTS(在12.04.1点发行之前),32位:

    zsync http://old-releases.ubuntu.com/releases/precise/ubuntu-12.04-desktop-i386.iso.zsync
    
  • 12.04 LTS(在12.04.1点发行之前),64位:

    zsync http://old-releases.ubuntu.com/releases/precise/ubuntu-12.04-desktop-amd64.iso.zsync
    

一旦运行了其中一个命令,zsync就会自动将您的ISO修补到正确的版本,您可以使用了。

使用zsync其它文件

常规语法是:在服务器上运行zsync.zsync文件的完整URL,后跟该文件的完整名称,该名称与您拥有该版本并希望下载的文件的名称相同(.zsync当然,课程末尾除外)。

如果有人要对其他任何Ubuntu版本(或同一版本的其他ISO文件,例如为在Mac上正常启动而优化的版本或基于ARM的移动设备的版本进行了优化)执行此操作,则这是.zsync文件所在位置的规则:

只需单击您所用版本的链接,然后向下滚动即可查看完整的文件列表(或在页面中搜索.zsync)。然后复制URL并将其粘贴到zsync命令中。

在“升级”中使用

您还可以zsync用于将一个ISO“升级”到另一个。如果从一个Ubuntu版本升级到另一个版本,它可能必须重新下载大部分文件。但是,如果您要升级点发行版(例如将12.04 LTS升级到12.04.1 LTS),则不必下载太多内容。这是快速有效地获得新分数的绝佳方法。

只需重命名旧文件,使其具有与新文件相同的名称,然后zsync按上述方式运行即可。

比特流

当您的Internet连接出错率很高时,BitTorrent通常是可靠下载文件的最佳方法之一。文件被分成许多小块,每个文件都被下载并检查是否真实。(可以从不同的计算机上下载各个片段,这使BitTorrent避免将负载添加到中央服务器上,并且实现的速度通常比基于Web的下载更快。)

可以在此处获得适用于Ubuntu 12.10和Ubuntu 12.04.1的Torrent。

您需要一个BitTorrent“客户端”才能下载它。如果您还没有想要的版本,那么对于Windows我建议使用BitTornado

下载后,我建议尽可能播种一些种子,以回报社区。(有了BitTorrent,它就可以从您这样的人那里得到。)尽管如此,您不必立即进行操作,您可以回到BitTorrent程序中,然后再播种。您甚至可以在下载未完成时退出它,并随时恢复它。

使用BitTorrent修复您拥有的文件

警告:本小节没有像其他答案那样得到充分的研究。我最近或在Windows上或使用BitTornado尚未测试使用BitTorrent修复损坏的文件。我希望这对您有用,但是我不确定。

虽然BitTorrent并不像该目的那样普遍使用zsync,但BitTorrent协议本身也具有此功能。

某些BitTorrent程序会执行此操作-其他程序会拒绝或从头开始下载整个文件-除非您开始使用的文件大小完全相同。(通常,下载损坏的文件通常与正确的文件大小相同。)

将旧的ISO映像与文件放在同一文件夹中.torrent。确保您的BitTorrent程序将种子下载到那里。它将检查您当前的文件是否良好。如果发现某些部分不正确,可以重新下载它们。

对于某些BitTorrent程序,您必须将其作为正在进行的种子导入,或将其打开以进行播种,以实现此目的。


15
这是一个史诗般的答案。
Nanne

@南妮谢谢!顺便说一句,如果您碰巧知道比我提供的有关使用BitTorrent修复现有文件的详细信息,请进行编辑以提供有关此信息的更多信息(如果您愿意)。
伊莱亚·卡根

哇...现在大约是我期望的答案的10倍!谢谢!请尝试一下,然后接受或使用更多详细信息更新问题!
冰雹

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.