Ton*_*ony 15 filesystem mount 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
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我如何让这个分区工作吗?我在网上读到我可能可以使用 btrfs-restore 恢复数据,但是我在任何地方都找不到该程序。
小智 12
最简单的方法
btrfs-zero-log /dev/sda5
Run Code Online (Sandbox Code Playgroud)
您遇到该问题是因为事务(写入或删除)卡在日志日志中并且磁盘与它不匹配。
这个怎么运作:
因此,当数据首先写入日志然后写入磁盘时(或同时写入,但日志只保存有关即将进行的写入的元数据 - 不确定......需要对该部分进行更多研究)......
无论如何,如果您在此写入/删除的过程中关闭系统或执行某些操作来启动系统(卸下保存 btrfs 挂载点的 USB),那么当它返回时,该挂载将不起作用(dmesg和btrfsck)将更详细地向您显示错误)...
查看 dmesg,您将看到相同的传输消息。
你会看到这样的事情:
parent transid verify failed on 109973766144 wanted 1823 found 1821
Run Code Online (Sandbox Code Playgroud)
这意味着 btrfs 想要 transid 1823(那是在日志上)但在磁盘上它看到了 1821。所以磁盘距离与日志同步有 2 个事务。我个人会在这里冒 brtfs-zero-log 的风险,因为它只有 2 个事务。但是如果这是你唯一的数据,要 100% 安全(顺便说一下,如果你有关键数据,你永远不应该只有它的 1 个副本,总是在其他安全的位置有一个副本/备份 - 责怪 btrfs 的创建者不会证明自己没有备份的责任 - btrfs 不是备份解决方案,它是一个文件系统 - 除了在其他地方拥有它的副本之外,没有什么是真正的备份解决方案 - 甚至不是奇偶校验或镜像驱动器,真正的备份是坐在阿尔卑斯山地下的某个地方,而它的活动副本在你德克萨斯州的办公室里)
parent transid verify failed on 31302336512 wanted 62455 found 62456
Run Code Online (Sandbox Code Playgroud)
此处日志需要 62455,但磁盘在 62456 处领先 1,因此在您的情况下,我将清除日志。日志这次没有更新。我再次告诉你关于安全的事情,如果它是你唯一的数据并且它的超级关键(你真丢脸),我会首先执行以下操作以确保安全。
运行 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
Run Code Online (Sandbox Code Playgroud)
然后将所有文件 cp 或 rsync 到安全位置,然后在安全时执行 btrfs-zero-log,如果操作成功,您只是浪费了大量时间备份系统(但如果不成功,您只是保存了您的系统)屁股)
然后,如果挂载失败,则执行 btrfs 还原(系统转储,据我所知,它是可恢复的操作,但是它时不时地不断询问 Y 或 y,因此请注意输出)
btrfs restore /dev/sda5 /USB
Run Code Online (Sandbox Code Playgroud)
然后在安全时(当 btrfs 恢复完成时)做 btrfs-zero-log,如果它是一个成功的操作,你只是浪费了很多时间来备份你的系统(但如果它不成功,你只是保存了你的屁股)
您可以先运行 screen
screen /bin/bash
btrfs restore /dev/sda5 /USB
Run Code Online (Sandbox Code Playgroud)
屏幕边注
要分离(命令仍将运行): CONTROL-a 然后键入不带引号的“:detach”,然后按 ENTER
另一种分离方法:然后关闭腻子或您的终端,它将分离(命令/恢复仍将运行)。
要检查它,只需屏幕返回它:
screen -x
Run Code Online (Sandbox Code Playgroud)
screen -x 将附加到会话,即使已分离,并且与 -h 所说的不同,即使它已经附加,它也会附加)
如果您有多个屏幕, screen -x 会告诉您需要更具体地附加到会话:
screen -ls
Run Code Online (Sandbox Code Playgroud)
ls 用于列出所有会话,很容易记住。
要查看 PID,您还可以执行以下操作:
ps aux | grep screen
Run Code Online (Sandbox Code Playgroud)
一旦你找到你的PID,然后像这样运行屏幕:
screen -x PID
Run Code Online (Sandbox Code Playgroud)
这将附加到特定会话。您可以将多个会话/腻子附加到同一屏幕上(它们将输出相同的文本,您可以在其中键入命令,并且它们将被镜像到另一个腻子上)
使用 root fs 挂载选项在引导时挂载:
rootflags=recovery,nospace_cache
Run Code Online (Sandbox Code Playgroud)
或者
rootflags=recovery,nospace_cache,clear_cache
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
如果您试图恢复挂载在带有UUID=0237alksfadg-lhdfkj3624-4fdfjb-9dsfe2d-dfddaf.
| 归档时间: |
|
| 查看次数: |
42498 次 |
| 最近记录: |