gpt4 book ai didi

linux - Perforce:从 Windows 到 Linux 的交叉迁移无法重放检查点

转载 作者:行者123 更新时间:2023-12-03 09:49:48 25 4
gpt4 key购买 nike

我正在尝试将我的个人 Perforce 服务器从 Windows 迁移到 Linux (Ubuntu 20.04),但在 Linux 服务器上从 Windows 服务器重放检查点文件时遇到问题。

我想继承 Linux 的案例处理,根据 Perforces 的文档,使用 p4migrate 工具应该可以实现。我已经在 Linux 服务器上安装了该工具,并严格按照文档中的步骤进行操作(此时已多次执行),但仍然遇到以下错误。

请注意,当使用 p4migrate 创建已编辑的检查点文件时,它报告没有报告案例问题/冲突。在第一次尝试时,它还成功地重命名了所有存档文件以匹配 Linux 的大小写处理(并且我已经更改了行尾)。

这只是它似乎无法恢复的数据库。我正在使用以下命令从 p4migrate 创建的检查点文件重建数据库:

p4d -r /mnt/Disk/PerforceServer/root -jr checkpoint.4.edited

但这样做会产生以下输出:

Perforce db files in '/mnt/Disk/PerforceServer/root' will be created if missing...
Recovering from checkpoint.4.edited...
Perforce server error:
Journal file 'checkpoint.4.edited' replay failed at line 5145!
Case-handling mismatch: server uses Unix-style (-C0) but journal flags are Windows-style (-C1)!

我做了几次尝试,但结果总是一样的。它创建所有的 .db 文件,但随后几乎立即停止。我自然地检查了它报告的行,并用细齿梳检查了检查点文件(大约 45mb),但没有发现任何问题。

我怀疑这里有其他问题,但似乎没有办法获得更详细的日志记录。有没有人遇到过这个问题并找到了解决方案?

附录:我还运行了 p4d -jv checkpoint.4.edited,它只报告了以下内容:trailer found on line 196624(文件末尾)

最佳答案

经过一周的脱发经历后,我终于能够获得解决问题所需的信息。首先要注意的是,上面给出的错误完全是误导性的。实际上,它提到的检查点文件没有问题,这纯粹是个案处理问题。我不知道为什么它会将该行作为错误吐出来,但这与它无关。

提醒一下,我正在将 Windows 服务器转移到 Linux 服务器 (Ubuntu 20.04),并且我使用的是 Perforce 20.3 版。您必须确保源计算机和目标计算机上的两个版本相同。我通过更新我的 Windows 服务器解决了这个问题,然后运行 ​​p4d -xU 命令来升级数据库。

我的目标还在于在 Linux 上运行区分大小写 服务器。 Perforce 提供了 p4migrate 工具来支持这种转换,但至少根据我目前的经验,该工具有几个错误,文档中也包含一两个错误。我会将我的发现转发给 P4,希望他们能修复它,当然,除非我非常不走运。

解决方案:

您需要遵循 p4migrate 文档中的所有步骤直至并包括 第 4 步。第 5 步开始有所不同。问题是 p4migrate 似乎并没有真正改变检查点文件中的案例处理方法,所以你必须手动设置它。我不确定这是否是一个错误,但这解决了大小写不匹配/BTree 问题并成功重放检查点。

可以通过调整第一个@nx@ 条目(对我来说是检查点文件的第一行)来手动更改案例处理方法。第五个字段表示它。 1 = 区分大小写,2 = 不区分大小写。要将检查点更改为区分大小写,请执行以下操作:

    @nx@ 0 1610070027 @51@ 2 0 0 0 0 @/path/to/root@ @journal@ @@ @@ @@

Changes to:

@nx@ 0 1610070027 @51@ 1 0 0 0 0 @/path/to/root@ @journal@ @@ @@ @@

需要注意的是,我对 p4migrate 的输入 输出文件进行了此操作。即使在编辑了输入检查点之后,p4migrate 仍然输出了一个不区分大小写的检查点(也许这是因为我没有要解决的冲突)。完成此操作后,继续执行其余步骤,包括第 10 步。我在此步骤中用于重放检查点的命令如下:

p4d -r /Folder1/Folder2/PerforceServer/root/ -jr checkpoint.n.edited

然后您可以启动区分大小写的服务器。请注意,我运行 p4 verify -q//... 的每个文件在这个阶段都返回了 BAD! 警告,但我没有 MISSING! 警告。如文档所述,您现在可以忽略 BAD! 警告。

最后,步骤 11 中显示的命令似乎有 两个 个版本。p4migrate documentation 中的一个。 .

find $P4ROOT -type f \( -name "*,v" -o -name ".*,v" \) -print \
-exec perl -p -i -e 's/\r\n/\n/' \{} \;

还有一个来自 Cross-Platform Migration knowledgebase article .

find . -type f -name '*,v' -print -exec perl -p -i -e 's/\r\n/\n/g' {} \;

注意细微差别。我不是 Linux/Perl 专家 - 但 p4migrate 文档中缺少的“g”提示我那里有错字。因此,我为每个软件仓库运行了这个版本的命令,明确地说:

find /folder/anotherfolder/Depot1/ -type f -name '*,v' -print -exec perl -p -i -e 's/\r\n/\n/g' {} \;
find /folder/anotherfolder/Depot2/ -type f -name '*,v' -print -exec perl -p -i -e 's/\r\n/\n/g' {} \;

等...

然后我再次运行 p4 verify -q//...(第 12 步),它没有返回任何错误!现在您需要做的就是使用 p4dctl 启动一个区分大小写的 Perforce 服务,您就可以离开了。同步再次工作,我什至不必手动强制 p4 verify 来更新 MD5 校验和。希望这对遇到此问题的其他人有所帮助。

关于linux - Perforce:从 Windows 到 Linux 的交叉迁移无法重放检查点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65586008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com