wiki

osu!(lazer) 中的文件存储

默认情况下, osu!(lazer) 将谱面、皮肤、成绩回放文件存储于以下目录:

  • %appdata%/osu/files (Windows),
  • ~/.local/share/osu/files (Linux),
  • ~/Library/Application Support/osu/files (macOS),
  • Android/data/sh.ppy.osulazer/files/files (Android).

在桌面平台,通过使用客户端设置中的改变文件夹位置...按钮,可以将文件存储整体移动到另一个位置。

存储结构

osu!(稳定版) 的存储结构中,数据作为标准文件直接允许用户访问,由于必须显式处理关键文件不必要的更改,导致了大量问题的出现。为了避免这种情况, osu!(lazer) 使用了更严格的文件存储方法。照这样,没有与 SongsSkins 文件夹等同的东西了。所有被导入至 lazer 版本中的文件都以反映其 SHA-256 哈希值的文件名存储。对这些文件的映射过程在客户端数据库中进行。

例如,一个文件的 SHA-256 哈希值如下:

1a47929b6056d34d25a95eeb2012395ceed66af6f40cc37c898a08482d6325d2

则此文件存储在如下路径中:

files/1/1a/1a47929b6056d34d25a95eeb2012395ceed66af6f40cc37c898a08482d6325d2

这可以通过避免将相同文件的副本写入到磁盘来节省存储空间,并防止用户(或其他应用程序)轻易篡改不应该被篡改的文件。与稳定版相比,这一选择所带来的所有不便要么已通过允许导出或添加新的游戏内管理功能来解决,要么会在适当的时候通过新功能来解决。

到现在为止,不利用游戏内可用功能手动修改皮肤或谱面的正确步骤是:导出项目,更新它,然后带着期望的更改重新导入此项目。

从 osu!(稳定版) 迁移

通过硬链接

在大多数操作系统中, osu!(lazer) 无需在硬盘上建立原数据副本即可从稳定版导入数据。借助于名为硬链接的操作系统功能,此过程得以实现。

硬链接概念上与快捷方式相似,它允许用户在文件系统多个不同位置有同一文件可用。然而,快捷方式只是指向不同文件的常规文件(因此需要额外空间),而硬链接更进一步,工作在文件系统本身级别之上。

简而言之,两个硬链接文件就是硬盘物理空间同一个文件的两个不同名字。这意味着一旦迁移过程通过硬链接完成,稳定版的 Songs 文件夹与 lazer 版中的 files 文件夹都含有指向硬盘上共有的底层数据的文件。从一个已安装版本删除文件并不会影响另一个版本。只要使用 osu! 作出更改,更新或编辑文件导致它们分开来,因此也不会影响另一个版本。

请注意,如果使用文件资源管理器中的属性窗口或相似方式检查磁盘使用情况,会显示 Songs 文件夹与 files 文件夹都在消耗磁盘空间,可能会误导用户认为数据被存储了两次。这只是计算文件大小的工具,实际的底层数据并重复。可以通过比较迁移前后整个磁盘的剩余空间总量来确定这一点。

支持的操作系统

由于硬链接是文件系统级别功能,它需要硬链接指向的文件位于常规驱动器上。

  • Windows:驱动器必须被格式化为 NTFS 。
  • macOS:文件系统必须支持硬链接。
  • Linux:文件系统必须支持硬链接。

通过复制文件

在其他不能使用硬链接(或者建立硬链接的功能尚未实现)的操作系统与文件系统上,从稳定版到 lazer 版的迁移通过从旧版本复制文件到新版本来完成。因此两个版本文件完全独立,但也会消耗高达两倍的磁盘空间。