On Mon, 15 Jan 2024 07:30:51 +0000 Andy Smith <andy@xxxxxxxxxxxxxx> wrote: > Hi, > > On machine 'A' I have a pair of: > > Device Model: Samsung SSD 870 EVO 4TB > Sector Size: 512 bytes logical/physical > > on top of this is an mdadm RAID-1 and that is an LVM PV. > > One of the LVs has been partitioned with an MBR and a single > partition spanning the whole of the 400GiB LV. > > I took a dd of this LV and transferred it to an identically-sized > LV on machine 'B' which has a pair of: > > Device Model: HGST HUS726T6TALN6L4 > Sector Size: 4096 bytes logical/physical > > The LV there when examined in a partitioning tool such as "fdisk" > now thinks it has a 3.2TiB partition and it is not usable. > Correcting the partition sector numbers allows for use of, for > example, "kpartx", to expose the partition as a loop device but the > ext4 driver and fsck.ext4 remain unable to detect a superblock. > > I have confirmed with sha256sum that the content of the > image/partition remains the same on source and destination. > > So, clearly the issue is the 512e sector size on source vs 4Kn on > destination. Is there any way to work around this in LVM? My issue > is that I would like to be able to move images of disks/filesystems > around at the block level without mounting/creating filesystem and > transferring with an fs-level application. > > If not, then possibly I can use hdparm to set the 4Kn drives to 512, > which will obviously involve destroying their contents, but that is > fine at this stage. > > I don't think the presence of a partition (as opposed to an ext4 > filesystem directly upon the LV) is relevant; I think the same > issues would occur with a direct filesystem. I mention it only for > completeness. Also, I realise that the problems would also happen > without LVM. I just wonder if there is any workaround at the LVM > layer, since that is already used here. I've had this issue before and there is a very simple solution. It does not work at the LVM layer though, but I suspect what you really care about is having it work at the software, as opposed to hardware or firmware layer. Since the software that created the image did so assuming a 512b sector size, create a block device that has that sector size. The trick is to use loopdev to create a layer that does the translation from 512b to 4k sector size. See the "--sector-size" argument to losetup. Glenn