少量背景故事:
我有一个小型媒体文件系统,上面存储着用于HTPC设置的各种电影和电视节目。最初是使用btrfs
1TB WD外部驱动器设置的。
后来,我决定购买另一个驱动器,以提供此文件系统RAID1镜像功能。该驱动器是希捷梭子鱼(2TB,BARRACUDA 7200.14系列)。不幸的是,这不是驱动器的好选择。尽管BTRFS可以纠正这些错误,但该驱动器很快就开始产生大量的读取错误。
最近,从该驱动器读取的错误数量激增,其状况稳定地恶化。BTRFS现在开始崩溃:
kernel: RSP: 0018:ffff88005f0e7cc0 EFLAGS: 00010282
kernel: RIP: 0010:[<ffffffffa0081736>] [<ffffffffa0081736>] btrfs_check_repairable+0xf6/0x100 [btrfs]
kernel: task: ffff88001b5c4740 ti: ffff88005f0e4000 task.ti: ffff88005f0e4000
kernel: Workqueue: btrfs-endio btrfs_endio_helper [btrfs]
kernel: CPU: 1 PID: 3136 Comm: kworker/u8:3 Tainted: G O 4.5.3-1-ARCH #1
kernel: invalid opcode: 0000 [#1] PREEMPT SMP
kernel: kernel BUG at fs/btrfs/extent_io.c:2309!
kernel: ------------[ cut here ]------------
kernel: BTRFS info (device sdc1): csum failed ino 73072 extent 1531717287936 csum 3335082470 wanted 3200325796 mirror 0
kernel: ata3: EH complete
kernel: BTRFS error (device sdc1): bdev /dev/sda3 errs: wr 0, rd 18, flush 0, corrupt 0, gen 0
kernel: blk_update_request: I/O error, dev sda, sector 2991635296
我想从RAID1阵列中删除故障的驱动器,并在单个驱动器上恢复无冗余。不幸的是,似乎缺少有关如何执行此操作的文档。
我知道可以执行以下操作:
sudo btrfs balance start -dconvert=single /media
可以将数据配置文件转换为single
模式,但是我不确定仅将数据放置在何处。由于其中一个驱动器发生故障,我希望能够确保BTRFS不会尽职尽责地擦除好驱动器上的所有数据,并将单个副本放在坏驱动器上-相反,我想简单地就像其他驱动器不存在一样(例如,转换回我的旧设置)
这不起作用:
$ sudo btrfs device delete /dev/sda3 /media
ERROR: error removing device '/dev/sda3': unable to go below two devices on raid1
我是什么做的?帮助将不胜感激。
TL; DR:从BTRFS中的1个驱动器开始single
,添加了另一个驱动器,使其成为它RAID1
,另一个驱动器现在出现错误,我该如何只返回一个驱动器(特别是已知的良好驱动器)single
?
dconvert=single
仅执行一个操作就可以完成我担心的操作,并删除已知的正确副本。:(