这个问题旨在揭开无处不在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 位所需的磁盘空间量。
用户体验可能会有所不同,因为重现不同结果的确切条件尚未真正了解。
一些计算
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 包中定义的最大大小。