Kernel: 5.11.8 vanilla, btrfs-progs 5.11.1

I booted a box with a root btrfs raid1 across two devices, /dev/nvme0n1p2 (devid 2) and /dev/sda2 (devid 3). For whatever reason during the initrd stage, btrfs device scan was unable to see the NVMe device and mounted the rootfs degraded after multiple retries as I had designed in the init script.

Once booted apparently the kernel was able to see nvme0n1p2 again (with no intervention from me) and btrfs device usage / btrfs filesystem show did not report any missing devices. btrfs scrub reported that devid 2 was unwriteable but the scrub completed successfully on devid 3 with no errors. New block groups for data and metadata were being created as single on devid 3.

I balanced with -dconvert=single -mconvert=dup which moved all block groups to devid 3 and completed successfully; there was nothing remaining on devid 2 so I removed the device from the filesystem and re-added it as devid 4. Once I'd balanced the filesystem back to -dconvert=raid1 -mconvert=raid1 everything was back to normal.

My main observation was that it was very hard to notice that there was an issue. Yes, I'd purposefully mounted as degraded, but there was no indication from the btrfs tools as to why new block groups were only being created as single on one device: nothing was marked as missing or unwriteable. Is this behavour expected? How can a device be unwriteable but not marked as missing?

Was my course of action to correct the issue correct - is there a better way to re-sync a raid1 device which has temporarily been removed?

(Afterwards I realised what caused the issue - missing libraries in the initrd - and I can reproduce it if necessary.)

Steven Davies

Reply via email to