'Everyone' says, "To Backup your Pi, use Win32 Disk Imager to read the SD card and make a new .img" ..
WRONG WRONG WRONG == what they DON'T say is, 9 times out of 10, when you come to 'restore' the backup .img) to a new 'same sized' SD card, Win32 Disk Imager refuses, saying 'Destination insufficient space' !!!
The newbie pops in a 'double sized' card and forgets about it .. then makes another Backup and finds exactly the same problem .. at some stage, when going from 8Gb to 16Gb to 32Gb to 64Gb most people realise that restoring the backup is soon going to be impossible (not to mention it's getting very expensive
The PROBLEM is three-fold -
1) first all SD cards are not the same = they all contain slightly different 'block' counts due to manufacturers having to 'map out' the failed blocks ('bad sectors' in disk speak) and cheap cards shipping with more and more 'bad sectors'. This you can't fix.
2) second, for some insane reason, on the very first boot, the Pi expands it's file system to use ALL the available space on the SD card i.e. every last block. You need to stop the Pi doing this BEFOR you put the SD card in the Pi.
3) When Win32 Disk Imager reads the SD card, it copies each and every block .. so later, when you try to write to a 'same sized' SAD card, you might get lucky (with one that has fewer bad blocks) or, more likley, you get the 'insufficient space' error (what you NEED is a tool that will ONLY read up to the end of the last partitiom, NOT the end of the card)
SO the solution (I've only actually done this on a Pi Zero with stretch LITE == someone more clever than me will have to check that it works for NOOBS .. )
1) STOP the Pi using all the space at first boot
After burning the new Stretch LITE to SD card, in Windows, open the SD card (Windows will only see it as about 40Mb i.e. just the FAT32 partition), find the file cmdline.txt and DELETE the entry " init=/usr/lib/raspi-config/init_resize.sh"
2) BOOT the Pi, go find the file /usr/lib/raspi-config/init_resize.sh. EDIT the file so the line :-
"TARGET_END=$((ROOT_DEV_SIZE - 1))" now reads :-
"TARGET_END=$((ROOT_DEV_SIZE * 0.95))"
3) Run the modified init_resize.sh script (or just add " init=/usr/lib/raspi-config/init_resize.sh" back into cmdline.txt and reboot the Pi)
4) To make a backup .img YOU MUST NOT USE Win32 Disk Imager (if you do, it reads ALL the blocks and you are back to 'insufficient space') == INSTEAD use 'DiskInternals Linux Reader' (https://www.diskinternals.com/linux-reader/
) == this ONLY reads to the end of the last partition
NOT the end of the SD card.
The backup .img made by Linux Reader can now be 'restored' (i.e. written using Win32 Disk Imager) to any of your 'same sized' SD cards (assuming they are at least 95% (0.95) of the size of the first one you used)