This is very good advice. I did the same preparation, here is the distribution of files before the degraded state:

Number of successful reads: 280
Number of IO errors: 0
Successful read files size: sum 82648303047 max 4884066696 average 295172511

then I unmounted the fs, deleted disk 2, echo 3 > /proc/sys/vm/drop_caches, and remounted the fs.

sudo umount /mnt/loop
echo 3 | sudo tee /proc/sys/vm/drop_caches
echo 3 | sudo tee /proc/sys/vm/drop_caches
echo 3 | sudo tee /proc/sys/vm/drop_caches

dmesg --human --nopager --decode --level emerg,alert,crit,err,warn,notice,info
kern :info : [Jan22 13:18] tee (215899): drop_caches: 3
kern :info : [ +3.232287] tee (215931): drop_caches: 3
kern :info : [ +0.775697] tee (215953): drop_caches: 3

rm d2.img
sudo mount "$ld1" /mnt/loop

I am surprised that mounting worked without error but I guess the device is still active via losetup. I'm assuming this would be similar to an actual disk failure though, if the device weren't there maybe btrfs will complain and ask to be mounted with the `-o degraded` flag.

There was nothing exciting in dmesg

kern :info : [ +14.363762] BTRFS info (device loop0): using crc32c (crc32c-intel) checksum algorithm
kern :info : [ +0.000004] BTRFS info (device loop0): using free space tree

Oohh weird...

Number of successful reads: 280
Number of IO errors: 0
Successful read files size: sum 82648303047 max 4884066696 average 295172511

sudo btrfs scrub status /mnt/loop/
UUID: a57027e5-feb8-4f58-9022-f5dc0a5c67ac
Scrub started: Sun Jan 22 13:33:49 2023
Status: finished
Duration: 0:00:28
Total to scrub: 77.25GiB
Rate: 2.76GiB/s
Error summary: no errors found

Okay turns out the deleted file is still connected to the loopback device.

sudo losetup -d $ld2
sudo umount /mnt/loop
echo 3 | sudo tee /proc/sys/vm/drop_caches

Now we get some interesting stuff in dmesg

sudo mount -o degraded "$ld1" /mnt/loop
mount: /mnt/loop: wrong fs type, bad option, bad superblock on /dev/loop0, missing codepage or helper program, or other error.
dmesg(1) may have more information after failed mount system call.

kern :info : [Jan22 13:37] tee (222135): drop_caches: 3
kern :info : [ +16.362674] BTRFS info (device loop0): using crc32c (crc32c-intel) checksum algorithm
kern :info : [ +0.000004] BTRFS info (device loop0): using free space tree
kern :err : [ +0.000419] BTRFS error (device loop0): devid 2 uuid 1b352839-f719-499f-b9a7-25ed4d06e2be is missing
kern :err : [ +0.000003] BTRFS error (device loop0): failed to read chunk tree: -2
kern :err : [ +0.000183] BTRFS error (device loop0): open_ctree failed
kern :info : [ +11.713125] BTRFS info (device loop0): using crc32c (crc32c-intel) checksum algorithm
kern :info : [ +0.000004] BTRFS info (device loop0): allowing degraded mounts
kern :info : [ +0.000001] BTRFS info (device loop0): using free space tree
kern :warn : [ +0.000167] BTRFS warning (device loop0): devid 2 uuid 1b352839-f719-499f-b9a7-25ed4d06e2be is missing
kern :warn : [ +0.007647] BTRFS warning (device loop0): chunk 2177892352 missing 1 devices, max tolerance is 0 for writable mount
kern :warn : [ +0.000002] BTRFS warning (device loop0): writable mount is not allowed due to too many missing devices
kern :err : [ +0.000155] BTRFS error (device loop0): open_ctree failed

But we can still mount it as read-only

sudo mount -o ro,degraded "$ld1" /mnt/loop

And the results are

Number of successful reads: 219
Number of IO errors: 61
Successful read files size: sum 21798190683 max 2122064756 average 99535117
IO error files size: sum 60850112364 max 4884066696 average 997542825

In this test about 26% of data is still fully readable (21798190683 / (21798190683+60850112364)).

I also tried another variant of the experiment where I did all of the above but ran this command before removing the disk:

sudo rm /mnt/loop/file # a 500 mb file that was included the above tests. I deleted this to give btrfs defrag some room to work
sudo btrfs fi defrag -v -r -czstd /mnt/loop/

and the results are not much better... in fact they are worse 20% lol

Number of successful reads: 199
Number of IO errors: 80
Successful read files size: sum 16695157031 max 2122064756 average 83895261
IO error files size: sum 65428858016 max 4884066696 average 817860725