然而,在存储层方面,情况略有不同。我们正在带回您已经熟悉并喜爱的旧专家分区程序中的所有功能,但以更好的形式呈现。

让我们来看看最相关的更改

此外,我们还修复了一些问题,例如 从 NFS/Samba/CIFS 仓库安装软件包保留 DHCP 客户端 ID 的问题以及许多 翻译问题

从 SLE11 离线升级

在上一篇文章中,我们宣布支持通过 SCC 从 SLE12 迁移到 SLE15 的 离线迁移。在本冲刺中,我们专注于从 SLE11 产品迁移到 SLE15。

主要区别(从注册角度来看)是 SLE11 使用旧的 Novell Customer Center (NCC) 进行注册,而较新的产品使用 SUSE Customer Center (SCC)。

但是,SCC 服务器知道哪些系统已在 NCC 中注册(它们之间存在某种自动同步),因此可以在不与旧 NCC 交互的情况下仅使用 SCC 服务器进行迁移,从而使过渡对我们的用户来说是透明的。

除了进行一些小的调整外,YaST 中的更改主要与处理不同的配置文件有关。正如预期的那样,最困难的部分是测试,因此我们下面添加了一些关于该过程的说明。

最终,我们可以通过 SCC 迁移一个 SLES11 系统到 SLES15,执行手动升级和使用 AutoYaST 的自动升级。与 YaST 或 SCC 无关的软件包依赖性问题,可能需要修复一些 RPM 软件包。

Select the Migration Target

SLE11 迁移说明

从 SLE11 系统迁移时,您应该注意一些具体问题

  • 使用 内部 SUSE 注册密钥(属于 Novell Inc 组织)注册的 SLE11 系统每 24 小时同步一次。这意味着在注册新的 SLE11 系统后,可能需要最多 24 小时才能使其可以通过 SCC 升级到 SLE15。如果 NCC 尚未同步注册信息,您将在迁移期间看到“无效凭据”错误。
  • 对于客户来说,有一个技巧:登录到 SCC Web UI 将在几分钟内同步注册信息。但这不适用于 SUSE 密钥。
  • 从 SLE12 的迁移不受此问题影响,因为 SLE12 已经使用 SCC,并且从 NCC 的数据同步不涉及迁移过程。

通用迁移说明

这些说明适用于从 SLE11 或 SLE12 升级时

  • 由于 SLE15 处于 Beta 阶段,您的注册密钥需要有权访问 Beta 产品。否则,您将在 YaST 中看到“未找到迁移”错误。加入 SUSE Beta 程序或等待 SLE15 产品发布并启用迁移。
  • 系统迁移完成后,无法重复该过程。但是,如果您回滚迁移的系统(使用备份或快照),则运行 SUSEConnect --rollback 将恢复您的注册状态。

配置专家分区程序

专家分区程序再次具有“设置”部分,用户可以在其中调整一些设置以影响分区程序的工作方式。这是一个正在进行中的工作,但目前用户可以配置设备应该如何挂载(路径、UUID、标签等)。

但这些设置不仅限于专家分区程序的范围,还适用于整个存储层。例如,您可以在调整它们后再次启动引导设置,并且将采用新的值。

此外,分区程序现在能够对挂载选项执行一些额外的检查。例如,当尝试通过标签挂载设备时,如果该标签无效(例如,因为另一个文件系统正在使用该标签),将向用户发出警告。

克隆分区布局

克隆分区布局是旧分区程序提供的一种令人惊讶的功能。想象一下,您有一个带有某些分区的磁盘,并且希望在另一个磁盘(甚至多个磁盘)中拥有相同的分区布局。这很常见,例如,当您创建 MD RAID 设置时,将磁盘以相同的方式分区很有用。为了避免手动创建所有磁盘分区的繁琐工作,新的专家分区程序允许再次使用专家按钮克隆磁盘布局。

当您克隆磁盘时,可以选择要克隆当前磁盘分区方案的所有设备。只有适合克隆的设备才会提供,也就是说,您不会在列表中看到没有足够大小或不同拓扑的磁盘。

在选择要克隆的磁盘后,将显示确认消息,并警告您在执行磁盘克隆之前将被删除的所有设备。如果您接受,所有选定的设备都将具有完全相同的分区,包括分区之间的间隙。

临时挂载和卸载文件系统以进行调整大小

不幸的是,大多数文件系统仅在文件系统挂载或卸载时才支持调整大小。虽然临时挂载很容易,但临时卸载通常是不可能的,因为文件系统通常正在使用中。

libstorage-ng 现在在特定文件系统需要时插入卸载和挂载操作。它还提供立即挂载或卸载文件系统的功能,以便 UI 可以向用户提供卸载失败的反馈。

正确处理 Btrfs 子卷层次结构

btrfs 子卷是相当微妙的野兽,必须小心谨慎才能正确地进行操作。

首先,子卷像目录层次结构一样组织。您不能在任何地方创建新的子卷,而只能在空闲“叶”位置创建。也就是说,既不能存在另一个子卷,也不能存在具有此名称的目录。

换句话说,如果(例如)子卷 foo/bar/xxx 已经存在,则不能再创建子卷 foo/bar

让我们看看会发生什么

    # you must mount the btrfs file system first
    ~ mount /dev/sdb5 /mnt
^

    
    ~ btrfs subvolume list -tap /mnt
    ID      gen     parent  top level       path
    --      ---     ------  ---------       ----
    257     8       5       5               foo
    258     8       257     257             /foo/bar/xxx
    
    ~ btrfs subvolume create /mnt/foo/bar
    ERROR: target path already exists: /mnt/foo/bar
```console

The reason for that error is that there is already a directory called
\`foo/bar\`. At this point, there are two options:

* Delete the subvolume `foo/bar/xxx` and the directory `foo/bar` if you
  do not mind to loose the data in that subvolume
* Or rename temporarily and move it back later

Let’s move the existing subvolume out of the way (no fancy command, just
using `mv`) and then create the new one:

```console
    ~ mv /mnt/foo/bar /mnt/foo/old_bar
    ~ btrfs subvolume create /mnt/foo/bar
    Create subvolume '/mnt/foo/bar'
    ~ mv /mnt/foo/old_bar/xxx /mnt/foo/bar/xxx
    ~ rmdir /mnt/foo/old_bar
    
    ~ btrfs subvolume list -tap /mnt
    ID      gen     parent  top level       path
    --      ---     ------  ---------       ----
    257     9       5       5               foo
    258     8       259     259             /foo/bar/xxx
    259     9       257     257             /foo/bar

这相当复杂,您甚至可能在旧的 `foo/bar` 目录中拥有有价值的数据,这些数据可能会在此过程中丢失。因此 YaST 拒绝这样做。

相反,它识别了这种情况并向用户显示提示

当然,如果您要格式化 btrfs 文件系统,情况就不同了。然后 YaST 分区程序将只是以正确的顺序创建子卷,一切都会很好。

更好地处理未格式化的 DASD 和其他不可用的设备

直接访问存储设备 (DASD) 是 s390 主机中最常见的存储设备。与普通硬盘相比,它们在几个方面都非常特殊。其中之一是,它们需要在低级别进行格式化(不要与通常与创建文件系统相关的“格式化”含义混淆)才能被操作系统使用。

我们收到了 SLE15 预发布版的错误报告,因为安装程序在尝试将未格式化的 DASD 作为自动分区建议(即引导设置)的一部分使用时崩溃了。因此,我们指示 YaST 忽略此类设备,不仅在自动建议中,而且在分区程序中。列出无法以任何方式操作的设备没有意义。这与 SLE15 对其他“不可触碰”设备的处理方式一致,例如 BIOS 定义的 RAID 的硬盘或 多路径设备的各个连接。

换句话说,分区程序的“硬盘”部分仅显示可以真正用作硬盘的磁盘(例如,可以分区),并且与以前的 SLE15 预发布版不同,未格式化的 DASD 现在不再在该列表中。与往常一样,用户仍然可以返回安装过程的几个步骤,并对 DASD 进行低级别格式化,以便使它们出现。

YaPI 已被弃用,不应再使用

放弃一些旧的东西也是我们的路线图的一部分。例如,在此冲刺期间,我们已将 YaPI 标记为已弃用

YaPI 旨在公开 YaST 的功能,但老实说,它现在使用的并不多。由于每次开发新功能时维护多个接口的复杂性,我们决定放弃 YaPI。虽然代码尚未完全删除,但我们认为它已被弃用,不应再使用。

从 NFS 或 Samba/CIFS 安装软件包

我们收到了一份错误报告,即从 NFS 仓库安装系统时,安装的系统以后将无法访问该仓库。

问题是,要访问 NFS 仓库(以及 Samba/CIFS),您需要可以挂载这些文件系统的其他软件包。而这些软件包未包含在最小安装中。

这意味着您无法访问仓库,这是一种非常不幸的情况。您陷入了鸡和蛋的问题——您需要安装一个软件包才能访问仓库,但要访问仓库,您需要已经安装了该软件包……

在调试过程中,发现问题是由使用了 `/etc/install.inf` 文件中已删除的值引起的。过去,linuxrc 会将安装仓库的类型写入其中,但现在不再写入了。

解决方法是评估所有使用的仓库,并检查其中是否有位于 NFS 或 Samba/CIFS 上的仓库。作为副作用,它修复了从 DVD 安装但使用位于 NFS(或 Samba/CIFS)上的其他仓库的问题。

保留 DHCP 客户端 ID

自 SLE15 以来,wicked 将使用 RFC 4361 客户端 ID。此更改需要在安装程序中进行一些调整,以将创建的身份(duid + daid)复制到已安装的系统,以便在重新启动后,它可以获得与安装期间使用的相同的 IP(如果可能)。

修复翻译问题

目前,我们收到了很多关于 YaST 中缺少翻译的错误。事实证明,一些错误是由 YaST 代码中缺少 textdomain 语句引起的。在这种情况下,不会从这些文件中提取任何可翻译的文本,显然,翻译人员无法翻译它们。

YaST 脚本在这种情况下打印了一个警告,但很容易忽略。警告的原因是检查不完善,并且报告了许多误报(它抱怨缺少 textdomain 调用,而这些调用实际上是不需要的)。

修复脚本将过于困难,因此我们采取了另一种方法:我们将无害的 textdomain 语句也添加到严格来说不需要它的文件中。然后,我们可以将警告更改为错误并停止脚本执行失败。

现在,更严格的检查已在持续集成(Travis)中启用,因此我们应该更早地收到失败,然后再将其实际击中构建服务,从而防止以后出现错误报告。

我们需要您的帮助!

我们的 QA 部门在检测问题方面做得很好。但如果您能提供反馈,我们将不胜感激。因此,如果可能,请查看 (open)SUSE beta 版本并报告您发现的任何问题。

谢谢!