最简单的方法
btrfs-zero-log /dev/sda5
由于事务(写入或删除)卡在日志日志中并且磁盘与之不匹配,因此您遇到了这个问题。
怎么运行的:
因此,当数据第一次写入时会先写入日志,然后再写入磁盘(或同时写入磁盘,但是日志只会保存有关即将进行的写入的元数据-不确定...需要对该部分进行更多研究)...
无论如何,如果您在此写入/删除过程中关闭系统电源或执行某些操作以使系统正常运行(卸下用于保存btrfs挂载点的USB),则当该挂载返回时,该挂载将不起作用,它将失败(dmesg和btrfsck将向您显示错误的详细信息)...
查看dmesg,您将看到那些相同的无效消息。
您将看到如下内容:
parent transid verify failed on 109973766144 wanted 1823 found 1821
这意味着btrfs需要Transif 1826(在日志上),但是在磁盘上却看到1821。因此磁盘与日志不同步只有2个事务。我个人会在这里冒brtfs-zero-log的风险,仅因为它只有2笔交易。但是,如果这是您唯一的数据,请确保100%安全(顺便说一句,如果您有关键数据,则永远不要只有1个副本,而要始终在安全的其他位置进行副本/备份-指责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,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。
分离的另一种方法:然后关闭腻子或您的终端,它将分离(命令/ restore仍将运行)。
要对其进行检查,只需将其退回到屏幕即可:
screen -x
屏幕-x将附加到会话(即使已分离),并且与-h不同,即使它已经附加,它也将附加)
如果您有多个屏幕,则屏幕-x将告诉您需要更具体地附加到会话:
screen -ls
ls列出所有会话,很容易记住。
要查看PID,您还可以执行以下操作:
ps aux | grep screen
一旦找到您的PID,就可以像这样运行屏幕:
screen -x PID
这将附加到特定的会话。您可以在同一屏幕上附加多个会话/腻子(它们将输出相同的文本,您可以在其中键入命令,然后将它们镜像到另一个腻子上)
nospace_cache
?