E: 30.12.2010 Latauslinkki korjattu.
Lataa iso-image:
http://pukki.tontut.fi/saato/tc/TC-survival-0.3.isoImage sisältää Tiny Core Linux -pohjaisen "eloonjäämis"-live-Linuxin eli läjän admin-työkaluja samassa paketissa, keskittyen kiperiin tilanteisiin, eli kun tietokone ei käynnisty tai dataa on kateissa. Lisää ohjelmia ja epäkohtien korjausta pakettiin tulee toiveiden mukaan.
Tällä hetkellä paketti sisältää:
* Gparted, graafinen osiointiohjelma
* Partimage, kokonaisen osion (varmuus)kopiointiohjelma
* Testdisk, osiotaulunpalauttamisohjelma
* Photorec, tiedostonpalauttamisohjelma (paljon tiedostomuotoja)
* WinRestore, rekisterinpalauttamisohjelma XP:tä varten (kts. tämän viestin loppuosa)
* MbrFixer, asentaa Grubin tai M$-sälät pääkäynnistyslohkoon
* Firefox, jos ny tarvii surffata ni pääsee
Tarpeellinen oheissälä:
* Ntfs-3g -tuki
* Nfs-tuki (client ja server)
* Ssh-serveri
Sekä tietysti perussetti komentorivityökaluja.
Puuttuvia:
* ext4-tuki
Juttu lähti liikkeelle tästä, ja foorumilaiset ehdottivat sitten tämän tyyppisten työkalujen lyömistä samaan läjään.
----------
Itselle ei ole koskaan käynyt (koska en käytä), mutta tuttaville on joskus käynyt niin ikävästi, että XP on menny sen verran jumiin, ettei pysty boottaamaan eikä näin ollen palauttamaan palautuspisteeseen. Kyseessä voi olla (lukuisten muiden syiden ohella) esimerkiksi viallinen tai korruptoitunut rekisteri. Kaivoin verkosta ohjeet miten rekisteri palautetaan palautuspisteestä käsipelillä, mutta totesin, että Linuxin avulla tämäkin hoituisi paljon helpommin ilman väliboottaamisia. Joten kirjoitin skriptin, jonka voi ajaa viallisessa XP-koneessa vaikkapa live-CD:ltä ja hetkessä rekisteri on palautettu. Sitten vaan kädet ristissä boottaamaan XP:tä, ja hyvällä onnella säästit päivän työn, koska vaihtoehtona todennäköisesti on vain uudelleenasennus.
Käytät tätä koodia omalla vastuullasi, minulla se toimii, mutta en lupaa että se toimii sinulla tai on muutenkaan virheetön.
Kopioi koodi ja liitä uuteen tekstitiedostoon.
Anna tiedostolle suoritusoikeudet.
chmod +x tiedosto
Aja tiedosto pääkäyttäjäoikeuksin.
sudo ./tiedosto
#!/bin/bash
# THIS SCRIPT HELPS YOU TO RESTORE WINDOWS XP REGISTRY FROM RESTORE POINT.
# THIS MAY BE USABLE WHEN XP CAN'T BOOT UP AT ALL.
# VARIABLES
WINMNT="/mnt/win_restore"
# FUNCTIONS
function checkRoot
{
if [ $(id -u) != 0 ]; then echo -e "You must have superuser permissions to run this script."
echo -e "Please use sudo for example.";
exit;
fi
}
function selectPartition
{
while [ ! -b "$PART" ]
do
clear
for i in `find /dev -name '?d?' | grep -v udev | grep -v hdc | grep -v fd`
do
parted $i print -s | grep -v ext | grep -v swap \
| grep -v extended | grep -v Sector | grep -v Err
done
echo -e "\nPlease select your Windows partition."
echo "Type a name and number of partition. (NOT just /dev/hda)"
echo -e "\nFor example:"
echo -e "/dev/hda1\n"
echo -e "(Type \"quit\" without quotes if you want to quit.)\n"
echo -e ">" | head -c1
read PART
if [ $PART = "quit" ]; then echo "Quitting...press enter"; read; exit; fi
DEVICE=`echo $PART | head -c8`
done
}
function selectRestorePoint
{
cd "$WINMNT"/System\ Volume\ Information
cd `ls -t | grep _restore | head -n 1`
while [ ! -d "$RP" ]
do
clear
echo -e "Here is a list of restore points.\n"
for i in $(ls -d [Rr][Pp]*)
do
echo -e "Restore point number:" | tr "\n" " "
ls -d $i | tail -c+3 | tr "/\n" " ";
echo -e " Last modification (YYYY-MM-DD):" | tr "\n" " ";
stat -c "%z" $i | head -c10; echo;
done
echo -e "\nPlease select restore point and type NUMBER."
echo "The latest one is not recommended. It may be the damaged one."
echo -e "(Type \"quit\" without quotes if you want to quit.)\n"
echo -e ">" | head -c1
read RPNUM
if [ $RPNUM = "quit" ]; then unmountPartition; echo "Quitting...press enter"; read; exit; fi
RP=`find . -iname rp$RPNUM | sed -e 's/\.\///1' | head -n1`
done
}
function selectWIN
{
cd $WINMNT
while [ ! -d "$WINDIR" ]
do
clear
ls -d */ | grep w | sed -e 's/\///1'
ls -d */ | grep W | sed -e 's/\///1'
echo -e "\nThese are some directories on your partition."
echo -e "Please select the right Windows directory and type it (case sensitive).\n"
echo -e "(Type \"quit\" without quotes if you want to quit.)\n"
echo -e ">" | head -c1
read WINDIR
if [ $WINDIR = "quit" ]; then unmountPartition; echo "Quitting...press enter"; read; exit; fi
done
}
function moveBroken
{
echo "Moving damaged registry files to bak-directory..."
mkdir $WINMNT/$WINDIR/bak 2>/dev/null
cd $WINMNT/$WINDIR
system32=`find . -iname 'system32' | tail -c+3`
cd $system32
config=`find . -iname 'config' | tail -c+3`
cd $config
system=` find . -iname 'system' | tail -c+3`
software=`find . -iname 'software' | tail -c+3`
sam=` find . -iname 'sam' | tail -c+3`
security=`find . -iname 'security' | tail -c+3`
default=` find . -iname 'default' | tail -c+3`
mv $system $WINMNT/$WINDIR/bak/$system.bak 2>/dev/null
mv $software $WINMNT/$WINDIR/bak/$software.bak 2>/dev/null
mv $sam $WINMNT/$WINDIR/bak/$sam.bak 2>/dev/null
mv $security $WINMNT/$WINDIR/bak/$security.bak 2>/dev/null
mv $default $WINMNT/$WINDIR/bak/$default.bak 2>/dev/null
}
function copyRegistryFromRestorePoint
{
echo "Copying registry files from restore point to your Windows..."
cd "$WINMNT"/System\ Volume\ Information
cd `ls -t | grep _restore | head -n 1`
cd $RP/snapshot
cp _REGISTRY_USER_.DEFAULT $WINMNT/$WINDIR/$system32/$config/$default
cp _REGISTRY_MACHINE_SYSTEM $WINMNT/$WINDIR/$system32/$config/$system
cp _REGISTRY_MACHINE_SOFTWARE $WINMNT/$WINDIR/$system32/$config/$software
cp _REGISTRY_MACHINE_SECURITY $WINMNT/$WINDIR/$system32/$config/$security
cp _REGISTRY_MACHINE_SAM $WINMNT/$WINDIR/$system32/$config/$sam
}
function unmountPartition
{
echo "Unmounting partition..."
cd /
sleep 2
umount $WINMNT 2>/dev/null
rmdir $WINMNT 2>/dev/null
}
function confirm
{
clear
echo -e "You are backuping your Windows registry files from"
echo -e "C:\\$WINDIR\\system32\\\config"
echo -e "to\nC:\\$WINDIR\\\bak\nAnd copying older ones from restore point number $RPNUM"
echo -e "to\nC:\\$WINDIR\\system32\\\config and replacing the original files."
echo -e "Are you sure? Please answer yes or no.\n"
echo -e ">" | head -c1
read SURE
if [ ! $SURE = "yes" ];
then
echo -e "You didn't answer yes, so quitting...press enter"
read
exit
fi
}
# MAIN
checkRoot
clear
echo "This small script helps you to restore Windows XP registry from restore point"
echo -e "even if the machine can't boot up.\n"
echo "Please run this from some Linux live-cd booted on broken XP machine."
echo "The script needs a super user permissions so use root user or sudo."
echo "The script is fully free software and written by J.Keranen"
echo -e "Version 0.2\n"
echo "Ready to go, press enter..."
echo -e "(Type \"quit\" without quotes if you want to quit.)\n"
echo -e ">" | head -c1
read Q;
if [ $Q = "quit" ]; then echo "Quitting...press enter"; read; exit; fi
selectPartition
# mounting
echo "Mounting partition..."
cd /
mkdir -p $WINMNT
umount $PART 2>/dev/null
if [ `fdisk -l $DEVICE | grep $PART | grep NTFS | head -c1` ]
then
ntfs-3g $PART $WINMNT
else
mount $PART $WINMNT
fi
selectRestorePoint
selectWIN
confirm
moveBroken
copyRegistryFromRestorePoint
unmountPartition
echo "Done. Hope this helps. You can try to boot Windows now."
echo "Your damaged registry files have moved to"
echo "C:\\$WINDIR\\bak"
echo "Press enter to exit..."
read