[Onetouch Idol 3 General] guiniol:
I found two solutions, one for each of my problems.

First problem I had was the lack of space on my phone. That was gmail eating up 4G as cache. Deleted that, and I could do the backup on the internal storage. So, now I have a real backup, with no risk of corruption (except I rooted the phone yesterday, my bad ^^)

Second problem was adb corrupting the pipe somehow. So I figured I could use tcp, and I found the solution here: http://xdaforums.com/showthread.php?t=1818321

I'm doing a backup using my script and checking the md5sums against the backup done with the original script. Everyfile checks out for now, and if you install 'pv' you also get a nice progress report on each file.

Here is the final script:

#!/bin/bash

BACKUP_DIR=${1:-~/blocks/}

echo -en "#### Backup all your idol 3's partitions - DallasCZ & frankee207 @XDA ####\n"
echo -en "#### Modified by guiniol @XDA to not use internal storage ####\n"
echo -en "#### Thanks petrov.0 for showing me how the first few version were corrupting the backup ####\n\n"
echo -en "Please make sure your device is connected\n"
echo -en "Backup will be placed in $BACKUP_DIR\n"
read -p "Continue? [Y]es/use [S]udo/[N]o " prefix

shopt -s nocasematch
set -m

if [[ $prefix =~ ^(s|su|sudo)$ ]]; then
prefix="sudo "
elif [[ $prefix =~ ^(y|yes)$ ]]; then
prefix=""
else
echo "Aborting..."
exit
fi

${prefix}mkdir -p "${BACKUP_DIR}"
if [ ! -d "${BACKUP_DIR}" ]; then
echo "Directory wasn't created, aborting..."
exit -1
fi

if which pv >/dev/null 2>&1;
then
PV="| pv -i 0.5"
else
PV=""
fi

${prefix}adb forward tcp:5555 tcp:5555
sleep 1

echo "Backup modem ..."
${prefix}adb shell 'su -c "nc -l -p 5555 -e dd if=/dev/block/mmcblk0p1"' &
sleep 1
eval nc 127.0.0.1 5555 ${PV} > "${BACKUP_DIR}/modem"
echo "Backup mtunning ..."
sleep 1
${prefix}adb shell 'su -c "nc -l -p 5555 -e dd if=/dev/block/mmcblk0p2"' &
sleep 1
eval nc 127.0.0.1 5555 ${PV} > "${BACKUP_DIR}/tunning"
echo "Backup traceability ..."
sleep 1
${prefix}adb shell 'su -c "nc -l -p 5555 -e dd if=/dev/block/mmcblk0p3"' &
sleep 1
eval nc 127.0.0.1 5555 ${PV} > "${BACKUP_DIR}/traceability"
echo "Backup fsc ..."
sleep 1
${prefix}adb shell 'su -c "nc -l -p 5555 -e dd if=/dev/block/mmcblk0p4"' &
sleep 1
eval nc 127.0.0.1 5555 ${PV} > "${BACKUP_DIR}/fsc"
echo "Backup ssd ..."
sleep 1
${prefix}adb shell 'su -c "nc -l -p 5555 -e dd if=/dev/block/mmcblk0p5"' &
sleep 1
eval nc 127.0.0.1 5555 ${PV} > "${BACKUP_DIR}/ssd"
echo "Backup sbl1 ..."
sleep 1
${prefix}adb shell 'su -c "nc -l -p 5555 -e dd if=/dev/block/mmcblk0p6"' &
sleep 1
eval nc 127.0.0.1 5555 ${PV} > "${BACKUP_DIR}/sbl1"
echo "Backup rpm ..."
sleep 1
${prefix}adb shell 'su -c "nc -l -p 5555 -e dd if=/dev/block/mmcblk0p8"' &
sleep 1
eval nc 127.0.0.1 5555 ${PV} > "${BACKUP_DIR}/rpm"
echo "Backup tz ..."
sleep 1
${prefix}adb shell 'su -c "nc -l -p 5555 -e dd if=/dev/block/mmcblk0p10"' &
sleep 1
eval nc 127.0.0.1 5555 ${PV} > "${BACKUP_DIR}/tz"
echo "Backup hyp ..."
sleep 1
${prefix}adb shell 'su -c "nc -l -p 5555 -e dd if=/dev/block/mmcblk0p12"' &
sleep 1
eval nc 127.0.0.1 5555 ${PV} > "${BACKUP_DIR}/hyp"
echo "Backup modemst1 ..."
sleep 1
${prefix}adb shell 'su -c "nc -l -p 5555 -e dd if=/dev/block/mmcblk0p14"' &
sleep 1
eval nc 127.0.0.1 5555 ${PV} > "${BACKUP_DIR}/modemst1"
echo "Backup modemst2 ..."
sleep 1
${prefix}adb shell 'su -c "nc -l -p 5555 -e dd if=/dev/block/mmcblk0p15"' &
sleep 1
eval nc 127.0.0.1 5555 ${PV} > "${BACKUP_DIR}/modemst2"
echo "Backup simlock ..."
sleep 1
${prefix}adb shell 'su -c "nc -l -p 5555 -e dd if=/dev/block/mmcblk0p16"' &
sleep 1
eval nc 127.0.0.1 5555 ${PV} > "${BACKUP_DIR}/simlock"
echo "Backup persistent ..."
sleep 1
${prefix}adb shell 'su -c "nc -l -p 5555 -e dd if=/dev/block/mmcblk0p17"' &
sleep 1
eval nc 127.0.0.1 5555 ${PV} > "${BACKUP_DIR}/persistent"
echo "Backup splash ..."
sleep 1
${prefix}adb shell 'su -c "nc -l -p 5555 -e dd if=/dev/block/mmcblk0p18"' &
sleep 1
eval nc 127.0.0.1 5555 ${PV} > "${BACKUP_DIR}/splash"
echo "Backup tctpersist ..."
sleep 1
${prefix}adb shell 'su -c "nc -l -p 5555 -e dd if=/dev/block/mmcblk0p19"' &
sleep 1
eval nc 127.0.0.1 5555 ${PV} > "${BACKUP_DIR}/tctpersist"
echo "Backup hdcp ..."
sleep 1
${prefix}adb shell 'su -c "nc -l -p 5555 -e dd if=/dev/block/mmcblk0p20"' &
sleep 1
eval nc 127.0.0.1 5555 ${PV} > "${BACKUP_DIR}/hdcp"
echo "Backup DDR ..."
sleep 1
${prefix}adb shell 'su -c "nc -l -p 5555 -e dd if=/dev/block/mmcblk0p21"' &
sleep 1
eval nc 127.0.0.1 5555 ${PV} > "${BACKUP_DIR}/DDR"
echo "Backup fsg ..."
sleep 1
${prefix}adb shell 'su -c "nc -l -p 5555 -e dd if=/dev/block/mmcblk0p22"' &
sleep 1
eval nc 127.0.0.1 5555 ${PV} > "${BACKUP_DIR}/fsg"
echo "Backup sec ..."
sleep 1
${prefix}adb shell 'su -c "nc -l -p 5555 -e dd if=/dev/block/mmcblk0p23"' &
sleep 1
eval nc 127.0.0.1 5555 ${PV} > "${BACKUP_DIR}/sec"
echo "Backup aboot ..."
sleep 1
${prefix}adb shell 'su -c "nc -l -p 5555 -e dd if=/dev/block/mmcblk0p24"' &
sleep 1
eval nc 127.0.0.1 5555 ${PV} > "${BACKUP_DIR}/aboot"
echo "Backup boot ..."
sleep 1
${prefix}adb shell 'su -c "nc -l -p 5555 -e dd if=/dev/block/mmcblk0p26"' &
sleep 1
eval nc 127.0.0.1 5555 ${PV} > "${BACKUP_DIR}/boot"
echo "Backup recovery ..."
sleep 1
${prefix}adb shell 'su -c "nc -l -p 5555 -e dd if=/dev/block/mmcblk0p27"' &
sleep 1
eval nc 127.0.0.1 5555 ${PV} > "${BACKUP_DIR}/recovery"
echo "Backup system ..."
sleep 1
${prefix}adb shell 'su -c "nc -l -p 5555 -e dd if=/dev/block/mmcblk0p28"' &
sleep 1
eval nc 127.0.0.1 5555 ${PV} > "${BACKUP_DIR}/system"
echo "Backup persist ..."
sleep 1
${prefix}adb shell 'su -c "nc -l -p 5555 -e dd if=/dev/block/mmcblk0p29"' &
sleep 1
eval nc 127.0.0.1 5555 ${PV} > "${BACKUP_DIR}/persist"
echo "Backup fota ..."
sleep 1
${prefix}adb shell 'su -c "nc -l -p 5555 -e dd if=/dev/block/mmcblk0p30"' &
sleep 1
eval nc 127.0.0.1 5555 ${PV} > "${BACKUP_DIR}/fota"
echo "Backup misc ..."
sleep 1
${prefix}adb shell 'su -c "nc -l -p 5555 -e dd if=/dev/block/mmcblk0p32"' &
sleep 1
eval nc 127.0.0.1 5555 ${PV} > "${BACKUP_DIR}/misc"
echo "Backup keystore ..."
sleep 1
${prefix}adb shell 'su -c "nc -l -p 5555 -e dd if=/dev/block/mmcblk0p33"' &
sleep 1
eval nc 127.0.0.1 5555 ${PV} > "${BACKUP_DIR}/keystore"
echo "Backup config ..."
sleep 1
${prefix}adb shell 'su -c "nc -l -p 5555 -e dd if=/dev/block/mmcblk0p34"' &
sleep 1
eval nc 127.0.0.1 5555 ${PV} > "${BACKUP_DIR}/config"

sleep 1
${prefix}adb forward --remove tcp:5555

echo -e "\nBackup done! You can find it in ${BACKUP_DIR}"
exit

All the sleeps are necessary because the phone is really slow in establishing connection, so we need to give it time. Even with those the script should be faster than writing all the data twice.

Thanks petrov.0 for showing me that my backups were corrupted.