#!/bin/ash echo " Anfang mkpart " #echo "Sucht zur Installierung freien Platz auf der Festplatte oder Partitionen die abgeschnitten werden können" echo " a) Freien Platz finden oder b) primaere Partition kleiner machen oder c) extended Part. 5 kleiner machen" echo " oder (nur bei Partitionen von nicht-*nix-Systemen) d) loeschen oder hinten zur Install. noetigen Platz absaebeln" echo "extended Partition wird nicht desaktiviert um ihre Nr. zu nehmen (alle logischen Part. gingen verloren), aber bei " echo "Platzbedarf verkleinert, nachrangig zu allen primaeren Partitionen, momentan (spaeter verbessern) aber " echo "nur die erste log. Partition und nur falls sie ntfs ist -- oft ist Windows auf /dev/hda5" # Im Programm bleibt die ext Partition fast unbehandelt, und wird stattdessen die logische LOGNR betrachtet # Aufruf durch init # (c) 2007 werner@copaya.yi.org #ls / ; mkdir /von ; mkdir /nach LOGNR=5 # berücksichtigte logsche Partition die ggf. verkleinert wird um extended zu verkleinern # spaeter mit df hoechste Part.- Nr. suchen und nehmen STATUS=-3 # -2 kein Platz da -1 Platz da, Part. ist zu machen 1 Partition fertig # TST=0 normaler Betrieb, TST=1: Test, nur Erforschen / Ausdrucken der Partitionen, keine Redimensionierung read TST SIZE NACH0 NACH VON KLEINER OLDSYS WINDOWS REST < installinfo echo " mkpart Anfang: TST SIZE NACH0 NACH VON KLEINER OLDSYS WINDOWS: " echo $TST $SIZE $NACH0 $NACH $VON $KLEINER $OLDSYS $WINDOWS read DISKSIZE REST < disksize ; rm disksize echo " Groesse Ziel-Festplatte: " $DISKSIZE # Alle Groessen in Sektoren !!!! # 1. Partitionstafel erhalten # Format von parted: Nr, Anfg, Ende, Groesse, primary/extended, typ/filesystem, ifbootflag # Wenn parted kein fs angibt, ist die Partition nicht formatiert # Alle parted, fdisk sind schwachsinnig bzgl. Format, daher suchen wir alle infos zusammen und geben sie geeignet aus # Nur akzeptiert: Partitionen 1-4 die mountbar sind, oder extended und mountbare Partitionen haben # 4 Auswerten von vhd. Partitionen 1-4 , Lücken ZWISCHEN Partitionen, freier Platz AUF den Partitionne auf Festplatte NACH0 # A Name der Partition, X Y Z Anfang,Ende,Groesse Partition, Y0 Z0 Ende,Groesse Daten (nach defrag) # ART Art der Partition (83=Linux, 7=ntfs, 5=extended ) FS Datei-System (ext2,ext3,minix,reiserfs,ntfs) # OBDA ob Partition da ist. Extended wird gelÃscht falls keine Part. 5 da, sonst FS=extended # Kandidat fÃr zu verkleinernde Parttionen werd gesucht unabhängig davon ob spÃter noetig, vorrangig primary # NACHNR kleinste freie NR/Index der frei ist -> Install-Partition # KLEINERNR zu verkleinernde Partition falls Partition voll # 4.1. Groesse von vhd. Partition und Dateisystem /sbin/fdisk -lu > scr0 grep "/dev/" scr0 > fdisk0 cat scr0 > fdiskwar # hoechste Nr. log. Partion suchen ###for LOGNR0 in 5 6 7 8 9 10 11 12 13 14 15 16 ; do LOGNR0=5 # geht momentan nur mit 5 als ggf. zu verkleinernde logische Partition LOG=$NACH0$LOGNR0 grep $LOG fdisk0 > scr0 if test $? -eq 0 ; then read LOG REST < scr0 ; if test $? -eq 0 ; then LOG=$LOG ; LOGNR=$LOGNR0 ; else LOG=- ; LOGNR=0 ; fi ;fi ; # Partition mit boot -Label echo "logische Partion testen mit Nr LOGNR:" $LOGNR0 " LOG: " $LOG ###done echo "letzte logische Partition: " $LOG " Nr: " $LOGNR OLDSYS=- ; OLDSYSNR=0 grep '*' fdisk0 > scr0 if test $? -eq 0 ; then read OLDSYS REST < scr0 ; if test $? -eq 0 ; then OLDSYS=$OLDSYS ; else OLDSYS=- ; OLDSYSNR=0 ; fi ;fi ; # Partition mit boot -Label EXT=- ; EXTNR=0 if test $LOGNR -gt 0 ; then grep "Extended" fdisk0 > scr0 if test $? -eq 0 ; then read EXT REST < scr0 ; if test $? -eq 0 ; then EXT=$EXT ; else EXT=- ; EXTNR=0 ; fi; fi ; fi ; # extended Partition sed 's/*/ /g' fdisk0 > scr0 sed 's/+/ /g' scr0 > fdisk0 cat fdisk0 echo " bisheriges System: " $OLDSYS " extended partition: " $EXT echo -e "\c" > partitions # MOMENTAN ALE EXTENDED PARTITIONEN LOESCHEN # resize Windows logical Part. geht noch nicht, daher momentan: loeschen #EXTNR=0 #for K0 in 1 2 3 4 ; do #A=$NACH0$K0 #if test $NACH0$K0 = $EXT ; then EXTNR=$K0 ; fi ; #done #echo "EXTNR, EXT: " $EXTNR $EXT # Ob 5. Partion ntfs dann diese und extended Partion loeschen #K=$LOGNR ; A=$NACH0$K #mount $A /nach -t ntfs # ohne -o ro da Probleme bei .iso Datei statt DVD #echo "Vor test:" #if test $? -eq 0 ; then #echo "********* test: " $K $FS #if test $TST -eq 0 ; then echo -e "d \n$K \nd \n$EXTNR \nw " > fdisk.scr ; else echo -e "d \n$K \nd \n$EXTNR \np " > fdisk.scr ; fi ; #echo -e "d \n$K \nd \n$EXTNR \nw " > fdisk.scr # cat fdisk.scr ; echo " vor fdisk" #umount $A ; /sbin/fdisk $NACH0 < fdisk.scr ; #echo "nach fdisk" # sync #/sbin/fdisk -l ; EXTNR=0 ; EXT=- ; echo "extended Partition geloescht" #echo "********** fdisk.scr , OBDA, EXT, EXTNR, partitions: " ; cat fdisk.scr ; echo "OBDA,EXT,EXTNR:" $OBDA $EXT $EXTNR #fi ; #/dev/makedevs.sh #echo "Nach Loeschen ext Part.:" #/sbin/fdisk -l ; echo "KLEINER" $KLEINER ; echo "Anzahl" $ANZAHL #echo "FALLS IMMER NOCH NICHT WEG, DIE GESAMTE HARDDISK LOESCHEN" #echo "fdisk0: " #cat fdisk0 #echo "aussondern: " $NACH0$EXTNR $NACH0$LOGNR #grep -v $NACH0$EXTNR fdisk0 > scr0 ; grep -v $NACH0$LOGNR scr0 > fdisk0 #echo "restliche Partitionen in fdisk0: " #cat fdisk0 #echo $EXT $EXTNR # 4.1.1 Partitionen 1,2,3,4 der Reihe nach abklappern: ob von fdisk angezeigt, ob mounten geht usw NACHNR=0 ; NACHART=83 # falls Disk leer, NACHNR=1 , sonst erhoehen, bei =5 eine Partition ausschalten KLEINERNR=0 ; KLEINER=- ; GEHTKLEINER0=0 # GEHTKLEINER0: bisher beste gefundene Verkleinerbarkeit einer Partition (freier Platz) WINDOWSNR=0 ; WINDOWS=- ANZAHL=0 echo -e "u \np Anfang --1" > fdisk.machen for K in 1 2 3 4 $LOGNR ; do A=$NACH0$K ; OBDA=0 echo " *** Partition " $A " untersuchen ob da (OBDA.ne.0), ob nicht da (0), da aber unformatiert -> loeschen (-1), da aber kaputt/unmountbar -> nicht resizen (-2)" # 4.1.1.1 Partitionstafel / fdisk abfragen X=0 ; Y=-1 ; ART=- grep $A fdisk0 > scr0 if test $? -eq 0 ; then OBDA=-2 ; echo " *** Partition " $A " in Part-Tafel " ; fi ; if test $OBDA -ne 0 ; then # Partitionsgroesse mind. gleich Dateisystem-Groesse setzen, um kaputte Part.Tafeln (negative Groesse usw zu reparieren) read UNW X Y UNW0 ART REST < scr0 # X , Y von ... bis ... Sektor Part. K if test $K = $LOGNR ; then Y=$YEXT ; echo " Ende log. Part. = Ende ext. setzen um Platz danach zu benutzen : " $Y ; fi ; if test $X -gt 0 ; then Z=$(($Y - $X + 1)) ; else Z=0 ; fi ; # Z Groesse Partition Sektor if test $Z -le 0 ; then OBDA=-1 ; echo "*** OBDA, Z:" $OBDA $Z ; fi ; # Partition nicht von fdisk angezeigt oder Groesse =0 ist nicht da # falls mountbar, wird unten minimale Groesse = Dateiengroesse gesetzt echo " Part.:" $A " Nr : " $K "size:" $Z "obda: " $OBDA " EXTNR, LOGNR : " $EXTNR $LOGNR # 4.1.1.2 mounten / df # mounten um Dateisystem zu bestimmen. Nicht -o ro da Problem/falsche Erkennung bei .iso-Datei wenn im Haupt-System als rw gemountet FS=- # OBDA: 0 falls nicht da, -1 zwar da aber unformatiert -> löschen. -2 da,kaputt, nu loeschen wenn Windows umount $A mount $A /nach -t ext4 -o extents ; if test $? -eq 0 ; then FS=ext4 ; fi ; # das kann ein ext3 FS beschÃdigen mount $A /nach -t ext4dev -o extents ; if test $? -eq 0 ; then FS=ext4dev ; fi ; # das kann ein ext3 FS beschÃdigen mount $A /nach -t ext3 ; if test $? -eq 0 ; then FS=ext3 ; fi ; mount $A /nach -t ext2 ; if test $? -eq 0 ; then FS=ext2 ; fi ; mount $A /nach -t reiserfs ; if test $? -eq 0 ; then FS=reiserfs ; fi ; mount $A /nach -t minix ; if test $? -eq 0 ; then FS=minix ; fi ; mount $A /nach -t vfat ; if test $? -eq 0 ; then FS=vfat ; umount /nach ; echo " *** mkpart in 4.1.1 vor mount **2" ; mount $A /nach -o rw ; fi ; mount $A /nach -t ntfs ; if test $? -eq 0 ; then FS=ntfs ; umount /nach ; ntfsfix $A ; ntfs-3g $A /nach -o force,rw,remove_hiberfile ; fi ; echo " *** FS auf Partition " $A " durch mounten bestimmt: " $FS mount $A /nach ; if test $? -eq 0 ; then FS=minix ; fi ; # falls irgendwas anderes mountbares if test $FS != - ; then OBDA=1 ; fi ; #clear # ntfs, vfat -Partitionen maximal entleeren. Ggf auch noch alle ausfuehrbaren Progs loeschen if test $FS = ntfs ; then rm /nach/pagefil*.sys /nach/hiberfil*.sys /nach/windows/win386.swp /nach/win386.swp /nach/PAGEFIL*.SYS /nach/HIBERFIL*.SYS /nach/WINDOWS/WIN386.SWP /nach/WIN386.SWP rm -r /nach/TMP /nach/WINDOWS/TMP /nach/tmp /nach/windows/tmp ; fi ; if test $FS = vfat ; then rm /nach/pagefil*.sys /nach/hiberfil*.sys /nach/windows/win386.swp /nach/win386.swp /nach/PAGEFIL*.SYS /nach/HIBERFIL*.SYS /nach/WINDOWS/WIN386.SWP /nach/WIN386.SWP rm -r /nach/TMP /nach/WINDOWS/TMP /nach/tmp /nach/windows/tmp ; fi ; # Auswerten von df echo " --18" echo " df / gemountete Partitionen : " ; df -k | grep -v "tmpfs" df -k | grep -v "tmpfs" > df0 echo " --19" Z00=$Z grep $A df0 > scr0 if test $? -eq 0 ; then # von df angegeben echo " --20" #OBDA=1 read UNW UNW1 Z0 UNW2 REST < scr0 # X , Y von ... bis ... Sektor Part. K Z0=$(($Z0 * 2)) if test $Z -le 0 ; then Z=$Z0 ; fi ; if test $Z0 -le 0 ; then Z0=$Z ; fi ; # Z Groesse PARTITION , Z0 min. Groesse / Vollheit DATEISYSTEM Sektor if test $Z0 -le 0 ; then OBDA=-1 ; echo "*** OBDA, Z0:" $OBDA $Z0 ; fi ; # erste Abschaetzung wieweit (=Z00) Partition verkleinerbar ist Z00=$(($Z0 + $Z0 / 20)) # Sicherheit und etwas leeren Platz lassen test $Z00 -gt $Z ; if test $? -eq 0 ; then Z00=$Z ; fi ; # Dateisystem max. so gross wie Partition echo " Partition mountbar, Mindestgroesse = Datenmenge: " $Z00 else # nicht von df angegeben, sollte bei OBDA -gt 0 eigentlich nicht vorkommen echo " --21" #OBDA=-2 # momentan nicht formatiert wie unmountab = kaputt behandelt, Spaeter unterscheiden ZMAX=$(($Z - $SIZE - $SIZE / 20)) # Kuerzen soweit noetig zulassen FALLS PARTITION NICHT MOUNTET (unbekannte, benutzte, extended Partition) Z00=$Z # default, eigentlich schon oben if test $ART = 7 ; then Z00=$ZMAX ; fi ; # ... und nur falls Part-Art Windows angegeben, hinten absaegen if test $ART = b ; then Z00=$ZMAX ; fi ; if test $ART = c ; then Z00=$ZMAX ; fi ; if test $Z00 -le 0 ; then Z00=1 ; fi ; echo " Partition nicht mountbar, Verkleinern erlaubt sodass SYS installierbar ist: " $Z00 " , Groesse momentan: " $Z " , Art: " $ART fi ; # Ende test grep $A -eq 0 Z0=$Z00 # soll so neu sein Y0=$(($X + $Z0 - 1)) GEHTKLEINER=$(($Z - $Z0)) # um wieviel die Partion kleiner zu machen ginge (freier Platz - Sicherheit) # # VorlÃufiges Resultat, nach Sortieren der Partitionen: freier Platz + Verkleinern #if test $Z0 -le 0 ; then OBDA=0 ; fi ; # sollte nicht vorkommen, leere oder sehr kleine FS -> Part. redimensionieren echo $A "Belegt an Daten: " $Z0 " Nach Redimensionieren Ende bei Sektor: " $Y0 echo " --22" umount $A if test $OBDA -eq -2 ; then echo " --23" # Partition da, aber nicht mountbar: Falls Partition-Art = Windows, hinten abschneiden um Platz zu machen, sonst nicht # Neue Grenzen oben schon berechnet (Entscheidung max. Groesse lassen, oder abschneiden), damit wie OBDA=1 behandeln OBDA=1 #OBDA=-1 # dagegen falls unmountbare=kaputte Partitionen geloescht wd sollen, ggf je nach ART (zBsp nur Windows-Partitionen) # da dann aber vorziehen, nur hinten absaebeln soviel wie fuer SYS noetig, den Rest bzw. Anfang kann man dann # weiter aufheben um zu versuchen noch ein paar Daten rauszupopeln ... fi ; # 4.3 Vhd Partitionen und deren max. Verkleinerbarkeit X0, Y0 in Datei partitions schreiben if test $OBDA -gt 0 ; then echo " --24" # daseiende Partitionen in Datei schreiben usw, kleinster Index nicht-daseiender für Install-Partition nehmen # Die extended wird nicht in partitions geschrieben, aber die logische if test $A = $EXT ; then OBDA=0 ; echo "*** A,EXT,OBDA:" $A $EXT $OBDA ; if test $LOGNR -gt 0 ; then EXTNR=$K ; YEXT=$Y ; fi ; fi ; echo "EXTNR:" $EXTNR if test $OBDA -gt 0 ; then # brauchbare Partitionen in Datei partitions schreiben echo " --25" #if test $A = $OLDSYS ; then OLDSYSFS=$FS ; OLDSYSNR=$K ; echo -e "a \n$K \nw " > scr ; /sbin/fdisk $NACH0 < scr ; sync ; fi ; # altes boot-label löschen if test $A = $OLDSYS ; then OLDSYSFS=$FS ; OLDSYSNR=$K ; echo -e "a \n$K altes boot-label loeschen " >> fdisk.machen ; fi ; # altes boot-label löschen if test $FS = "ntfs" ; then if test $WINDOWSNR -eq 0 ; then WINDOWS=$A ; WINDOWSFS=$FS ; WINDOWSNR=$K ; fi ; fi ; if test $FS = "vfat" ; then if test $WINDOWSNR -eq 0 ; then WINDOWS=$A ; WINDOWSFS=$FS ; WINDOWSNR=$K ; fi ; fi ; if test $GEHTKLEINER -gt $GEHTKLEINER0 ; then GEHTKLEINER0=$GEHTKLEINER KLEINERNR=$K ; KLEINER=$A ; XKL=$X ; YKL=$Y ; ZKL=$Z ; KLEINERFS=$FS ; KLEINERART=$ART ; fi ; echo $A $X $Y $Z $Y0 $Z0 $FS $ART >> partitions echo $A " ab:" $X " bis:" $Y " Groesse:" $Z "voll bis:" $Y0 " Groesse insg.:" $Z0 " frei:" $(($Z - $Z0)) " FS:" $FS "Part.-Art:" $ART ANZAHL=$(($ANZAHL + 1)) ; # Anzahl prim. Part., fuer fdisk noetig echo "LOGNR , ANZAHL: " $LOGNR $ANZAHL fi ; # end test OBDA -gt 0 (innere Schleife) fi ; # end test OBDA -gt 0 echo "**** OBDA" $OBDA echo " --26" if test $OBDA -eq -1 ; then # unbrauchbare Partitionen: lösche, Nr. als frei registrierenn echo " --27" echo -e "p \nd \n$K \np unbrauchbares loeschen --2" >> fdisk.machen # Falls letzte Part., keine p-nr angeben !! fi ; # end test OBDA -eq -1 fi ; # end test OBDA -ne 0 Falls Part. ueberhaupt in Part.Tabelle ist if test $OBDA -le 0 ; then echo " --28" echo " Suchen einer Nr. fuer NACH: " $K # nicht $EXT weil beim disabeln der ext Part. ale log.P.verloren if test $K -le 4 ; then if test $NACHNR -eq 0 ; then if test $K -ne $EXTNR ; then NACHNR=$K ; NACH=$A ; fi ; fi ; fi ; # kleinste leere Partitions-Nummer finden echo " Freie Nr. fuer NACH gefunden: " $K " OBDA: " $OBDA " NACHNR: " $NACHNR " NACH: " $NACH ; echo " Extended ist: " $EXTNR fi ; echo " --29" done # Resultate if test $NACHNR -eq 0 ; then echo " Alle Nummern 1-4 belegt, fuer neue Partition wird eine andere abgeschaltet" ; fi ; echo " Anzahl primaerer Part. schon da:" $ANZAHL " NACH:" $NACH " NACHNR: " $NACHNR " vorlaeufig KLEINERNR: " $KLEINERNR echo " ext. Part., Nr: " $EXT $EXTNR echo " altes System Nr : " $OLDSYSNR " Partition : " $OLDSYS " Format: " $OLDSYSFS echo " Windows Nr : " $WINDOWSNR " Partition : " $WINDOWS " Format: " $WINDOWSFS echo " vorl. Kandidat der zu verkleinernden Partition: " $KLEINERNR $XKL $YKL $ZKL $KLEINERART $KLEINERFS $REST echo " *** Ob kleinerzumachende Partition / deren Groesse definiert: " $ZKL " Benoetigt / neue Part.: " $SIZE echo "Partitionen:" ; cat partitions # Noch einbauen: falls keine zu verkleinernde Partition gefunden, aber gebraucht, irgendeine nehmen # 2. Feststellen ob/wo grösster freier Platz auf Platte vh echo " *** groesste freie Luecke auf Platte " $NACH0 " suchen : *** " sort -n -k 2 partitions > parts0 # PARTITIONEN JETZT Nach phys. Reihenfolge auf Platte geordnet, nicht nach Nr. #echo "Partitionen nach Reihenfolge auf Platte sortiert: " #echo " Partitionen in echter Reihenfolge: " ; cat parts0 # log. Part. drin lassen ! #if test $LOG != - ; then grep -v $LOG parts0 > parts1 ; cat parts1 > parts0 ; fi ; A1=0 ; A2=0 ; A3=0 ; A4=0 ; X1=1 ; X2=1 ; X3=1 ; X4=1 ; Y1=1 ; Y2=1 ; Y3=1 ; Y4=1 ( read A1 X1 Y1 Z1 Y01 Z01 REST ; read A2 X2 Y2 Z2 Y02 Z02 REST read A3 X3 Y3 Z3 Y03 Z03 REST ; read A4 X4 Y4 Z4 Y04 Z04 REST echo $A1 $X1 $Y1 $Z1 $Y01 $Z01 $A2 $X2 $Y2 $Z2 $Y02 $Z02 $A3 $X3 $Y3 $Z3 $Y03 $Z03 $A4 $X4 $Y4 $Z4 $Y04 $Z04 > tmp00 ) < parts0 read A1 X1 Y1 Z1 Y01 Z01 A2 X2 Y2 Z2 Y02 Z02 A3 X3 Y3 Z3 Y03 Z03 A4 X4 Y4 Z4 Y04 Z04 REST < tmp00 #echo "Eingabe:" $A1 $X1 $Y1 $Z1 $Y01 $Z01 $A2 $X2 $Y2 $Z2 $Y02 $Z02 $A3 $X3 $Y3 $Z3 $Y03 $Z03 $A4 $X4 $Y4 $Z4 $Y04 $Z04 echo "Disk-Size: " $DISKSIZE echo "Partition/Anfg/Ende/Ende falls reformatiert/frei" $A1 " " $X1 " " $Y1 " " $Y01 " " $Z01 echo "Partition/Anfg/Ende/Ende falls reformatiert/frei" $A2 " " $X2 " " $Y2 " " $Y02 " " $Z02 echo "Partition/Anfg/Ende/Ende falls reformatiert/frei" $A3 " " $X3 " " $Y3 " " $Y03 " " $Z03 echo "Partition/Anfg/Ende/Ende falls reformatiert/frei" $A4 " " $X4 " " $Y4 " " $Y04 " " $Z04 # Zu jeder Partition J den vorigen J-1 und den folgenden J Zwischenraum bestimmen: # Anfg/Ende/Groesse ohne Redimension der Partitionen: ZA, ZE, ZG , mit Redim: WA, WE, WG echo " Bestimmung der freien Stellen auf der Platte: " EINS=1 Y0=0 ; Y00=0 ZA0=$(($Y0+$EINS)) ; ZE0=$DISKSIZE ; ZG0=$(($DISKSIZE-$Y0-1)) ; WA0=$ZA0 ; WE0=$ZE0 ; WG0=$ZG0 test $A1 != 0 ; if test $? -eq 0 ; then ZE0=$(($X1-$EINS)) ; ZG0=$(($X1-$Y0-1)) ; ZA1=$(($Y1+$EINS)) ; ZE1=$DISKSIZE ; ZG1=$(($DISKSIZE-$Y1-1)) ; WE0=$ZE0 ; WG0=$(($X1-$Y00-1)) ; WA1=$(($Y01+$EINS)) ; WE1=$ZE1 ; WG1=$(($DISKSIZE-$Y01-1)) ; fi ; echo " Luecke vor P.1: " $ZA0 $ZE0 $ZG0 " Groesse soll: " $(($ZE0-$ZA0+$EINS)) test $A2 != 0 ; if test $? -eq 0 ; then ZE1=$(($X2-$EINS)) ; ZG1=$(($X2-$Y1-1)) ; ZA2=$(($Y2+$EINS)) ; ZE2=$DISKSIZE ; ZG2=$(($DISKSIZE-$Y2-1)) ; WE1=$ZE1 ; WG1=$(($X2-$Y01-1)) ; WA2=$(($Y02+$EINS)) ; WE2=$ZE2 ; WG2=$(($DISKSIZE-$Y02-1)) ; fi ; echo " Luecke nach P.1: " $ZA1 $ZE1 $ZG1 " Groesse soll: " $(($ZE1-$ZA1+$EINS)) test $A3 != 0 ; if test $? -eq 0 ; then ZE2=$(($X3-$EINS)) ; ZG2=$(($X3-$Y2-1)) ; ZA3=$(($Y3+$EINS)) ; ZE3=$DISKSIZE ; ZG3=$(($DISKSIZE-$Y3-1)) ; WE2=$ZE2 ; WG2=$(($X3-$Y02-1)) ; WA3=$(($Y03+$EINS)) ; WE3=$ZE3 ; WG3=$(($DISKSIZE-$Y03-1)) ; fi ; echo " Luecke nach P.2: " $ZA2 $ZE2 $ZG2 " Groesse soll: " $(($ZE2-$ZA2+$EINS)) test $A4 != 0 ; if test $? -eq 0 ; then ZE3=$(($X4-$EINS)) ; ZG3=$(($X4-$Y3-1)) ; ZA4=$(($Y4+$EINS)) ; ZE4=$DISKSIZE ; ZG4=$(($DISKSIZE-$Y4-1)) ; WE3=$ZE3 ; WG3=$(($X4-$Y03-1)) ; WA4=$(($Y04+$EINS)) ; WE4=$ZE4 ; WG4=$(($DISKSIZE-$Y04-1)) ; fi ; echo " Luecke nach P.3: " $ZA3 $ZE3 $ZG3 " Groesse soll: " $(($ZE3-$ZA3+$EINS)) echo " Luecke nach P.4: " $ZA4 $ZE4 $ZG4 " Groesse soll: " $(($ZE4-$ZA4+$EINS)) echo -e "\c" > tmp0 echo " $NACH0"0 $ZG0 " " $ZA0 " " $ZE0 " " $WG0 " " $WA0 " " $WE0 >> tmp0 echo $A1 " " $ZG1 " " $ZA1 " " $ZE1 " " $WG1 " " $WA1 " " $WE1 >> tmp0 echo $A2 " " $ZG2 " " $ZA2 " " $ZE2 " " $WG2 " " $WA2 " " $WE2 >> tmp0 echo $A3 " " $ZG3 " " $ZA3 " " $ZE3 " " $WG3 " " $WA3 " " $WE3 >> tmp0 echo $A4 " " $ZG4 " " $ZA4 " " $ZE4 " " $WG4 " " $WA4 " " $WE4 >> tmp0 echo " ZwischenrÃume auf der Platte: OHNE Redim: " echo $ZG0 " ab " $ZA0 " ; " $ZG1 " ab " $ZA1 " ; " $ZG2 " ab " $ZA2 " ; " $ZG3 " ab " $ZA3 " ; " $ZG4 " ab " $ZA4 echo " ZwischenrÃume auf der Platte: MIT Redim: " echo $WG0 " ab " $WA0 " ; " $WG1 " ab " $WA1 " ; " $WG2 " ab " $WA2 " ; " $WG3 " ab " $WA3 " ; " $WG4 " ab " $WA4 echo " " ; echo " *** Alle Zwischenraeume: Part.davor -- Gr/Anf/Ende OHNE Redim -- Gr/Anf/Ende MIT Redim " ; cat tmp0 sort -o tmp1 -r -n -k 2 tmp0 # Auf tmp1 sind jetzt die ZWISCHENRAEUME / FREIE BEREICHE nach Groesse sortieret echo " Zw. sortiert nach Groesse-OHNE-Redim: Bez., Groesse, Anfg, Ende, Gr., Anf, Ende reform.: " ; cat tmp1 read AA ZZ XX YY REST < tmp1 # Partition davor, Groesse, Anfang, Ende des groessten freien Platzes echo "groesster Zwischenraum ohne redimension Partitionen: " $AA $ZZ $XX $YY if test $ZZ -gt 0 ; then echo "Groesse freier Platz definiert: " $ZZ ; else ZZ=0 ; fi ; echo " *** ::: Groesster freier Platz auf der HD OHNE Redimensionierung: Gr/von/bis " $ZZ " " $XX " " $YY # Reihenfolge auswerten: 1) primaere Part, 2) extended Part 3) groesste sort -o tmp2 -r -n -k 5 tmp0 # Auf tmp2 sind jetzt die ZWISCHENRAEUME / FREIE BEREICHE nach Groesse sortieret echo " Zw. sortiert nach Groesse-MIT-Redim: Bez., Groesse, Anfg, Ende, Gr., Anf, Ende reform.: " ; cat tmp2 echo " Zw. nach primaeren Part. auf tmp1, nach extended auf tmp3. extended Partition: " $EXT "log.P.:" $LOG if test $LOGNR -ne 0 ; then grep -v $LOG tmp2 > tmp1 ; grep $LOG tmp2 > tmp3 ; echo "log.P.:" ; cat tmp3 ; else cat tmp2 > tmp1 ; fi ; read AAA UNW1 UNW2 UNW3 ZZZ XXX YYY REST < tmp1 # ZZZ=$(($YYY-$XXX+1)) echo "groesster Zwischenraum nach redimension PRIMARY Partition: " $AAA $UNW1 $UNW2 $UNW3 $ZZZ $XXX $YYY if test $ZZZ -gt 0 ; then KLEINER=$AAA ; else ZZZ=0 ; fi # ob ueberhaupt eine primaere Partition da if test $EXT != - ; then echo "extended Part. nur relevant falls redim von ihr ausreichend fuer Install UND redim der besten primaeren nicht ausreicht" read AAA0 UNW1 UNW2 UNW3 ZZZ0 XXX0 YYY0 REST < tmp3 echo "groesster Zwischenraum nach redimension LOGICAL Partition: " $AAA0 $UNW1 $UNW2 $UNW3 $ZZZ0 $XXX0 $YYY0 # Wenn Platz primaerer Partitionen AAA zu klein, Platz logischer AAA0 nehmen if test $ZZZ0 -gt 0 ; then if test $ZZZ -lt $SIZE ; then if test $ZZZ0 -ge $SIZE ; then AAA=$AAA0 ; KLEINER=$AAA ; ZZZ=$ZZZ0 ; XXX=$XXX0 ; YYY=$YYY0 ; fi ; fi ; # sicherer AAA0 statt EXT nehmen else ZZZ0=0 ; fi ; fi ; echo " *** ::: Fuer Install ausreichender Platz auf der HD MIT Redimensionierung: Gr/von/bis " $ZZZ " " $XXX " " $YYY echo " *** ::: Dazu redimensionieren Partition: " $AAA # 3. Testen ob freier Platz ausreicht -1, sonst eine Partition kleiner machen -2 , oder loeschen -3 echo " max. Zwischenraum auf Disk ohne Redim: " $ZZ " mit Redim: " $ZZZ " Groesse der zu machenden Partition: " $SIZE " Sektoren" if test $ZZ -ge $SIZE ; then STATUS="-1" ; KLEINER=- ; echo " *** Platz reicht ohne Redim fuer die Instalation *** " ; fi ; if test $ZZ -lt $SIZE ; then STATUS="-2" ; echo " *** noetig vhd. Partition kleiner machen: " $KLEINER " *** " ; if test $ZZZ -lt $SIZE ; then STATUS="-3" ; echo " *** noetig eine Partition zu loeschen um Platz zu bekommen" ; fi ; fi ; echo " STATUS, -3 falls Part. geloescht wd muss um Platz zu kriegen ; -2 falls Part. kleiner zu machen, -1 falls Platz vhd: " $STATUS if test $STATUS = "-3" ; then echo " um Platz zu bekommen, noetig eine Partition zu loeschen: vorrangig Windows, nachrangig extended und bisheriges System " # Daten von Windows (Filme, Musik) auf einer ggf. zweiten Partition sind idR wichtiger als die Windows System -Partition if test $WINDOWSNR -ne 0 ; then KLEINERNR=$WINDOWSNR ; else sort -n -r -k 4 -o scr partitions # nach Groesse sortieren. Dann EXT und OLDSYS (nachrangig) rausnehmen und hinten anstelen: echo " EXTNR, EXT, OLDSYSNR, OLDSYS:" $EXTNR, $EXT, $OLDSYSNR, $OLDSYS if test $LOGNR -gt 0 ; then grep -v $LOG scr > scr1 ; else cat scr > scr1 ; fi ; if test $OLDSYSNR -gt 0 ; then grep -v $OLDSYS scr1 > scr ; else cat scr1 > scr ; fi ; # log. Partition wird automatisch mit ext geloescht echo $LOG >> scr ; echo $OLDSYS >> scr # egal ob OLDSYS auf EXT , dann sowieso zu loeschen falls sonst keine Part. vhd echo " Sortiert nach Preferenz zum Loeschen:" ; cat scr read KLEINER REST < scr for K in 1 2 3 4 ; do A=$NACH0$K ; if test $A = $KLEINER ; then KLEINERNR=$K ; fi ; done fi ; # KLEINERNR -ne WINDOWSNR if test $KLEINERNR -ge 5 ; then KLEINERNR=$EXTNR echo -e "d \n$EXTNR \np \nn \np \n$EXTNR \n \n \np extended Partition erneuern noetig, STATUS = -3 --3d" >> fdisk.machen EXT=- ; EXTNR=0 fi ; # log. Partitionen werden automatisch mit der extended Part. geloescht #echo " Partition Nr. " $KLEINERNR " loeschen um Platz zu kriegen" echo " Partition Nr. " $KLEINERNR " fuer Installation benutzen" # Falls keine Abfrage sondern immer Partition loeschen, folgende beiden Anweisungen rein, die nachfolgenden raus #echo -e "d \n$KLEINERNR \np Partition loeschen noetig --4d" >> fdisk.machen #ANZAHL=$(($ANZAHL - 1)) #ANZAHL=$(($ANZAHL + 1)) # um voriges zu anulieren, da keine Partitionen geaendert werden KLEINER=$NACH0$KLEINERNR NACH=$KLEINER echo $TST " " $SIZE " " $NACH0 " " $NACH " " $VON " " $KLEINER " " $OLDSYS " " $WINDOWS " " $REST > installinfo echo $TST " " $SIZE " " $NACH0 " " $NACH " " $VON " " $KLEINER " " $OLDSYS " " $WINDOWS " " $REST echo " Abfrage ob Halt oder Partition loeschen" ; echo "5 Abfrage ob Partition loeschen" > problem ; exit ; # Speater noch einbauen, Loeschen mehrerer Partitionen wenn Platz noch zu klein fi ; # end STATUS=-3 if test $STATUS = "-2" ; then grep $KLEINER partitions > scr0 read UNW XKL YKL ZKL Y0KL Z0KL KLEINERFS KLEINERART REST < scr0 echo " Partition " $KLEINER " Groesse " $ZKL " kann um " $(($ZKL - $Z0KL)) " zu " $Z0KL " verkleinert werden" echo " Danach freier Platz bis zur naechsten Partition: " $ZZZ echo " Partition verkleinern: " $KLEINER " " $KLEINERNR " vorher: Sektor Anfg, Ende, Bloecke: " $XKL " " $YKL " " $ZKL echo " Part-Art: " $KLEINERART "Filesystem: " $KLEINERFS echo " Zwischenraum durch Redimensionieren erreichbar: vor: " $AAA " Groesse: " $ZZZ " von: " $XXX " bis: " $YYY echo " Groesse mind. noetig fuer Installierung: " $SIZE " alles in Sektoren" #Falls gewäehlte Partition selbst nch Redimensionieren zu klein, wird sie soweit wie möglich verkleinert und dann hinten abgebelt #Falls dagegen mehr als minimal noetige Groesse der Installierung redimensinoert werden kann, wird ## MEHRSIZE = 70% davon aber max. 1 GB mehr der Installierung gegeben (nicht mehr da sonst redimensionieren zu lange dauert) MAXMS=4000000 # 2 GB if test $ZZZ -lt $SIZE ; then echo "11 Kein Platz fuer Instalation" > problem ; exit ; fi ; # kuenftig anders loesen if test $ZZZ -ge $SIZE ; then MEHRSIZE=$(( ($ZZZ - $SIZE) * 7)) ; MEHRSIZE=$(($MEHRSIZE / 10)) if test $MEHRSIZE -gt $MAXMS ; then MEHRSIZE=$MAXMS ; fi ; fi ; SIZE=$(($SIZE + $MEHRSIZE)) echo " Gewaehlte Groesse der Partition der Installierung: " $SIZE # Verkleinerung der Partition KLEINER um Groesse SIZE # Neuer freier Platz von XX bis YY : ZZ = XX - 1 + SIZE YY=$YYY EINS=1 XX=$(($YY - $SIZE +1)) YKL=$(($XX - 1)) # XKL bleibt ZKL=$(($YKL - $XKL + 1)) # Sektoren ZKL0=$(($ZKL / 2))k # in k # Anfang - insb. bei logischen / extended Partitionen - muss exakt gleich bleiben !!! echo " *** Zum Einrichten einer neuen Partition wird eine bestehende verkleinert *** " echo "verkleinerte Partition: Platte, Name, Nr, Sektor von bis: " $NACH0 " " $KLEINER " " $KLEINERNR " " $XKL " " $YKL echo " Danach freier Bereich von: " $XX " bis: " $YY echo " Neue Groesse Partition: " $ZKL " Sektoren oder " $ZKL0 " KB " echo " *** Beginn Verkleinern von Dateisystem auf: " $KLEINER " *** " IFR=0 echo -e "y \ny \ny" > ntfs.machen #/sbin/parted -s $NACH0 unit s resize $KLEINERNR $XKL $YKL # das funktioniert fast nie, daher: # Falls filesystem keins der nachfolgenden, bzw = "", ist Partition nicht formatiert, und kann einfach verkleinert werden .... # Versucht wird dann aber alles, da evtl nicht erkannt / kein Treiber da echo " " > rs echo " \Z1 Redimensionar / Verkleinern : " $KLEINER "\Zn" >> rs echo " \Z1 para / zu : " $ZKL0 "\Zn" >> rs echo " " >> rs #echo " 0/1 machen/simulieren: " $TST >> rs test $KLEINERFS = ext2 ; if test $? -eq 0 ; then echo resize2fs -f -p $KLEINER $ZKL0 ; IFR=1 ; echo "EXT2" ; fi ; # geht nicht mit Sektoren test $KLEINERFS = ext3 ; if test $? -eq 0 ; then echo resize2fs -f -p $KLEINER $ZKL0 ; IFR=1 ; echo "EXT3" ; fi ; # geht nicht mit Sektoren test $KLEINERFS = ext4 ; if test $? -eq 0 ; then echo resize2fs -f -p $KLEINER $ZKL0 ; IFR=1 ; echo "EXT4" ; fi ; # geht nicht mit Sektoren test $KLEINERFS = ext4dev ; if test $? -eq 0 ; then echo resize2fs -f -p $KLEINER $ZKL0 ; IFR=1 ; echo "EXT4DEV" ; fi ; # geht nicht mit Sektoren test $KLEINERFS = reiserfs ; if test $? -eq 0 ; then echo resize_reiserfs -s $ZKL0 -f $KLEINER ; IFR=1 ; echo "REISERFS" ; fi ; test $KLEINERFS = ntfs ; if test $? -eq 0 ; then ntfsfix $KLEINER >> rs ; echo ntfsresize -bPfs $ZKL0 $KLEINER IFR=1 ; echo "NTFS" ; fi ; #test $KLEINER = $LOG ; if test $? -eq 0 ; then ntfsfix $LOG >> rs ; echo ntfsresize -fs $ZKL0 $LOG ; IFR=1 ; echo "NTFS"; fi ; test $KLEINERFS = vfat ; if test $? -eq 0 ; then echo /sbin/fatresize -s $ZKL0 $KLEINER ; IFR=1 ; echo "FAT" ; fi ; test $IFR = 0 ; if test $? -eq 0 ; then echo ntfsfix $KLEINER ; echo ntfsresize -fs $ZKL0 $KLEINER ; IFR=1 ; echo "NTFS"; fi ; test $IFR = 0 ; if test $? -eq 0 ; then echo resize2fs -f -p $KLEINER $ZKL ; IFR=1 ;echo "EXT3" ; fi ; # geht nicht mit Sektoren if test $TST -ne 0 ; then echo " *** Test-Mode, kein wirkliches Formatieren " ; fi ; if test $TST -eq 0 ; then test $KLEINERFS = ext2 ; if test $? -eq 0 ; then /sbin/resize2fs -f -p $KLEINER $ZKL0 >> rs ; IFR=1 ; echo "EXT2" ; fi ; # geht nicht mit Sektoren test $KLEINERFS = ext3 ; if test $? -eq 0 ; then /sbin/resize2fs -f -p $KLEINER $ZKL0 >> rs ; IFR=1 ; echo "EXT3" ; fi ; # geht nicht mit Sektoren test $KLEINERFS = ext4 ; if test $? -eq 0 ; then /sbin/resize2fs -f -p $KLEINER $ZKL0 >> rs ; IFR=1 ; echo "EXT4" ; fi ; # geht nicht mit Sektoren test $KLEINERFS = ext4dev ; if test $? -eq 0 ; then /sbin/resize2fs -f -p $KLEINER $ZKL0 >> rs ; IFR=1 ;echo "EXT4DEV" ; fi ; # geht nicht mit Sektoren test $KLEINERFS = reiserfs ; if test $? -eq 0 ; then /sbin/resize_reiserfs -s $ZKL0 -f $KLEINER >> rs ; IFR=1 ; echo "REISERFS" ; fi ; test $KLEINERFS = ntfs ; if test $? -eq 0 ; then /usr/bin/ntfsfix $KLEINER >> rs /usr/sbin/ntfsresize -bPfs $ZKL0 $KLEINER < ntfs.machen >> rs IFR=1 ; echo "NTFS"; fi ; #test $KLEINER = $LOG ; if test $? -eq 0 ; then #/usr/bin/ntfsfix $LOG >> rs ; /usr/sbin/ntfsresize -bPfs $ZKL0 $LOG < ntfs.machen >> rs ; IFR=1 ; echo "NTFS"; fi ; test $KLEINERFS = vfat ; if test $? -eq 0 ; then /sbin/fatresize -s $ZKL0 $KLEINER >> rs ; IFR=1 ; echo "FAT" ; fi ; test $IFR = 0 ; if test $? -eq 0 ; then /usr/bin/ntfsfix $KLEINER >> rs /usr/sbin/ntfsresize -bPfs $ZKL0 $KLEINER < ntfs.machen >> rs IFR=1 ; echo "NTFS"; fi ; test $IFR = 0 ; if test $? -eq 0 ; then /sbin/resize2fs -f -p $KLEINER $ZKL0 >> rs ; IFR=1 ; echo "EXT3" ; fi ; # geht nicht mit Sektoren sync fi ; ##echo " resize fertig , Partition " $KLEINER ", size: " $ZKL0 >> rs ; echo " 0/1 machen/simulieren: " $TST >> rs #killall -HUP sleep ; rm -f rs ; killall -HUP sleep # externer Dialog: wait stoppen und def. rs ausgeben; rs loeschen; letztes wait stoppen mv -f rs tmp/resize.mkpart ; rm -f rs # Loeschen von rs reicht, damit Dialog nicht mehr angezeigt wird echo " egal ob FS verkleinern erfolgreich war oder nicht, hinten wird jetzt abgesaebelt: " echo " **** PARTITION " $KLEINER " VERKLEINERN, VON SEKTOR " $XKL " BIS " $YKL " **** " # nach Loeschen mit fdisk, Rausgehen noetig, da Eingabe abhängig ob es die einzige Partition war oder nicht echo "EXTNR , LOGNR" $EXTNR $LOGNR ###if test $TST -eq 0 ; then echo "relevante PARTITIONEN : KLEINER: " $KLEINER " EXT: " $EXT " LOG: " $LOG echo "relevante NUMMERN : KLEINERNR: " $KLEINERNR " EXTNR: " $EXTNR " LOGNR: " $LOGNR if test $ANZAHL -gt 1 ; then echo -e "d \n$KLEINERNR \np primaere und logische Part. redim Beginn --5d" >> fdisk.machen ; fi ; if test $ANZAHL -le 1 ; then echo -e "d \np primaere und logische Part. redim Beginn --5d" >> fdisk.machen ; fi ; ###/sbin/fdisk $NACH0 < fdisk.machen if test $KLEINER = $LOG ; then echo -e "d \n$EXTNR \np extended Part. redim Beginn --6d" >> fdisk.machen ###/sbin/fdisk $NACH0 < fdisk.machen fi ; echo "Die zu verkleinernde Partition ist jetzt weg, falls eine logische, auch die extended. Wird verkleinert neu gemacht." # Falls Renovierung der letzten primaeren / ext. Partition 1 - 4 (also HD voll), in fdisk keine PartNr. angeben if test $KLEINER = $LOG ; then echo "KLEINER.EQ.LOG: verkleinerte EXTENDED part. machen von " $(($XKL-63)) " bis " $YKL if test $ANZAHL -lt 4 ; then echo -e "n \ne \n$EXTNR \n$(($XKL-63)) \n$YKL \np Extended. redim Ende --7" >> fdisk.machen ; fi ; if test $ANZAHL -ge 4 ; then echo -e "n \ne \n$(($XKL-63)) \n$YKL \np Extended. redim Ende --8" >> fdisk.machen ; fi ; echo -e "t \n$EXTNR \n5 Extended. Part redim Ende: Art der P.art --9" >> fdisk.machen fi ; if test $KLEINER != $LOG ; then echo "KLEINER.NE.LOG: verkleinerte PRIMARY Part. machen von " $XKL " bis " $YKL if test $ANZAHL -lt 4 ; then echo -e "n \np \n$KLEINERNR \n$XKL \n$YKL \np Primaere. redim Ende --10" >> fdisk.machen ; fi ; if test $ANZAHL -ge 4 ; then echo -e "n \np \n$XKL \n$YKL \np Primaere. redim Ende --11" >> fdisk.machen ; fi ; echo -e "t \n$KLEINERNR \n$KLEINERART Primaere. Part redim Ende: Art der P.art --12" >> fdisk.machen fi ; if test $KLEINER = $LOG ; then echo "KLEINER.EQ.LOG: jetzt verkleinerte LOGISCHE Part. machen von " $XKL " bis " $YKL ; fi ; if test $KLEINER = $LOG ; then echo -e "n \nl \n$XKL \n$YKL \np log.Part. redim Ende --13" >> fdisk.machen ; fi ; # keine Nr. angeben if test $KLEINER = $LOG ; then echo -e "t \n$LOGNR \n7 log.Part. Art --14" >> fdisk.machen ; fi ; # typ 7=ntfs, fals dann ext kein Problem ###/sbin/fdisk $NACH0 < fdisk.machen ###fi ; #if test $TST -eq 0 ; then /sbin/parted -s $NACH0 rm $KLEINERNR ; fi ; # Partition hinten absÃbeln egal ob Filesystem verkleinert oder nicht #echo " *** " $KLEINER " verkleinert neu machen :" #echo " parted Aufruf mit File-System: " $KLEINERFS " Bereich fuer KLEINER: " $XKL $YKL #if test $TST -eq 0 ; then /sbin/parted -s $NACH0 unit s mkpart $KLEINERART $KLEINERFS $XKL $YKL ; fi ; #echo " *** " $KLEINER " neu gemacht. Situation jetzt: " #if test $TST -eq 0 ; then /sbin/parted -s $NACH0 unit s print ; fi ; STATUS="-1" # da nachfolgendes ebenfalls zu durchlaufen ist fi ; # end STATUS=-2 echo "Nach evtl. Platz machen: status, NACH0, NACHNR, EXTNR, LOGNR: " $STATUS $NACH0 $NACHNR $EXTNR $LOGNR echo "KLEINER: " $KLEINERNR "kleiner, sizekleiner" $KLEINER $ZKL if test $STATUS = "-1" ; then if test $NACHNR = 0 ; then # 4.2 Nr. NACHNR der neuen Partition definitiv festlegen NACHNR=$(($NACHNR + 4)) ; NACHNR=$(($NACHNR / 3)) echo " ******** EXTNR : " $EXTNR " ************* NACHNR : " $NACHNR if test $NACHNR = $EXTNR ; then NACHNR=$(($NACHNR + 1)) ; fi ; echo " ******** EXTNR : " $EXTNR " ************* NACHNR : " $NACHNR # EXTNR vermeiden, KLEINERNR dagegen ruhig verwendbar echo " schon 4 Part. vhd: vhd. Partition" $NACHNR " wird in fdisk ausgeschaltet, um diese Nr. fÃr neue Part. zu benutzen, " echo " wird aber nicht gelÃscht und kann durch Eintippen ihrer Grenzen (siehe logfile) in fdisk wieder benutzt werden" #echo " Warnung Partition ausgeschaltet, daten loeschen" ; echo "6 Warnung Partition ausgeschaltet, Daten loeschen" > problem ; exit ; # Dazu noetig Abfrage ob nach Loeschen der unmountbaren/kaputten ueberhaupt noch # 4 Partitionen da waren; denn nachfolgend wird die neue Part-Nr auf jedem Fall geloescht ###if test $TST -eq 0 ; then # /sbin/parted -s $NACH0 rm $NACHNR echo -e "p \nd \n$NACHNR \np Bei 4 Part. eine ausschalten um Index zu bekommen, NACHNR = 0 --15d" >> fdisk.machen # Falls letzte Part., keine p-nr angeben !! ###/sbin/fdisk $NACH0 < fdisk.machen ###fi ; fi ; # end NACHNR=0 NACH=$NACH0$NACHNR echo "nach definitiver Nr. fuer neue Part.: status, Platte, nachnr, extnr, kleinernr: " $STATUS $NACH0 $NACHNR $EXTNR $KLEINERNR # 4.3 Partition für die Installierung machen XX=$(($XX+128)) ; YY=$(($YY-128)) # sicherbeitshalber ...aber zZt nicht noetig echo " *** Platte / Partition machen: NACH0 , NACHNR , NACH " $NACH0 " " $NACHNR " " $NACH " *** " echo " *** Groesse von/bis XX , YY : " $XX " " $YY " , wurde sicherheitshalber um +/- 128 verkleinert " echo " **** INSTALL - PARTITION " $NACH "MACHEN, SEKTOR " $XX " BIS SEKTOR" $YY " **** " ###if test $TST -eq 0 ; then # Bei nur 1 Partition: da Part-Nr nicht angebbar, nicht vorsorglich loeschen da sonst eine exist. Partition mit falscher Nr # geloescht wuerde. In diesem Fall scheidet Problem besetzter Nummern aus, nur bei STATUS=-3 loeschen # Nachfolgende Abfrage eigentlich ueberfluessig, redim der Install-Part kommt nicht vor, gl. Nr. siehe oben, ausserdem # wuerde Vorhandensein der Install-Part idR nicht schaden. echo " Anzahl Partitionen schon da: " $ANZAHL " Status: " $STATUS " Install nach Part. " $NACHNR " Part. zu verkleinern: " $KLEINERNR if test $ANZAHL -gt 1 ; then echo -e "d \n$NACHNR \np evtl. vhd. Part. mit Index NACHNR = Install-Part. loeschen --16d" >> fdisk.machen ; fi ; ###/sbin/fdisk $NACH0 < fdisk.machen if test $ANZAHL -lt 3 ; then echo -e "n \np \n$NACHNR \n$XX \n$YY \np Install-Partition machen --17" >> fdisk.machen ; fi ; if test $ANZAHL -ge 3 ; then echo -e "n \np \n$XX \n$YY \np Install-Part. machen --18" >> fdisk.machen ; fi ; # da letzte Part., keine p-nr angeben !! ####echo -e "t \n$NACHNR \n$NACHART Ext.Part. Art --19" >> fdisk.machen Abfrage nötig Anzahl, falls 0, KEINE $NACHNR vorgeben !!! ###/sbin/fdisk $NACH0 < fdisk.machen echo -e "a \n$NACHNR \np Bootlabel aendern --20" >> fdisk.machen # altes boot-label wurde schon geloescht #if test $WINDOWSNR -ne 0 ; then if test $WINDOWSNR -eq $OLDSYSNR ; then #echo -e "a \n$OLDSYSNR \np Bootlabel fuer Windows aktiviert lassen --22" >> fdisk.machen #fi ; fi ; ###/sbin/fdisk $NACH0 < fdisk.machen ###fi ; # Partition NACHNR machen: #if test $TST -eq 0 ; then /sbin/parted -s $NACH0 unit s mkpart primary $XX $YY ; fi ; #echo " parted Aufruf mit: " $NACH0 " Bereich fuer KLEINER: " $XX $YY #sync #echo " *** " $NACH " neu gemacht. Situation jetzt: " #/sbin/parted -s $NACH0 unit s print ####fi ; #if test $STATUS = "-2" ; then #echo " ******** testweise ******* als maximale Gewaehr: KLEINER loeschen, dann NACH nochmal machen lassen: *********** " # Vorsicht falls man kleiner erst nach nach macht, ist die Nr. falsch # Einzige Lösung: beide Partitionen löschen (NACHNR und KLEINERNR), und danach zuerst diejenige mit der kleineren Nr machen #if test $TST -eq 0 ; then /sbin/parted -s $NACH0 rm $KLEINERNR ; fi ; #XKL100=$(($XKL+256)) ; XKL200=$(($XKL+1024)) #if test $TST -eq 0 ; then /sbin/parted -s $NACH0 unit s mkpart $KLEINERART $KLEINERFS $XKL100 $XKL200 ; fi ; # dummy wg Index Hinterher reparieren #if test $TST -eq 0 ; then /sbin/parted -s $NACH0 unit s mkpart primary ext3 $XX $YY ; fi ; # falls vorher erfolgreich gemacht, kein Problem #echo " parted Aufruf mit: " $NACH0 " Bereich fuer KLEINER: " $XX $YY #sync #echo " *** " $NACH " neu gemacht. Situation jetzt: " #/sbin/parted -s $NACH0 unit s print #echo " *** Versuch KLEINER wieder zu machen, falls erfolgreich ist alles OK und dieses testweise unschaedlich " #/sbin/parted -s $NACH0 rm $KLEINERNR ; #if test $TST -eq 0 ; then /sbin/parted -s $NACH0 unit s mkpart $KLEINERART $KLEINERFS $XKL $XKL ; fi ; #echo " *** KLEINER neu gemacht. Situation jetzt: " #/sbin/parted -s $NACH0 unit s print #echo " ************************ " fi ; # end STATUS=-1 #/sbin/parted -s $NACH0 set $NACHNR boot on # bootbar machen # 4.4. Hier ggf. nochmal Groesse ueberpruefen und wenn wenn was nicht iO mit leicht geaenderten Bedingungen bzgl Groesse # o.ae. nach oben springen #echo " *** INSTALL-DRIVE , DEVICE SOLLTEN JETZT DA SEIN: " $NACH0 " " $NACH #/sbin/parted -s $NACH unit s print #echo "Alle Partitionen: " #/sbin/parted -s $NACH0 unit s print # 5. Parameteruebergabe nach aussen echo "TST: " $TST " SIZE: " $SIZE test $TST -ge 0 ; if test $? -ne 0 ; then TST=0 ; fi ; test $SIZE -ge 0 ; if test $? -ne 0 ; then SIZE=0 ; fi ; # Es darf kein leerer Parameter also " " da sein sonst alle folgenden falsch echo " mkpart Ende: TST SIZE NACH0 NACH VON KLEINER OLDSYS WINDOWS: " echo $TST " " $SIZE " " $NACH0 " " $NACH " " $VON " " $KLEINER " " $OLDSYS " " $WINDOWS " " $REST echo $TST " " $SIZE " " $NACH0 " " $NACH " " $VON " " $KLEINER " " $OLDSYS " " $WINDOWS " " $REST > installinfo echo " Ausgabe von mkpart: " echo "neue Partition: Platte, Name, Nr, Track von bis: " $NACH0 " " $NACH " " $NACHNR " " $XX " " $YY echo " altes System: " $OLDSYS " Windows: " $WINDOWS if test $TST -eq 0 ; then echo -e "p \nw AUSFUEHREN, AUF DISK SCHREIBEN, KEIN TEST --23" >> fdisk.machen ; fi ; # Bei TST=0 kein Test, wirklich schreiben if test $TST -ne 0 ; then echo -e "p SIMULIEREN, DA TEST --24" >> fdisk.machen ; fi ; # TST=1 nur simulieren echo " * * * " echo " * * * Von mkpart erzeugte / nach fdisk.machen geschriebene Aenderungen der Partitionstafel: " cat fdisk.machen echo " * * * Die Anwendung von fdisk.machen / tatsaechliche Aenderung der Partitionen erfolgt in ./init nach Problem-Behandlung / Rueckfrage" echo " * * * " echo " *** alte Partitionen : " cat fdiskwar STATUS="1" echo "0 Ende mkpart, scheinbar erfolgreich" > problem echo " *** Ende mkpart " exit