如何使用 .img.xz 文件或从中获取 .img 文件?

我有一个扩展名为xz的文件,ubuntu-19.10-preinstalled-server-arm64+raspi3.img.xz。你怎么把.img从中提取出来?
我的目标是将该文件刷写到SD卡上。我想使用www.etcher.io。最终我成功了,但是etcher只能处理.iso.img文件。

相关,如果不是重复的话:https://askubuntu.com/q/92328/249734,但是任何数量的“解压并通过dd传输”的参考都足够好。 - mckenzm
6个回答

xz是一种类似于zip或gz的压缩格式。要能够通过命令行解压缩它,您需要安装xz-utils软件包。
$ sudo apt-get install xz-utils

然后使用这个命令来解压你的文件:
$ unxz ubuntu-19.10-preinstalled-server-arm64+raspi3.img.xz

如果你使用的是Windows系统,你可以使用7zip

1目前是否有支持的Ubuntu版本,其中默认未安装xz-utils? - Eliah Kagan
8你也可以在Linux中使用7zip。 - rtaft
2如果你想保留压缩文件,请使用选项-k - rubo77
@EliahKagan 我觉得 xz-utils 在 Ubuntu 服务器上没有预安装。 - Benoît

一般情况下解压缩 .xz 文件

ubuntu-19.10-preinstalled-server-arm64+raspi3.img.xz 是使用 xz 压缩的单个文件 ubuntu-19.10-preinstalled-server-arm64+raspi3.img 的结果。您可以使用以下方法进行解压缩:

unxz ubuntu-19.10-preinstalled-server-arm64+raspi3.img.xz

这将提取ubuntu-19.10-preinstalled-server-arm64+raspi3.img,并且如果成功的话,会删除ubuntu-19.10-preinstalled-server-arm64+raspi3.img.xz。如果你想保留原始的.xz文件,可以使用-k/--keep选项。
unxz -k ubuntu-19.10-preinstalled-server-arm64+raspi3.img.xz

请注意,这与您通常为.tar.xz文件所做的操作不同,因为tar支持通过单个命令进行解压缩和提取。对于.xz文件(除非文件名非常误导),只需要解压缩。
特别是闪存预安装的Ubuntu Server镜像
您下载的特定文件是Ubuntu Server 19.10的预安装镜像。假设文件已经正确且成功下载(请参见下文),您可以使用官方说明将此镜像刷写到存储设备上。根据您用于执行此操作的操作系统不同,最佳方法也会有所不同。但是假设您使用的是Ubuntu操作系统,以下是一个摘要:
找到你要写入的设备的名称。一种方法是在“磁盘”(文件浏览器)中查找。确保这不是包含任何你想保留的数据的设备的名称!
运行以下命令,将其中的替换为你找到的设备名称:
xzcat ubuntu-19.10-preinstalled-server-arm64+raspi3.img.xz | sudo dd of= bs=32M
这里,xzcat执行的是unxz的工作。如果你有一个损坏的文件,xzcat会失败,就像unxz一样。
如果你运行了unxz并得到了一个.img文件,那么不要使用上面带有xzcat的命令。在这种情况下,请使用以下命令代替:
sudo dd if=ubuntu-19.10-preinstalled-server-arm64+raspi3.img.xz of= bs=32M
通常情况下,在WSL系统中无法使用dd命令来写入闪存驱动器。因此,如果你在Windows 10上运行带有WSL的Ubuntu,那些指令不适用。但在这种情况下,你可以使用Windows的方法(请参考官方指南)。
处理可能不完整或损坏的文件
如果解压缩失败并显示一个关于文件格式无法识别的错误消息,尤其是当运行file命令时无法将格式识别为XZ压缩数据(虽然有时候也会出现其他情况),那么你很可能下载了一个损坏或不完整的文件。你可以使用ls -l命令找到文件的字节长度,并将该长度与预期长度进行比较-对于特定文件来说,长度应该是661217868字节。这可以解决大多数不完整下载和一些损坏下载的情况,但并不完美。
许多可供下载的文件,包括所有Ubuntu镜像的ubuntu-19.10-preinstalled-server-arm64+raspi3.img.xz,都有校验和可以用来更可靠地判断文件是否完整且正确地下载。出于安全考虑,建议检查提供校验和的文件的GPG签名(并避免使用弱点易受恶意攻击的MD5校验和)。但是,为了检查无意中的损坏,只需查找校验和并测试您的文件即可。
现在提供和推荐用于检查Ubuntu镜像的校验和类型是SHA256SUM。此文件包含19.10服务器镜像的SHA256SUM,包括ubuntu-19.10-preinstalled-server-arm64+raspi3.img.xz。其中一行是:
52ca28f21685eef965d476a716a7bc01237456d6a8770a56630299036eade0bf *ubuntu-19.10-preinstalled-server-arm64+raspi3.img.xz

运行sha256sum工具对您的文件进行校验和计算,应该得到一个完全匹配的校验和,就像这样:
$ sha256sum ubuntu-19.10-preinstalled-server-arm64+raspi3.img.xz
52ca28f21685eef965d476a716a7bc01237456d6a8770a56630299036eade0bf  ubuntu-19.10-preinstalled-server-arm64+raspi3.img.xz

如果不行的话,那么你的下载可能是损坏或不完整的,这很可能是导致你无法解压缩或使用文件的原因。

当我这样做时,它显示文件格式无法识别。 - BJsgoodlife
@BJsgoodlife 你运行的确切命令和收到的确切错误信息是什么?另外,ls -l ubuntu-19.10-preinstalled-server-arm64+raspi3.img.xzfile ubuntu-19.10-preinstalled-server-arm64+raspi3.img.xz 的输出是什么?(提供这些信息的一种方式可能是编辑你的问题并包含它们。) - Eliah Kagan
@Eliiah Kagan unxz ubuntu-19.10-preinstalled-server-arm64+raspi3.img.xz unxz:ubuntu-19.10-preinstalled-server-arm64+raspi3.img.xz:文件格式未被识别。我也会编辑我的问题。 - BJsgoodlife
@BJsgoodlife 谢谢。我已经扩展了我的回答,涵盖了当你遇到这种错误时应该怎么做。基本上,你应该检查SHA256SUM以确保你下载的是完整且正确的文件。(我仍然建议你按计划编辑你的问题。)我还扩展了我的回答,链接到预装Ubuntu服务器映像到存储设备的推荐方法,因为这是你实际的目标,并概述了一种推荐的方法来完成此操作。请注意,只有在你下载的文件完整且没有损坏的情况下,这才能正常工作并产生所期望的效果。 - Eliah Kagan

根据我在我的Ubuntu 16.04 LTS系统上的观察,GNOME Disks实用程序允许以图形界面的方式恢复磁盘映像:
  1. 选择目标驱动器。
  2. 点击汉堡按钮,然后选择“恢复磁盘映像”
  3. GNOME Disks

  4. 然后它会要求输入映像文件的路径:
  5. Select Disk Image to restore

    在这里你可以选择任何*.img、*.img.xz(注:是的!)和*.iso格式。

  6. 仔细检查目标位置是否正确,然后点击打开窗口上的“开始恢复...”按钮。

7为什么要用「sic」?是因为.img.xz实际上是一个压缩磁盘映像,而不是一个「磁盘映像」吗?实际上看起来你并不知道.xz是一种格式,并且指出.gz的书写方式有错误... - Giacomo Alzetta

您可以使用mkusb-dusimg.xz文件(带有xz压缩的文件)直接提取和克隆。
  • 安装mkusb

    如果您运行的是标准Ubuntu Live,您需要额外的指令来获取宇宙存储库。(Kubuntu,Lubuntu ... Xubuntu会自动激活宇宙存储库)。

    sudo add-apt-repository universe  # 仅适用于标准Ubuntu
    
    sudo add-apt-repository ppa:mkusb/ppa  # 然后按Enter键
    sudo apt-get update
    sudo apt-get install mkusb mkusb-nox usb-pack-efi
    
  • 在您有文件的目录中运行dus,通常为

    dus file.img.xz
    

    在您的情况下

    dus ubuntu-19.10-preinstalled-server-arm64+raspi3.img.xz
    

重要的是目标驱动器(树莓派的存储卡)足够大以容纳镜像。它必须完全相同大小或更大。

  • 如果存在MSDOS分区表,将镜像克隆到比镜像更大的驱动器上将很简单。
  • 如果存在GUID分区表(GPT),并且驱动器大于镜像,则必须在驱动器末尾写入备份分区表。mkusb将自动完成此操作。使用其他一些克隆工具后,您可能需要自行修复,例如使用gdisk

@sudodus- 当我这样做时,我看到了一个图形界面而不是终端。你在哪里输入代码? - BJsgoodlife
@BJsgoodlife,你可以打开一个终端窗口并输入代码。(也可以通过图形用户界面来完成,但我认为直接从终端窗口操作更容易。) - sudodus

使用存档管理器打开文件,并从中提取出img文件。

你可以使用balenaEtcher(适用于Windows、macOS和Linux)直接将.img.xz镜像刷写到SD卡上。Etcher会在一步中解压缩.img.xz镜像并将生成的.img文件刷写到SD卡上。
Etcher支持以下格式:zip、etch、gz、bz2、xz、img、iso、dsk、hddimg和raw。