Ubiquity 在安装前如何确定所需的磁盘空间?

Ubiquity 在安装前如何确定所需的磁盘空间?

这个问题旨在揭开无处不在Ubuntu 桌面安装程序,如何确定安装前所需的磁盘空间。

从这个帖子开始使用 Ubuntu 安装程序时确定分区的大小

[当使用 Ubuntu 安装程序安装 Ubuntu 12.04 和 Windows 7 时,[用户] 无法为 Ubuntu 提供少于 32 GB 的空间 [...] 并且正如指南所述,“Ubuntu 需要大约 4.5 GB 才能安装,因此请添加几 GB 以容纳您的文件”。

所需的磁盘空间以前约为 5 GB(Ubuntu 12.04)、8 GB(Ubuntu 16.04),现在已增加到 25 GB(Ubuntu 18.04),如下所示最低系统要求. 实际上,所需磁盘空间的绝对最小值可能因安装介质和机器而异。

设计规范来自Ubuntu Wiki 上的 Ubiquity描述了安装程序模型,没有描述如何确定所需的磁盘空间(上半部分屏幕截图)。

泛在设计规范及实践运用

我已经澄清过,Ubuntu 16.04 仅在物理机上需要至少 8 GB 的磁盘空间,但安装到虚拟机时最低要求变为 8.3 GB(下半部分屏幕截图)。

那么 Ubiquity 如何确定所需的磁盘空间?

答案1

为了确定所需的磁盘空间,Ubiquity 会将 filesystem.size 文件中的字节数乘以 2。根据机器设置,Ubiquity 可能不会显示实际所需的磁盘空间。完整说明如下。

内置逻辑

看看确切的通用包。浏览文件,找到如下usr/lib/ubiquity/ubiquity/misc.py函数。install_size()

def install_size():
    if min_install_size:
        return min_install_size

    # Fallback size to 5 GB
    size = 5 * 1024 * 1024 * 1024

    # Maximal size to 8 GB
    max_size = 8 * 1024 * 1024 * 1024

    try:
        with open('/cdrom/casper/filesystem.size') as fp:
            size = int(fp.readline())
    except IOError:
        pass

    # TODO substitute into the template for the state box.
    min_disk_size = size * 2  # fudge factor

    # Set minimum size to 8GB if current minimum size is larger
    # than 8GB and we still have an extra 20% of free space
    if min_disk_size > max_size and size * 1.2 < max_size:
        min_disk_size = max_size

    return min_disk_size

min_install_size = None

min_install_size目前发现这似乎无关紧要且无用。

try 语句将尝试读取 中找到的字节数/cdrom/casper/filesystem.size,然后将该值作为整数存储在变量 中size,然后将其乘以二,然后存储在另一个变量 中min_disk_size。最后,该函数将返回 的值min_disk_size

根据内置逻辑,所需磁盘空间通常是 filesystem.size 文件中字节数的两倍。

一些澄清

所需的磁盘空间以前约为 5 GB(Ubuntu 12.04)、8 GB(Ubuntu 16.04),现在已增加到 25 GB(Ubuntu 18.04),如下所示最低系统要求. 实际上,所需磁盘空间的绝对最小值可能因安装介质和机器而异。

Ubuntu 18.04 所需的磁盘空间被夸大了。如果所需磁盘空间是 filesystem.size 的两倍,那么 Ubuntu 18.04 实际上只需要大约 10 GB 或更少。

我已经澄清过,Ubuntu 16.04 仅在物理机上需要至少 8 GB 的磁盘空间,但安装到虚拟机时最低要求变为 8.3 GB(下半部分屏幕截图)。

这要么是记错了,要么是被误认为是其他版本的 16.04 版本。事实上,我无法重现测试结果,因为物理机上需要的磁盘空间精确为 8 GB。从我最近的测试结果来看,无论是物理机还是虚拟机,Ubuntu 16.04 所需的磁盘空间都是 8.3 GB。

在下面的屏幕截图组合中,显示了在虚拟机中运行时 Ubuntu 16.04 32 位(上半部分)和 Ubuntu 18.04 64 位所需的磁盘空间量。

Ubiquity 显示 Ubuntu 16.04 和 Ubuntu 18.04 所需的磁盘空间

用户体验可能会有所不同,因为重现不同结果的确切条件尚未真正了解。

一些计算

Ubuntu 版本的已知信息:

  • Ubuntu 16.04 文件系统大小:4139667456
  • Ubuntu 16.04 安装大小:8.3 GB(磁盘空间不足时)
  • Ubuntu 18.04 文件系统大小:4660985856
  • Ubuntu 18.04 安装大小:8.6 GB(磁盘空间为零时)

假设每个系统的 filesystem.size 和安装程序显示的磁盘空间量都是已知的,那么可以进行手动比较以确定每对数字是否相符。

# Use Python interactive shell to do manual calculation
# round(number,N) will return a floating point number in N digits

# The required disk space for Ubuntu 16.04 (xenial)
>>> size = 4139667456 # filesystem.size
>>> round((size*2)/1000/1000/1000.0,1)
8.3

# The required disk space for Ubuntu 18.04 (bionic)
>>> size = 4660985856 # filesystem.size
>>> round((size*2)/1000/1000/1000.0,1)
9.3

# The required disk space for fallback size
>>> size = 5*1024*1024*1024 # fallback size to 5 GB in ubiquity
>>> round((size*2)/1000/1000/1000.0,1)
10.7

# The required disk space for maximal size
# This is used "as it is" based on the built-in logic
>>> max_size = 8*1024*1024*1024 # maximal size to 8 GB in ubiquity
>>> round((max_size)/1000/1000/1000.0,1)
8.6

Ubuntu 18.04 据称需要 9.3 GB 的磁盘空间,但 Ubiquity 在屏幕截图中显示的是 8.6 GB;哪里出了问题?尝试复制编辑并测试相关变量和函数中的 if 语句install_size()

# Redo calculation according to the built-in logic
# The required disk space for Ubuntu 18.04 (bionic)

# Before
>>> size = 4660985856 # filesystem.size
>>> min_disk_size = size*2 # fudge factor in ubiquity
>>> max_size = 8*1024*1024*1024 # maximal size in ubiquity
>>> round((min_disk_size)/1000/1000/1000.0,1)
9.3
>>> round((max_size)/1000/1000/1000.0,1)
8.6

# After
>>> if min_disk_size > max_size and size * 1.2 < max_size:
...     min_disk_size = max_size
... 
>>> round(min_disk_size/1000/1000/1000.0,1)
8.6

出了点问题:if 语句选择了,max_size因为min_disk_size发现 Ubuntu 18.04 的大于最大尺寸。

不确定为什么条件假设所需的磁盘空间(filesystem.size 的两倍)不会大于 ubiquity 包中定义的 8 GiB(8.6 GB)?根据脚本中的内联注释,这个“错误”结果似乎是有意为之。

根据手动比较,发现两对数字是相符的:Ubuntu 16.04 的安装程序显示的实际安装大小是 filesystem.size 中找到的字节数的两倍;Ubuntu 18.04 的安装程序显示的表观安装大小已被定义为最大大小。

总结所需的磁盘空间是 filesystem.size 的两倍,或者是后备大小的两倍,或者是 ubiquity 包中定义的最大大小。

相关内容