我的硬盘驱动器出现故障,其中包含构成根文件系统一部分的分区:
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
命令或先运行即可。-f
wipefs -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
命令的第一个版本对我来说看起来不错。一定要先做好备份。