On 2020/1/18 10:16 下午, Coly Li wrote: >>>> It works like this: >>>> >>>> # echo '0 3774578664 linear /dev/mapper/backing-device 8' | dmsetup create dmb >>>> >>>> But then I can't mount it: >>>> >>>> # mount /dev/mapper/dmb /r >>>> mount: /r: wrong fs type, bad option, bad superblock on >>>> /dev/mapper/dmb, missing codepage or helper program, or other error. >>> >>> It might be my fault, from bcache-tools, it seems the offset is >>> BDEV_DATA_START_DEFAULT (16 sectors). How about: >>> # echo '0 3774578656 linear /dev/mapper/backing-device 16' | dmsetup >>> create dmb >> >> Still no luck >> >> # echo '0 3774578656 linear /dev/mapper/backing-device 16' | dmsetup create dmb >> # mount /dev/mapper/dmb /r >> mount: /r: wrong fs type, bad option, bad superblock on >> /dev/mapper/dmb, missing codepage or helper program, or other error. > > The tricky part is to calculate the correct linear mapping size. > > For example, I have a 500G hard drive, from fdisk I see its size is > 1048576000 sectors. I use it as a bcache backing device and format an > Ext4 file system on it. Then I use the following mistaken command line > to setup a linear target to skip the first 8 sectors, > # echo '0 1048575000 linear /dev/sdc 16' | dmsetup create dmb > Then mount /dev/mapper/dmb to /mnt fails, the kmesg hints me, > [1884572.477316] EXT4-fs (dm-0): bad geometry: block count 131071998 > exceeds size of device (131071875 blocks) > > So I realize Ext4 file system will check the block device size, so I > need to provide an exact accurate length number for the linear target. > From the kmesg I see the correct sector size should be > (131071998*8=)1048575984, then I re-create the linear target by, > # echo '0 1048575984 linear /dev/sdc 16' | dmsetup create dmb > Then I mount /dev/mapper/dmb to /mnt, it works and I have the following > line from command 'mount', > /dev/mapper/dmb on /mnt type ext4 (rw,relatime) > > I don't use the encrpyt file system and I don't know the excact detail > about it. But I guess, it might because the incorrect length number for > your dm linear target as I show by the above example. > Sorry I realize maybe I mislead you.... I re-read the first email, it seems you create the bcache backing device on top of a raid raid1, then you cryptsetup on the bcache device. So I guess the linear dm target should be created on top of the md raid1, not /dev/mapper/backing-device. Which might be, # echo '0 3774578656 linear /dev/md127 16' | dmsetup create dmb The above line assumes luks has its superblock on offset zero from its own LBA, and <0 3774578656> should be a correct pair. If all the offset numbers are correct, dmb should be the block device for your to run cryptsetup open. Then you will have a /dev/mapper/backing-device for following mount. -- Coly Li