Nu openSUSE 12.2 is verschenen, ga ik tegelijkertijd met het installeren van openSUSE 12.2 mijn notebook helemaal vernieuwen. Als eerste stap heb ik de harde schijf vervangen door een SSD-schijf (sneller, zuiniger en dus koeler). Mijn oude schijf hou ik als backup achter de hand (in een USB-kastje gemonteerd). Zowel de BIOS van de computer als de firmware van de SSD kregen een update naar de laatste versie. Kwestie van alles optimaal te laten presteren.
Aangezien ik voor het werk nog steeds Windows nodig heb, moet de laptop ook de preview van Windows 8 kunnen starten. Daarnaast moet openSUSE 12.2 als hoofdsysteem draaien. En daar ik mijn laptop vooral gebruik als testcomputer om bijvoorbeeld deze tips te schrijven, moet er een herstelpartitie op basis van de SystemRescueCD zorgen voor het starten van zowel Windows 8, openSUSE 12.2, de SystemRescueCd en het aanmaken en terugzetten van backups.
Na het downloaden van de SystemRescueCD maak ik een opstartbare USB-stick (zie richtlijnen SystemRescueCD site)(wie liever met CD's werkt, kan het ISO-bestand op een CD branden).
Met de aangemaakte USB-stick of CD wordt de computer vanaf de USB-stick of CD opgestart (kan enkel als je weet welke toets je bij het opstarten van de computer moet drukken om het startmedium zelf te kiezen).
Na het doorstarten van de SystemRescueCD, vergeet daarbij niet een Belgisch toetsenbord (keymap be) te selecteren, kom je in een root terminal.
Met de opdracht wizard
en het bevestigen van de standaard Xorg configuratie start de grafische omgeving op.
Om de schijf volledig leeg te maken, start je onderaan in de balk het programma GParted.
Via het menu Device > Create Partition Table... heb ik een nieuwe partitietabel van het type gpt op /dev/sda geplaatst (let op: hiermee verwijder je in een fractie van een seconden alle gegevens op de schijf /dev/sda).
Ik koos daarbij voor het nieuwe gpt formaat omdat zowel Windows 8 als Linux daar vandaag de dag mee kunnen werken.
Na het uitloggen (eerste knop onderaan in de balk) en het afsluiten van de computer (opdracht halt
) is de harde schijf klaar voor het installeren van de besturingssystemen.
Aangezien Windows meestal voor de meeste problemen zorgt, heb ik eerst Windows 8 geïnstalleerd en de schijfindeling aan Windows 8 overgelaten. De installatie van Windows 8 maakt daarbij twee partities op de schijf aan (een kleine om op te starten en een grote met het systeem en al de rest). Zonder waarschuwing heeft de installatieprocedure van Windows 8 de partitietabel terug op het oude msdos gezet (zou Windows 8 dan alleen maar met UEFI in staat zijn om gpt partities te gebruiken?). M.a.w. de installatie van Windows 8 zorgt ervoor dat ik noodgedwongen verder moet met een oude msdos partitionering. Na de installatie van Windows 8, heb ik via Windows 8 de tweede partitie verkleind tot 41 GB.
Start SystemRescueCD vanaf de USB stick of CD op.
Met de opdracht
mount /dev/sda3 /mnt/backup
koppel je de toekomstige SystemRescueCD partitie aan de map /mnt/backup.
Met de opdracht
cd /mnt/backup
open je de map.
De nieuwe bootmanager Grub 2 is in staat besturingssystemen in ISO bestanden te starten, m.a.w. je kunt SystemRescueCD via Grub 2 rechtstreeks starten vanuit het gedownloade ISO-bestand zonder deze op de harde schijf te installeren.
Om het maken en herstellen van back-ups te vereenvoudige gebruik ik een SystemRescueCD autorun script.
Dit moet vanuit het ISO bestand opgestart worden.
Om het autorun script eenvoudig te kunnen aanpassen, plaats ik in het ISO-bestand een autorun script met als enige opdracht het uitvoeren van het autorun script op de harde schijf op de opstartpartitie van SystemRescueCD.
Met de volgende opdrachten voeg ik een autorun script aan het ISO-bestand toe.
Koppel de linux systeempartitie aan de map /mnt/custom (werkruimte voor de aanmaak van het ISO-bestand)
mount /dev/sda6 /mnt/custom
Verwijder indien aanwezig de van vroeger overgebleven map met werkruimte voor de aanmaak van het ISO-bestand
rm -rf /mnt/custom/customcd/
Maak de nodige werkmappen aan
mkdir -p /mnt/custom/customcd/isoroot
Kopieer het SystemRescueCD systeem naar de aangemaakte map
cp -a /livemnt/boot/* /mnt/custom/customcd/isoroot/
Voeg het autorun script toe aan de werkmap met de inhoud van het toekomstige ISO-bestand
echo '#!/bin/bash' > /mnt/custom/customcd/isoroot/autorun
echo 'sh /livemnt/isostore/autorun' >> /mnt/custom/customcd/isoroot/autorun
Indien je SystemRescueCD vanaf een USB-stick is opgestart, moet je de opstartprocedure naar CD wijzigen (enkel door de naam van een configuratiebestand en map aan te passen, wat is linux toch heerlijk eenvoudig)
mv /mnt/custom/customcd/isoroot/syslinux/syslinux.cfg /mnt/custom/customcd/isoroot/syslinux/isolinux.cfg
mv /mnt/custom/customcd/isoroot/syslinux /mnt/custom/customcd/isoroot/isolinux
Maak het ISO-bestand aan
/usr/sbin/sysresccd-custom isogen sysrcd
Verplaats het aangemaakte ISO-bestand naar de SystemRescueCD partitie (let daarbij op de datum en tijd in de naam van het aangemaakte ISO-bestand)
mv /mnt/custom/customcd/isofile/sysresccd-20120909-1951.iso /mnt/backup/systemrescuecd.iso
Verwijder de werkmap
rm -rf /mnt/custom/customcd/
grub2-install --root-directory=/mnt/backup /dev/sda
# Global options set timeout=90 set default=0 set fallback=1 set pager=1 menuentry 'openSUSE 12.2' { set root='hd0,msdos6' linux /boot/vmlinuz root=/dev/sda6 video=1366x768 resume=/dev/sda5 splash=silent quiet showopts initrd /boot/initrd } menuentry 'Windows 7' { set root='hd0,msdos1' chainloader +1 } menuentry 'Linux terugzetten' { loopback loop /systemrescuecd.iso linux (loop)/isolinux/rescue64 isoloop=systemrescuecd.iso setkmap=be restorelinux initrd (loop)/isolinux/initram.igz } menuentry 'Windows terugzetten' { loopback loop /systemrescuecd.iso linux (loop)/isolinux/rescue64 isoloop=systemrescuecd.iso setkmap=be restorewindows initrd (loop)/isolinux/initram.igz } menuentry 'SystemRescueCD' { loopback loop /systemrescuecd.iso linux (loop)/isolinux/rescue64 isoloop=systemrescuecd.iso setkmap=be initrd (loop)/isolinux/initram.igz } menuentry 'Rsync backup' { loopback loop /systemrescuecd.iso linux (loop)/isolinux/rescue64 isoloop=systemrescuecd.iso setkmap=be backuprsync initrd (loop)/isolinux/initram.igz } menuentry 'Linux backuppen' { loopback loop /systemrescuecd.iso linux (loop)/isolinux/rescue64 isoloop=systemrescuecd.iso setkmap=be backuplinux initrd (loop)/isolinux/initram.igz } menuentry 'Windows backuppen' { loopback loop /systemrescuecd.iso linux (loop)/isolinux/rescue64 isoloop=systemrescuecd.iso setkmap=be backupwindows initrd (loop)/isolinux/initram.igz }Na het opslaan van het bootmenubestand kun je de computer afsluiten met de opdracht
halt
Na het verwijderen van de SystemRescueCD USB stick of de CD kun je de bootmanager testen. Aangezien enkel Windows 8 en de SystemRescueCD partitie klaar is, zullen enkel deze bootmenukeuze's werken.
Indien het SystemRescueCD systeem vanaf de harde schijf start, kun je met de volgende opdracht de SystemRescueCD partitie beschrijfbaar maken om eventueel aanpassingen aan te brengen:
mount /dev/sda3 /livemnt/isostore -o rw, remount
Aangezien de bestanden nu aan de map /livemnt/isostore gekoppeld zijn, moet je ze daar ook gaan aanpassen.
Bij een volgende gelegenheid beschrijf ik hoe je de Grub 2 manager een grafisch thema laat gebruiken.
Windows gebruikt standaard de lokale computertijd, terwijl Linux standaard de standaard UTC (Coordinated Universal Time) tijd gebruikt.
Dit heeft als gevolg dat in België de tijd in Windows en Linux in de zomer een tijdverschil van 2 uur oplevert.
Ofwel stel je Windows in zodat deze eveneens de standaard UTC tijd gebruikt, ofwel stel je Linux in zodat deze de lokale computertijd gebruikt.
In openSUSE 12.2 stel je het gebruik van lokale tijd in met de volgende opdrachten:
su
echo "0.0 0 0.0" > /etc/adjtime
echo "0" >> /etc/adjtime
echo "LOCAL" >> /etc/adjtime
exit
Bij de volgende herstart van de computer wordt in zowel openSUSE als Windows de juiste tijd weergegeven.
#!/bin/bash setterm -blank 0 # Schakel de schermbeveiliging uit snt="(C) Stedelijke Nijverheids- & Taalleergangen, Brugge, Dany Pinoy, `date -r /livemnt/isostore/autorun +'%d %B %Y'`" titel="Automatisch systeemherstel" function herstart { $(dialog --title "$titel" \ --infobox "De computer wordt automatisch herstart.\nU hoeft enkel te wachten..............." 0 0 2>&1 1>$(tty)) init 6 sleep 3000 } function afsluiten { $(dialog --title "$titel" \ --infobox "De computer wordt automatisch afgesloten.\nU hoeft enkel te wachten..............." 0 0 2>&1 1>$(tty)) init 0 sleep 3000 } function herafsluiten { keuze=$(dialog --backtitle "$snt" \ --title "$titel" \ --menu " Backup teruggezet, wat nu?" 0 0 0 \ "1" "Computer uitschakelen" \ "2" "Computer opnieuw starten" \ 2>&1 1>$(tty)) case "$keuze" in "1" ) afsluiten;; "2" ) herstart;; esac } part="" if [ -e /dev/hda2 ]; then # Harde schijf aangesloten via IDE part="hda" elif [ -e /dev/sda2 ]; then # Harde schijf aangesloten via SCSI of SATA part="sda" else # Harde schijf aangesloten via SCSI of SATA echo `grep "[sh]d[abcd]" /proc/partitions | head -1` | cut -d ' ' -f4 > /tmp/hardeschijf part="`cat /tmp/hardeschijf`" keuze=$(dialog --backtitle "$snt" \ --title "$titel" \ --msgbox "Er is geen tweede primaire partitie op deze computer.\nPinBack zal pas functioneren na het partitioneren van de harde schijf." 7 70 \ 2>&1 1>$(tty)) fi # Bepaal of er een tweede harde schijf is, en van welk type part1=$(cat /proc/partitions | grep -w hda) # tweede schijf is hda if [ "$part1" ]; then part1=$(echo $part1 | awk '{print $4}') fi if [ "$part1" = "$part" ]; then # Neen, de eerste schijf is hda part1="" fi if [ ! "$part1" ]; then part1=$(cat /proc/partitions | grep -w sda) # tweede schijf is sda if [ "$part1" ]; then part1=$(echo $part1 | awk '{print $4}') fi if [ "$part1" = "$part" ]; then # Neen, de eerste schijf is sda part1="" fi fi if [ ! "$part1" ]; then part1=$(cat /proc/partitions | grep -w hdb) # tweede schijf is hdb if [ "$part1" ]; then part1=$(echo $part1 | awk '{print $4}') fi fi if [ ! "$part1" ]; then part1=$(cat /proc/partitions | grep -w sdb) # tweede schijf is sdb if [ "$part1" ]; then part1=$(echo $part1 | awk '{print $4}') fi fi if [ "`grep backuplinux /proc/cmdline`" ]; then mount /dev/"$part"3 /livemnt/isostore -o rw,remount if [ -e /livemnt/isostore/backup/linux.partclone.gz ]; then $(dialog --backtitle "$snt" \ --title "$titel" \ --yesno "Wilt u de oude backup behouden?" 5 35 2>&1 1>$(tty)) if [ $? -eq "0" ]; then mv -f /livemnt/isostore/backup/linux.partclone.gz /livemnt/isostore/backup/linux.partclone.gz.ori fi fi clear echo "Linux backuppen" printf '================\n' partclone.extfs --clone --source /dev/"$part"6 | gzip -c > /livemnt/isostore/backup/linux.partclone.gz if [ $? ]; then $(dialog --backtitle "$snt" \ --title "$titel" \ --msgbox "Backup met succes afgerond." 5 47 2>&1 1>$(tty)) else $(dialog --backtitle "$snt" \ --title "$titel" \ --msgbox "Backup onderbroken met foutmelding." 5 47 2>&1 1>$(tty)) fi mount /dev/"$part"3 /livemnt/isostore -o ro,remount herafsluiten afsluiten fi if [ "`grep restorelinux /proc/cmdline`" ]; then clear echo "Linux terugzetten" printf '=================\n' zcat /livemnt/isostore/backup/linux.partclone.gz | partclone.restore --output /dev/"$part"6 herafsluiten afsluiten fi if [ "`grep reversessh /proc/cmdline`" ]; then echo "/livemnt/isostore/rev_ssh.sh" >> /root/.zshrc fi if [ "`grep backupwindows /proc/cmdline`" ]; then mount /dev/"$part"3 /livemnt/isostore -o rw,remount if [ -e /livemnt/isostore/backup/windows7.img.gz ]; then $(dialog --backtitle "$snt" \ --title "$titel" \ --yesno "Wilt u de oude backup behouden?" 5 35 2>&1 1>$(tty)) if [ $? -eq "0" ]; then mv -f /livemnt/isostore/backup/windows7.img.gz /livemnt/isostore/backup/windows7.img.gz.ori fi fi clear echo "Windows backuppen" printf '=================\n' ntfsclone --save-image -o - /dev/"$part"2 | gzip -c > /livemnt/isostore/backup/windows7.img.gz if [ $? ]; then $(dialog --backtitle "$snt" \ --title "$titel" \ --msgbox "Backup met succes afgerond." 5 47 2>&1 1>$(tty)) else $(dialog --backtitle "$snt" \ --title "$titel" \ --msgbox "Backup onderbroken met foutmelding." 5 47 2>&1 1>$(tty)) fi mount /dev/"$part"3 /livemnt/isostore -o ro,remount herafsluiten afsluiten fi if [ "`grep restorewindows /proc/cmdline`" ]; then clear echo "Windows terugzetten" printf '===================\n' gunzip -c /livemnt/isostore/backup/windows7.img.gz | ntfsclone --restore-image --overwrite /dev/"$part"2 - herafsluiten afsluiten fi if [ "`grep backuprsync /proc/cmdline`" ]; then printf '\033[0m'; clear # Kleuren standaard echo "Uitvoeren Rsync backup:" printf '=======================\n' backupip=$(dialog --backtitle "$snt" \ --title "$titel" \ --inputbox "\n Welk IP-adres heeft de Rsync server?" 0 0 "192.168.1." \ 2>&1 1>$(tty)) ip a rsync $backupip:: if [ $? -ne 0 ]; then printf '\033[1;31;40m Kon geen verbinding met backupserver opbouwen.\033[0m\n' # Rode letters printf '\033[1;32;40m Druk Return om door te gaan.' # Groene letters op zwarte achtergrond read Keypress else rsync -avHxh --numeric-ids --progress --delete --exclude="lost+found/" /livemnt/isostore/ $backupip::backup/s760/backup 2>>/tmp/rsync.error | tee -a /tmp/rsync.log mount /dev/"$part"7 /mnt/backup rsync -avHxh --numeric-ids --progress --delete --exclude="lost+found/" /mnt/backup/ $backupip::backup/s760/documenten 2>>/tmp/rsync.error | tee -a /tmp/rsync.log umount -l /dev/"$part"7 rsync /tmp/rsync.log $backupip::s760 rsync /tmp/rsync.error $backupip::s760 touch /tmp/stop rsync /tmp/stop $backupip::backup printf '\033[1;32;40m De computer wordt binnen de minuut afgesloten.' # Groene letters op zwarte achtergrond sleep 60 afsluiten fi herafsluiten afsluiten fi if [ "`grep rsyncserver /proc/cmdline`" ]; then echo "uid = root" > /etc/rsyncd.conf echo "gid = root" >> /etc/rsyncd.conf echo "[backup]" >> /etc/rsyncd.conf echo "path = /livemnt/isostore" >> /etc/rsyncd.conf echo "comment = Backup" >> /etc/rsyncd.conf rsync --daemon $(dialog --backtitle "$snt" \ --title "$titel" \ --msgbox "Rsync daemon gestart.\nHet IP-adres van deze computer is `/sbin/ifconfig eth0 | grep 'inet ' | cut -d : -f2 | cut -d ' ' -f1`" 0 0 2>&1 1>$(tty)) herafsluiten afsluiten fi if [ "`grep httpserver /proc/cmdline`" ]; then thttpd -r -d /livemnt/isostore/opensuse4pinda/repos $(dialog --backtitle "$snt" \ --title "$titel" \ --msgbox "HTTP server gestart.\nHet IP-adres van deze computer is `/sbin/ifconfig eth0 | grep 'inet ' | cut -d : -f2 | cut -d ' ' -f1`" 0 0 2>&1 1>$(tty)) herafsluiten afsluiten fi exitDaarbij zal de Rsync backup bootmenukeuze pas werken als er een Rsync backupserver in het netwerk actief is. Om een backup aan te maken moet je de map /livemnt/isostore/backup aanmaken. M.a.w. dit script werkt bij ons perfect, maar is zeker voor verbetering vatbaar.