如何恢复无法装入的BTRFS分区?

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恢复数据,但我无法在任何地方找到该程序。

最简单的方法

 btrfs-zero-log /dev/sda5 

您收到该问题是因为事务(写入或删除)卡在日志日志中并且磁盘与它不匹配。

这个怎么运作:

因此,当数据写入时,首先将其写入日志然后写入磁盘(或同时,但日记只是保存有关即将发布的写入的元数据 – 不确定……需要对该部分进行更多研究)…

无论如何,如果你在这个写/删除过程中关闭系统或做一些事情,系统(卸载保存你的btrfs挂载点的USB),然后当它返回挂载将无法工作时它将失败( dmesgbtrfsck将更详细地向您显示错误)…

查看dmesg,您将看到相同的transid消息。

你会看到这样的东西:

 parent transid verify failed on 109973766144 wanted 1823 found 1821 

这意味着btrfs想要transif 1826(那是在日志上)但是在磁盘上它看到了1821.因此磁盘与期刊同步了2个交易。 我个人会冒这个brtfs-zero-log的风险,因为它只有2个交易。 但要保证100%安全,如果这是你唯一的数据(顺便说一句,如果你有关键数据,你永远不应该只有它的一个副本,总是在一个安全的其他位置有一个副本/备份 – 指责btrfs的创建者不会certificate没有备份的人自己没有责任 – 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,nospace_cache /dev/sda3 /mnt/sda3 

然后cp或rsync你的所有文件到安全的位置,然后安全做btrfs-zero-log,如果它成功的操作,你只是浪费了很多时间备份你的系统(但如果它不成功,你刚刚保存你的屁股)

然后,如果挂载失败,请执行btrfs恢复(系统的转储,因为我理解它是可恢复的操作,但是它不断地要求Y或y,所以请观察输出)

 btrfs restore /dev/sda5 /USB 

然后在安全的时候(当btrfs恢复完成时)执行btrfs-zero-log,如果它成功运行你只是浪费了很多时间备份你的系统(但如果它没有成功,你刚刚保存了你的屁股)

您可以先运行屏幕

 screen /bin/bash btrfs restore /dev/sda5 /USB 

屏幕侧面注意

要分离(命令仍然会运行):CONTROL-a然后键入“:detach”而不带引号然后按ENTER键

分离的另一种方法:然后关闭putty或你的终端,它将分离(命令/恢复仍将运行)。

要检查它,只需返回屏幕:

 screen -x 

screen -x将附加到会话,即使已分离,并且与-h说的不同,即使已经附加了它也将附加)

如果您有多个屏幕,屏幕-x将告诉您需要更具体地附加到会话:

 screen -ls 

ls列出所有会话,很容易记住。

要查看PID,您也可以这样做:

 ps aux | grep screen 

找到PID后,运行如下屏幕:

 screen -x PID 

这将附加到特定会话。 您可以将多个会话/ puttys连接到同一个屏幕(它们将输出相同的文本,您可以在一个中键入命令,并且它们将在另一个putty上镜像)

使用root fs挂载选项在引导时挂载:

 rootflags=recovery,nospace_cache 

要么

 rootflags=recovery,nospace_cache,clear_cache 

btrfs挂载选项的完整列表应该在这里https://btrfs.wiki.kernel.org/index.php/Mount_options和其他东西也可能有用,比如noatime,nodatacow(修复了一个内核bug给我一个给我一个有机会复制我的文件)。

将其添加到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 

如果您尝试使用UUID=0237alksfadg-lhdfkj3624-4fdfjb-9dsfe2d-dfddaf恢复安装在分区上的/ home目录。

彼得的回答为我解决了这个问题,尽管不是在Ubuntu上。 我有一个/home分区btrfs’d当然损坏了。 系统无法启动,因为它在fstab 。 我进入维护模式,用该分区清空线路,并正常启动(我有一个备用的ext4分区,我可以用作/home )。

我使用以下命令手动挂载分区:

mount -t btrfs -o recovery,nospace_cache,nospace_cache /dev/sda3 /mnt/sda3 ,实际上能够保存我的数据。 尽管安装它并不需要那么长时间。 彼得,谢谢。

 mount -t btrfs -o ro,nospace_cache,nospace_cache /dev/sda3 /mnt/sda3 

ro =只读

这对我有用

我有同样的问题。 重启后,我无法再挂载我的btrfs分区。 但是,这里提到的解决方案都没有解决它。

为我修复的是将内核从3.10升级到3.12。 重新启动后,可以再次安装btrfs分区。