12.04 的安装一直失败,解决方案是让安装程序忽略我之前用于 /home 的 btrfs 分区。
现在它已经安装完毕,我一直试图让它挂载 btrfs 分区,以便我可以访问我的 70GB 文件。它无法挂载,并且 btrfsck 出现以下三行错误:
parent transid verify failed on 31302336512 wanted 62455 found 62456
parent transid verify failed on 31302336512 wanted 62455 found 62456
parent transid verify failed on 31302336512 wanted 62455 found 62456
有人能告诉我如何让这个分区工作吗?我在网上看到我可以使用 btrfs-restore 恢复数据,但我找不到该程序。
答案1
最简单的方法
btrfs-zero-log /dev/sda5
您遇到该问题是因为事务(写入或删除)卡在日志中并且磁盘与其不匹配。
怎么运行的:
因此,当数据首先被写入时,它会被写入日志,然后写入磁盘(或者同时写入,但日志只保存有关即将进行的写入的元数据 - 不确定...需要对该部分进行更多研究)...
无论如何,如果你在写入/删除过程中关闭系统,或者做了一些使系统出现故障的事情(卸载保存 btrfs 挂载点的 USB),那么当它返回时,挂载将不起作用,它将失败(消息和文件系统检查将更详细地向您显示错误)...
查看 dmesg 您将看到相同的 transid 消息。
你会看到类似这样的内容:
parent transid verify failed on 109973766144 wanted 1823 found 1821
这意味着 btrfs 想要 transid 1823(在日志中),但在磁盘上它看到的是 1821。因此磁盘与日志同步还有 2 个事务。我个人会冒险使用 brtfs-zero-log,因为它只有 2 个事务。但如果这是您的唯一数据,则要 100% 安全(顺便说一句,如果您有关键数据,您永远不应该只有一份副本,始终在其他安全位置有一份副本/备份 - 指责 btrfs 的创建者并不能证明他们自己没有备份的责任 - btrfs 不是备份解决方案,它是一个文件系统 - 除了在其他地方有一份副本之外,没有什么是真正的备份解决方案 - 甚至不是奇偶校验或镜像驱动器,真正的备份位于阿尔卑斯山的地下某处,而其活动副本位于您位于德克萨斯州的办公室中)
parent transid verify failed on 31302336512 wanted 62455 found 62456
这里日志需要 62455,但磁盘在 62456 处领先一个,所以对于你的情况,我只会清除日志。日志这次没有更新。我再次告诉你要注意安全,如果这是你唯一的数据,而且它极其关键(你真丢脸),我会先执行以下操作以确保安全。
运行 btrfsck /dev/sda5(顺便说一下,它只进行只读检查,因此完全安全,您只需要担心 btrfsck 选项)也会向您显示这些消息。
但请注意,如果这些数据至关重要,我会首先这样做(正如其他先生所说的那样)
mount -t btrfs -o rootflags=recovery,nospace_cache /dev/sda3 /mnt/sda3
mount -t btrfs -o rootflags=recovery,nospace_cache,clear_cache /dev/sda3 /mnt/sda3
mount -t btrfs -o recovery,nospace_cache,clear_cache /dev/sda3 /mnt/sda3
然后 cp 或 rsync 将您的所有文件转移到安全位置,然后在安全的情况下执行 btrfs-zero-log,如果操作成功,您就浪费了很多时间来备份您的系统(但如果操作不成功,您就救了自己一命)
然后,如果挂载失败,请执行 btrfs 恢复(转储系统,据我所知,这是一个可恢复的操作,但是它会不时地询问 Y 或 y,因此请注意输出)
btrfs restore /dev/sda5 /USB
然后,当安全时(当 btrfs 恢复完成时)执行 btrfs-zero-log,如果操作成功,您就浪费了很多时间来备份系统(但如果不成功,您就救了自己一命)
您可以先运行 screen
screen /bin/bash
btrfs restore /dev/sda5 /USB
屏幕侧注
要分离(命令仍将运行):按 CONTROL-a,然后输入“:detach”(不带引号),然后按 ENTER
分离的另一种方法:然后关闭腻子或终端,它将分离(命令/恢复仍将运行)。
要检查它,只需返回屏幕即可:
screen -x
screen -x 会附加到会话,即使已经分离,与 -h 不同,即使已经附加,它也会附加)
如果您有多个屏幕,screen -x 将告诉您需要更具体地附加到会话:
screen -ls
ls 列出所有会话,很容易记住。
要查看 PID,您还可以执行以下操作:
ps aux | grep screen
一旦找到你的 PID,就可以像这样运行屏幕:
screen -x PID
这将附加到特定会话。您可以将多个会话/putty 附加到同一个屏幕(它们将输出相同的文本,您可以在其中一个中输入命令,它们将在另一个 putty 上镜像)
答案2
使用根文件系统挂载选项在启动时挂载:
rootflags=recovery,nospace_cache
或者
rootflags=recovery,nospace_cache,clear_cache
btrfs 挂载选项的完整列表应在此处https://btrfs.wiki.kernel.org/index.php/Mount_options其他东西也可能有用,例如 noatime、nodatacow(为我修复了一个内核错误,让我有机会复制我的文件)。
将其添加到您的 grub.cfg / menu.lst,或在启动时输入它。
nospace_cache 会让系统变得非常慢。只需启动、等待(很长时间)、关闭,然后正常启动即可。
几天前我也遇到过同样的问题,上面的方法解决了。但之后也出现了一些空间问题……报告的空间不是 100%,但仍可以说空间不足。
==
我认为您也可以在 fstab 中添加相同的选项,例如:
UUID=0237alksfadg-lhdfkj3624-4fdfjb-9dsfe2d-dfddaf /home btrfs defaults,recovery,nospace_cache,clear_cache,subvol=@home 0
2
如果您尝试恢复安装在带有 的分区上的 /home 目录UUID=0237alksfadg-lhdfkj3624-4fdfjb-9dsfe2d-dfddaf
。
答案3
Peter 的回答帮我解决了这个问题,尽管不是在 Ubuntu 上。我有一个/home
btrfs'd 分区,当然它已损坏。系统无法启动,因为它处于 状态fstab
。我进入维护模式,用该分区散列线路,然后正常启动(我有一个备用的 ext4 分区可以用作/home
)。
我使用以下命令手动挂载了该分区:
mount -t btrfs -o recovery,nospace_cache,nospace_cache /dev/sda3 /mnt/sda3
并且确实能够保存我的数据。尽管安装它并没有花太长时间。所以非常感谢 Peter。
答案4
有无法安装的 btrfs 加密,整整一个月都在与之斗争,UNRAID 错误如 - 没有有效的 btrfs 文件系统,没有文件系统等等 + 类似于此:
父级 transid 验证失败 31302336512 想要 62455 找到 62456
我正在以只读、维护模式、救援、恢复模式进行安装......
解决方案是最简单的:
sudo mkdir -p /mnt/diskX#X 对应 +1 更高的数字已被占用
安装 -t btrfs -o 恢复,无空间缓存,无空间缓存 /dev/sde1 /mnt/diskX
当它安装时,数据在 SMB 和终端中可见,只需将其复制到其他磁盘,然后回收该磁盘。