使用 BTRFS 替换为 luks 加密

使用 BTRFS 替换为 luks 加密

我的硬盘驱动器出现故障,其中包含构成根文件系统一部分的分区:

matt@ryzen3950 ~> btrfs device stats /dev/dm-2
[/dev/mapper/cryptsda1].write_io_errs    0
[/dev/mapper/cryptsda1].read_io_errs     0
[/dev/mapper/cryptsda1].flush_io_errs    0
[/dev/mapper/cryptsda1].corruption_errs  12
[/dev/mapper/cryptsda1].generation_errs  0

我想用另一个存储设备来替换这个。为此,我首先对新驱动器进行分区和加密:

matt@ryzen3950 ~> sudo parted /dev/sdd
(parted) mklabel gpt                                                      
(parted) mkpart primary btrfs 1MiB 100%                                   
(parted) quit                                                             
matt@ryzen3950 ~> sudo cryptsetup luksFormat /dev/sdd1
matt@ryzen3950 ~> sudo cryptsetup open --type luks /dev/sdd1 cryptsdd1

(我没有mkfs对此执行任何操作)

然后,我尝试执行 btrfs 替换(注意,该文件系统当前处于活动状态):

sudo btrfs replace start /dev/mapper/cryptsda1 /dev/mapper/cryptsdd1 /

但是,我收到错误:

/dev/mapper/cryptsdd1 appears to contain a partition table (atari).
ERROR: use the -f option to force overwrite of /dev/mapper/cryptsdd1

这听起来好像我不应该先对驱动器进行分区。我应该做以下事情吗?

sudo btrfs replace start /dev/sda /devsdd /

如果不是,那么正确的方法是什么?

最后,<path>btrfs中的replace是什么?我相信它是文件系统安装点(例如,/在实时根文件系统上)。它是否正确?

我阅读了完整的 btrfs-replace 手册页以及Btrfs 维基,但无法找到我的问题的答案。

答案1

但是,我收到错误:

/dev/mapper/cryptsdd1 appears to contain a partition table (atari).
ERROR: use the -f option to force overwrite of /dev/mapper/cryptsdd1

只需按照建议运行btrfs命令或先运行即可。-fwipefs -a /dev/mapper/cryptsdd1

你实际上是在打libblkid 中的一个已知问题(已经用最新的 util-linux 修复),用于检测设备上的文件系统的库,大多数存储工具都使用它 - btrfs 在这里使用它来确保您尝试使用的设备是空的,以便它可以警告用户不要意外删除现有的文件系统。在这种情况下,libblkid 错误地认为新创建的 LUKS 设备包含 atari 分区表,这是一个误报,它只是认为一些随机数据是 atari 超级块。

这听起来好像我不应该先对驱动器进行分区。我应该做以下事情吗?

sudo btrfs replace start /dev/sda /devsdd /

绝对不是,btrfs 只关心文件系统级别,它不“了解”底层分区和 LUKS 设备,首先重新创建这些是正确的做法。

最后,<path>btrfs中的replace是什么?我相信它是文件系统安装点(例如,/在实时根文件系统上)。它是否正确?

我不是 btrfs 专家,但我认为这是正确的,并且您的btrfs replace命令的第一个版本对我来说看起来不错。一定要先做好备份。

相关内容