我正在尝试解压缩 bz2 文件,但是我收到错误消息,说没有剩余空间

GI *_*NAM 7 partitioning disk-usage

bzip2 -dk a.osm.bz2

bzip2: I/O or other error, bailing out.  Possible reason follows.
bzip2: No space left on device
    Input file = a.osm.bz2, output file = a.osm
bzip2: Deleting output file a.osm, if it exists.
Run Code Online (Sandbox Code Playgroud)

我做了一个df -h

Filesystem                         Size  Used Avail Use% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv  439G  115G  302G  28% /
/dev/sda2                          976M  104M  806M  12% /boot
....
Run Code Online (Sandbox Code Playgroud)

该文件大约为 100GB。而且,我绝对应该有大约 350GB 的免费存储空间。我不明白为什么它会导致错误。

$du -sh a.osm.bz2
100G    a.osm.bz2

$ df -h .
Filesystem                         Size  Used Avail Use% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv  439G  121G  295G  30% /
Run Code Online (Sandbox Code Playgroud)

pLu*_*umo 25

这是一个很大的世界 ;-) 这个错误是合理的。

来自https://wiki.openstreetmap.org/wiki/Planet.osm

2021 年 2 月 1 日,从 99.3 GB bzip2 压缩的下载数据文件解压缩时,纯 OSM XML 变体占用超过1370.5 GB)。

你可以 ...

  • 获得更多磁盘空间
  • 仅下载您真正需要的区域的osm 文件
  • 对于小区域,请使用 API
  • 用于 自己osmosisplanet.osm文件中提取所需的数据。但是.bz2,您应该使用pbfversion而不是文件,这会快得多。

  • 1.3TB XML 文档对我来说听起来像是对 XML 的滥用。 (8认同)
  • @约书亚对了。这就是 OSM 多年前从 XML 切换到 PBF 的原因。XML 仍然存在,因为一些工具还不支持 PBF。但是 XML 被认为是遗留的,应该避免使用,尤其是对于大型转储。 (4认同)
  • 这是一个很好的答案,可以满足 OP 的特定需求,但没有为未来的读者提供其他文件的通用方法。我已经在补充答案中添加了这一点。 (3认同)
  • 我读到您需要 130GB 的存储空间并且只购买了 500GB 的 SSD。我很高兴能够托管我自己的地图服务器,直到这个!哈哈哈 (2认同)

Cri*_*gie 7

一段时间后,您可以从存档文件本身确定存档中的文件有多大。

-rw------- 1 criggie criggie 95M Jul 22  2015 home-email.tar.bz2

$ bzcat home-email.tar.bz2 | wc -c 
149606400
Run Code Online (Sandbox Code Playgroud)

这样 95 MB 的存档在一个 tar 文件中扩展为149,606,400 字节,这对于您的目的来说已经足够了。


在 unix 世界中,压缩可能是一个与归档不同的过程,这就是为什么我们有gzipbzip2,分别有tar将东西粘在一起。

您可以使用测试和详细标志挖掘扩展的 tar 文件

$ bzcat home-email.tar.bz2 | tar -tv
...big list of output....
Run Code Online (Sandbox Code Playgroud)

存档器/压缩器之类的zip组合了这两个功能,因此如果您的存档是起源于 PC 世界的azip或 anarc或 alhz等,您必须检查 LIST 选项的标志 - 例如:

$ unzip -lv /home/criggie/config.zip
Archive:  /home/criggie/config.zip
 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
       0  Stored        0   0% 2020-07-28 17:04 00000000  dir/
    1708  Defl:N     1093  36% 2017-02-15 14:15 7c7aee5a  dir/file1.txt
    5354  Defl:N     2860  47% 2020-03-10 15:57 31be4459  dir/file2.txt
--------          -------  ---                            -------
  319022            10362  26%                            20 files
Run Code Online (Sandbox Code Playgroud)

  • 某些存档格式(例如 gzip、xz 和 zstd)为指示未压缩大小的元数据提供了空间,因此您可以更快地找到它。(例如,`7z l foo.gz` 适用于许多文件类型,或者`zstd -l foo.zstd` 例如。标头可能对从管道或其他流压缩的文件无效,对于 gzip,您可以连接 gzipped文件使一个有效的 .gz 但标头只会来自第一个。此外,gzip 只有 32 位大小,IIRC。IDK 关于其他格式的类似限制。 (3认同)
  • 但无论如何,是的`bzcat | wc -c` 似乎是寻找尺寸的唯一选择。或者在解压运行时观看`df -h .`。 (2认同)