[Redmi Note 9S / Note 9 Pro (Indian Model) Guides, ] herlgl:
Ok I finally got it to bootloop into Fastboot. For that I had to install "Advanced Charging Controller" via Magisk Download and the app.

- You can still access TWRP and use MTP to access the "data" partition like normally with MTP

- You can still access /data/data, so you could backup all your apps data

- You can still access ADB

df -h output:

~ # df -h
Filesystem Size Used Available Use% Mounted on
tmpfs 2.7G 752.0K 2.7G 0% /dev
tmpfs 2.7G 0 2.7G 0% /mnt
tmpfs 2.7G 0 2.7G 0% /apex
tmpfs 2.7G 2.6M 2.7G 0% /tmp
/dev/block/sda13 356.0M 1.1M 328.0M 0% /cache
/dev/block/sda18 104.7G 15.3G 89.4G 15% /data
/dev/block/sda18 104.7G 15.3G 89.4G 15% /sdcard

mount output:

~ # mount
rootfs on / type rootfs (rw,seclabel,size=2725696k,nr_inodes=681424)
tmpfs on /dev type tmpfs (rw,seclabel,nosuid,relatime,mode=755)
devpts on /dev/pts type devpts (rw,seclabel,relatime,mode=600,ptmxmode=000)
proc on /proc type proc (rw,relatime,gid=3009,hidepid=2)
sysfs on /sys type sysfs (rw,seclabel,relatime)
selinuxfs on /sys/fs/selinux type selinuxfs (rw,relatime)
tmpfs on /mnt type tmpfs (rw,seclabel,nosuid,nodev,noexec,relatime,mode=755,gid=1000)
tmpfs on /apex type tmpfs (rw,seclabel,nosuid,nodev,noexec,relatime,mode=755)
none on /acct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct)
tmpfs on /tmp type tmpfs (rw,seclabel,relatime)
none on /config type configfs (rw,relatime)
adb on /dev/usb-ffs/adb type functionfs (rw,relatime)
fastboot on /dev/usb-ffs/fastboot type functionfs (rw,relatime)
/dev/block/sda13 on /cache type ext4 (rw,seclabel,relatime,data=ordered)
/dev/block/sda18 on /data type f2fs (rw,lazytime,seclabel,relatime,background_gc=on,discard,no_heap,user_xattr,inline_xattr,acl,inline_data,inline_dentry,flush_merge,extent_cache,mode=adaptive,active_logs=6,alloc_mode=default,fsync_mode=posix)
/dev/block/sda18 on /sdcard type f2fs (rw,lazytime,seclabel,relatime,background_gc=on,discard,no_heap,user_xattr,inline_xattr,acl,inline_data,inline_dentry,flush_merge,extent_cache,mode=adaptive,active_logs=6,alloc_mode=default,fsync_mode=posix)

cat /proc/partitions output:

~ # cat /proc/partitions
major minor #blocks name

1 0 8192 ram0
1 1 8192 ram1
1 2 8192 ram2
1 3 8192 ram3
1 4 8192 ram4
1 5 8192 ram5
1 6 8192 ram6
1 7 8192 ram7
1 8 8192 ram8
1 9 8192 ram9
1 10 8192 ram10
1 11 8192 ram11
1 12 8192 ram12
1 13 8192 ram13
1 14 8192 ram14
1 15 8192 ram15
8 0 120479744 sda
8 1 8 sda1
8 2 32768 sda2
8 3 1024 sda3
8 4 512 sda4
8 5 512 sda5
8 6 131072 sda6
8 7 1048576 sda7
8 8 131072 sda8
8 9 131072 sda9
8 10 64 sda10
8 11 64 sda11
8 12 16384 sda12
8 13 393216 sda13
8 14 393216 sda14
8 15 16384 sda15
259 0 8192 sda16
259 1 8388608 sda17
259 2 109786956 sda18
8 16 8192 sdb
8 17 7168 sdb1
8 18 128 sdb2
8 64 4194304 sde
8 65 512 sde1
8 66 4096 sde2
8 67 512 sde3
8 68 262144 sde4
8 69 1024 sde5
8 70 4096 sde6
8 71 32768 sde7
8 72 8192 sde8
8 73 32768 sde9
8 74 512 sde10
8 75 512 sde11
8 76 512 sde12
8 77 128 sde13
8 78 64 sde14
8 79 2048 sde15
259 3 2048 sde16
259 4 512 sde17
259 5 4096 sde18
259 6 512 sde19
259 7 262144 sde20
259 8 1024 sde21
259 9 4096 sde22
259 10 32768 sde23
259 11 8192 sde24
259 12 32768 sde25
259 13 512 sde26
259 14 512 sde27
259 15 512 sde28
259 16 128 sde29
259 17 64 sde30
259 18 2048 sde31
259 19 2048 sde32
259 20 4 sde33
259 21 1024 sde34
259 22 256 sde35
259 23 8192 sde36
259 24 33424 sde37
259 25 4 sde38
259 26 1024 sde39
259 27 8192 sde40
259 28 2048 sde41
259 29 65536 sde42
259 30 128 sde43
259 31 32 sde44
259 32 32 sde45
259 33 512 sde46
259 34 28 sde47
259 35 512 sde48
259 36 1024 sde49
259 37 64 sde50
259 38 131072 sde51
259 39 24576 sde52
259 40 64 sde53
259 41 24576 sde54
259 42 131072 sde55
8 32 8192 sdc
8 33 7168 sdc1
8 34 128 sdc2
8 80 131072 sdf
8 81 104 sdf1
8 82 2048 sdf2
8 83 2048 sdf3
8 84 10240 sdf4
8 85 128 sdf5
8 48 131072 sdd
8 49 104 sdd1
8 50 128 sdd2
8 51 1024 sdd3
253 0 934804 dm-0
253 1 1403780 dm-1
253 2 2356452 dm-2

Btw I just realized that on RN7 TWRP I also get the "Failed to mount '/system_root' (Device or resource busy)" error.

df -h output after flashing new .EU ROM:

~ # df -h
Filesystem Size Used Available Use% Mounted on
tmpfs 2.7G 752.0K 2.7G 0% /dev
tmpfs 2.7G 0 2.7G 0% /mnt
tmpfs 2.7G 0 2.7G 0% /apex
tmpfs 2.7G 6.4M 2.7G 0% /tmp
/dev/block/sda18 104.7G 14.5G 90.2G 14% /data
/dev/block/sda18 104.7G 14.5G 90.2G 14% /sdcard
/dev/block/dm-1 1.3G 1.2G 33.4M 97% /vendor
/dev/block/sda13 356.0M 428.0K 328.7M 0% /cache
/dev/block/dm-2 2.2G 2.1G 109.5M 95% /system_root
/dev/block/dm-2 2.2G 2.1G 109.5M 95% /system

Ok when in ADB trying to mount the "dm" devices you can mount dm-0 and dm-1, but dm-2 (which should be system) fails:

~ # mount -r /dev/block/dm-2 /fufu/ -v -t ext4
mount: mounting /dev/block/dm-2 on /fufu/ failed: Read-only file system

DM-verity is disabled:

adb enable-verity
verity not enabled - ENG build

e2fsck:

~ # e2fsck /dev/block/dm-2
e2fsck 1.44.4 (18-Aug-2018)
e2fsck: Operation not permitted while trying to open /dev/block/dm-2
You must have r/w access to the filesystem or be root
~ # whoami
root

File system is still intact. You can "dd" the dm-2 partition to some other place and access it via Linux or an ext4 viewer on Windows (https://www.diskinternals.com/linux-reader/ for example). You can also do it via adb: "adb pull /dev/block/dm-2"

When mounting (see above) and then looking in the log (dmesg):

<6>[ 1057.614782] EXT4-fs (dm-2): INFO: recovery required on readonly filesystem
<3>[ 1057.614797] EXT4-fs (dm-2): write access unavailable, cannot proceed

tune2fs for dm-1 and dm-2:

~ # tune2fs -l /dev/block/dm-1
tune2fs 1.44.4 (18-Aug-2018)
Filesystem volume name: vendor
Last mounted on: <not available>
Filesystem UUID: 6d16bab1-58d9-3c5d-8f14-f608f924affd
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode filetype extent sparse_super large_file uninit_bg
Filesystem flags: unsigned_directory_hash
Default mount options: (none)
Filesystem state: clean
Errors behavior: Remount read-only
Filesystem OS type: Linux
Inode count: 87824
Block count: 350944
Reserved block count: 0
Free blocks: 12643
Free inodes: 84860
First block: 0
Block size: 4096
Fragment size: 4096
Reserved GDT blocks: 87
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 7984
Inode blocks per group: 499
Last mount time: n/a
Last write time: Thu Jan 1 08:00:00 1970
Mount count: 0
Maximum mount count: -1
Last checked: Thu Jan 1 08:00:00 1970
Check interval: 0 (<none>)
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 28
Desired extra isize: 28
Journal inode: 8
Default directory hash: tea
Journal backup: inode blocks

~ # tune2fs -l /dev/block/dm-2
tune2fs 1.44.4 (18-Aug-2018)
Filesystem volume name: /
Last mounted on: /
Filesystem UUID: bbcb9ad2-245d-035f-a549-7d500312efe1
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode filetype needs_recovery extent sparse_super large_file uninit_bg
Filesystem flags: unsigned_directory_hash
Default mount options: (none)
Filesystem state: clean
Errors behavior: Remount read-only
Filesystem OS type: Linux
Inode count: 147456
Block count: 589113
Reserved block count: 0
Free blocks: 32124
Free inodes: 142168
First block: 0
Block size: 4096
Fragment size: 4096
Reserved GDT blocks: 143
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8192
Inode blocks per group: 512
Last mount time: Sun Aug 2 03:07:27 2020
Last write time: Thu Jan 1 08:00:00 1970
Mount count: 4
Maximum mount count: -1
Last checked: Thu Jan 1 08:00:00 1970
Check interval: 0 (<none>)
Lifetime writes: 692 kB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 28
Desired extra isize: 28
Journal inode: 8
Default directory hash: tea
Journal backup: inode blocks

-> dm-2 has a flag called "needs_recovery" set.

- I can run e2fsck on the dd exported image of dm-2 which recovers it fine, but I cannot dd it back to dm-2:

~ # dd if=/sdcard/systemfile.img of=/dev/block/dm-2
dd: writing '/dev/block/dm-2': Operation not permitted
1+0 records in
0+0 records out
0 bytes (0B) copied, 0.000131 seconds, 0B/s

You can actually mount it manually:

mount -o noload /dev/block/dm-2 /system_root

Won't help you though as this will be a read-only temporary mount.

So to

repair

, go into TWRP, add the .EU ROM .zip to your phone via MTP and install it.

In case you flashed other files like Magisk, you have to flash them again too.

Phone was completely restored after reboot (took a while longer than normal start). All settings still there, all apps/settings still there exactly like it was left.