btrfs 无法从只读文件系统发送

btrfs 无法从只读文件系统发送

因此,我稍微损坏了我的 btrfs 根文件系统。现在,当我启动时,挂载根读写失败,并且文件系统以只读方式挂载。我尝试读取的每个文件似乎都正常,因此我认为损坏相当有限。

我有一堆本地快照。我希望腐败不会影响到他们所有人;在采取更彻底的措施来尝试修复问题之前,我想将尽可能多的文件复制到我的外部备份磁盘上。但btrfs send失败了-30 (Read-only file system)

  • 如果btrfs send发送文件系统是否以只读方式安装?这会让我感到惊讶,因为它似乎不需要在那里写任何东西。
  • 如果是这样,这是因为btrfs send实际上确实写入了发送文件系统,还是有其他原因进行此检查?
  • 有什么解决方法吗?目前我计划只重新同步快照,但这当然要慢得多。

(如果解决其他要点似乎太困难,我将投票赞成仅解决上述要点之一的答案)。

答案1

我刚刚在我的ztestVM 上测试了这个(我用它来测试/练习 zfs、btrfs、mdadm、lvm 和类似的东西 - VM 附加了 15 x 100MB 虚拟驱动器,从 /dev/vda 到 /dev/vdo。它们对于我在其上运行的测试类型来说不需要很大)。

无论如何,我能够将子卷从只读 btrfs 挂载发送到另一个 fs 上的文件(/tank1,即 ZFS)。例如

# df -Th /b1
Filesystem     Type   Size  Used Avail Use% Mounted on
/dev/vdb1      btrfs  190M  7.3M  148M   5% /b1

# btrfs filesystem show /b1
Label: none  uuid: a5217930-73a9-4481-a14a-2c1974b3f2db
    Total devices 2 FS bytes used 4.00MiB
    devid    1 size 190.00MiB used 104.00MiB path /dev/vdb1
    devid    2 size 190.00MiB used 104.00MiB path /dev/vdc1

# mount -o ro,remount /b1

# mount | grep /b1
/dev/vdb1 on /b1 type btrfs (ro,relatime,space_cache,subvolid=5,subvol=/)

# btrfs send /b1/sv1_20160506 -f /tank1/b1.send
At subvol /b1/sv1_20160506

# ls -l /tank1/b1.send 
-rw-rw-r-- 1 root root 2177404 Jun  7 01:24 /tank1/b1.send

我可以想到为什么它不能在您的系统上运行的两种可能性(但可能还有其他可能性,并且这些都不一定正确):

  1. btrfs 可能需要写入写入/tmp并且/tmp是一个子目录或者/- 我认为这不太可能,但可能值得尝试在 上挂载 tmpfs ramdisk /tmp

  2. btrfs 行为异常,因为您的 btrfs /fs 已损坏。

对于这两种可能性,一种可能的解决方法可能是从救援 CD/DVD/USB/等启动有 btrfs 支持gparted克隆齐拉是不错的选择)并尝试btrfs send从那里获取快照(手动将外部备份磁盘安装为 RW 后)。

相关内容