Shrink my partition to new disk

I want to backup my partitions by shrinking it my issue is like
I want to create a new disk copy from only the used blocks I my current image.
How would I redirect the output of resize2fs to new disk and dd the current
partition so that I can boot my new image without issues and also without touching my current image and copying over of only the required data.

I understand that I can copy the entire disk and then resize the cloned disk but this seems inefficient as not all my disk is being used.
I dont want to hinder the current working disk manipulations on this should be avoided as I dont have any other backup.

So suppose I have a 2TB disk of which only 100GB is being used I need only these 100GB in the new disk. Is there any way of copying the used blocks in the existing filesystem to the new filesystem ?

Any pointer or clear ideas would be really useful. I appreciate this if I get some list of commands or steps and doing this without any software

Resizing only works in place. I'd just create a new filesystem and copy files into it.

$ mount -o ro /dev/old /mnt/old
$ mkfs.ext3 /dev/new
$ mount /dev/new /mnt/new
$ cd /mnt/old
$ tar -cpf - . | tar -C /mnt/old -xpf -

To get it to boot though, you'll need to install grub on the new drive. This can be done from a linux livecd. Be sure to back up your grub configuration files in case installing grub stomps over them.

Thanks for the reply
Would it be efficient to copy entire data, is there any way to just copy over the blocks and adjust them according to the newly created filesystem ?
Would tar be able to handle the corrupted data like dd can handle since dd does a blind copy. Is there a way of like creating another sparse image file of 2TB then copying over only required data blocks there which will exclude the empty blocks and then resizing the sparse image to 200GB.

If I knew of any I'd have told you so the first time you asked.

You can't safely shrink a disk that might be failing -- disk metadata might be corrupted, not just files, making any rearrangement very hazardous to data integrity. You might get a useless hash, or nothing at all. Either make a blind copy, or don't.

There are ways to shrink a blind copy -- compression, or a sparse file -- but none of them leave the resulting image bootable. There's no such thing as a sparse partition, after all, just sparse files. If you're content with having your backup not be bootable, this would work, I wrote sparsecat to help do this. It creates sparse files with a brute-force approach, making sections full of NULLs sparse, meaning it won't screw up because of a trashed sector but might not make everything that COULD be sparse actually sparse. (I don't guarantee its safety or applicability or portability however, it's just a hack I wrote for my own use.)

dd if=/dev/disk conv=noerror,sync | sparsecat > /mnt/backupdir/sparse.img

If the disk is failing, you can't reliably know which blocks are occupied.