Hallo, Am Wed, 06 Apr 2011, Thomas Moritz schrieb:
...was aber bedeutet, dass eine Linuxkiste mit 'grub' verfuegbar ist! Hier ist das kein Problem, aber die Kiste will ich in Kuerze abgeben und nicht gleich wieder auf dem Tisch haben, nur weil das System zu Clonen ist. Ich sehe 2 Moeglichkeiten, wobei mir die Variante (2) guenstiger erscheint:
1) Ich liefere einen USB-Boot-Stick mit einer Mini-Suse dazu (hab ich mit Suse-Studio mal gebaut) Dann kann ich grub per chroot installieren lassen! OhhOhh...
2) Ich mache ein 256MB _bootfaehiges_ Image fertig sdd1 -> 200MB -> System (200MB, falls spaeter noch was rein muss) sdd2 -> restMB -> vfat dd if=/dev/sdd of=/cf.img bs=32k Egal auf welche Karte das cf.img nun raufgebuegelt wird, wird es auch booten! Um den restlichen Platz auf der Karte zugaenglich zu machen, ist lediglich die vfat-Partition (ja nach Kartengroesse) zu vergroessern. Leider kann das 'resize2fs' nicht.
_Idee_ zum Vergroessern (ungetestet!): [Ich hoffe, ich habe die fdisk-Tasten soweit im Kopf :-) ]
************************************************************** [...] mydev=$1 #nur zur Demo umount /mnt/$mydev2 fdisk /dev/$mydev <<EOF >/dev/null 2>&1 d 2 n p 2 t b w EOF
Ich glaub nicht daß das so geht (ausserdem fehlt der FS-Typ). Für sowas nimm sfdisk oder parted.
mkfs.msdos -F32 /dev/$mydev2 tune2fs ... #fsck Zyclen setzen usw. [...] mount /dev/$mydev2 #steht ja bereits in der fstab vom img **************************************************************
Gibt es Einwaende oder Verbesserungen? Vielen Dank!
Gegenvorschlag, der ähnlich dem ist, was du jetzt hast: Schreib GRUB in den BR der Linux-Partition, dann kannst du den komplett mit dd mir ins Image der _Partition_ holen: dd if=/dev/sdd1 of=cf-linux-root.img bs=8M Dann kannst du den generischen MBR-Code, der einfach die aktive Partition startet in den MBR schreiben (nur die ersten 446 Bytes). Und wenn du die Partitionstabelle im MBR (nur die für die Linux-Partition) in den MBR schreibst wäre es sogar Partitioniert, sinnvoller ist aber evtl. auch die Linux-Partition per sfdisk/parted anzulegen. Die FAT32 Partition legst du dann einfach mit sfdisk/parted an. Sei /dev/sdk die leere CF-Karte (nur damit es jetzt nicht mit vorigen Angaben kollidiert) und in der Annahme, daß die Linux-Partition exakt 200M groß ist: $ /sbin/sfdisk -n -uS /dev/sdk <<'EOF' 64,409600,83,* 409664,,0C EOF $ dd if=cf-linux-root.img of=/dev/sdk1 bs=8M count=25 $ dd if=/usr/lib/boot/master-boot-code of=/dev/sdk bs=1 count=446 $ mkfs.msdos -F32 /dev/sdk2 $ tune2fs -c 64 /dev/sdk1 Evtl. mußt du noch Köpfe/Sektore per '-H <HEADS> -S SECTORS' angeben, zumindest bei nem Image braucht's das. Ich hab das mal getestet: $ ls -l test.img -rw-r--r-- 1 dh dh 1073741824 2011-04-06 17:58 test.img $ /sbin/sfdisk -f -H16 -S 64 -uS test.img <<'EOF' 64,409600,83,* 409664,,0C EOF Warning: test.img is not a block device Disk test.img: cannot get geometry [..] BLKRRPART: Inappropriate ioctl for device $ /sbin/sfdisk -n -uS -l test.img Disk test.img: cannot get geometry Disk test.img: 130 cylinders, 255 heads, 63 sectors/track Warning: The partition table looks like it was made for C/H/S=*/16/0 (instead of 130/255/63). For this listing I'll assume that geometry. Units = sectors of 512 bytes, counting from 0 Device Boot Start End #sectors Id System test.img1 * 64 409663 409600 83 Linux test.img2 409664 2097151 1687488 c W95 FAT32 (LBA) test.img3 0 - 0 0 Empty test.img4 0 - 0 0 Empty $ dd if=test.img count=1 | od -Ax -tx1z 1+0 records in 1+0 records out 512 bytes (512 B) copied, 3.1751e-05 s, 16.1 MB/s 000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 >................< * 0001b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 01 >................< 0001c0 01 00 83 0f c0 ff 40 00 00 00 00 40 06 00 00 01 >....Àÿ@....@....< 0001d0 41 90 0c 0f c0 ff 40 40 06 00 c0 bf 19 00 00 00 >A...Àÿ@@..À¿....< 0001e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 >................< 0001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa >..............Uª< 000200 Wenn du die Sektoren addierst landest du korrekt bei exakt dem 1G ;) $ echo 'scale=5;(1687488+409600+64)*512' | bc 1073741824 Das mit dem Beginn bei 64 Sektoren, weil ich mal annehmen, daß die CF-Karte mit Blöcken hantiert, die größer als 512 Bytes sind (4K? 32K?). Ansonsten kannst du bei sfdisk auch mit anderen "units" arbeiten, guck dir auch an, was die Karte als "Geometrie" meldet (wenn überhaupt). Achso, die Eingabe für sfdisk: Generell: START,LENGTH,FSTYPE,ACTIVE [C,H,S] [C,H,S] Da ich per -uS Sektoren als Unit gewählt habe: 64,409600,83,* ### Start mit Sektor 64, Länge 409600 Sektoren, also ### exakt 200M, Typ 0x83, aktiv 409664,,0C ### Start bei Sektor 409664, soviel noch frei ### ist, Typ FAT32-LBA, inaktiv. Eigentlich müßte man ### auch den ersten Wert weglassen können, das wird ### dann als "ab nächstem unbelegten" interpretiert, ### was beim Image hier aber nicht klappt, das macht ### dann 1-63 draus, erst die dritte wird dann "der ### Rest". Ne andere Variante wäre z.B.: $ /sbin/sfdisk -n -uM /dev/sdk <<'EOF' 1,200,83,* ,,0C EOF Damit würde halt am Anfang einiges mehr verschwendet. HTH, -dnh --
(void *)'\0' Didn't you see the sign? It said VOID WHERE PROHIBITED Don't tell me you can't C. -- the Internet Oracle [#1307-01] -- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org