[linux-l] Zusammenführen von 2 Partitionen unter Linux

Frank Reker frank at reker.net
So Jul 15 20:38:29 CEST 2018


Hallo Frank,

Am So 15. Jul 2018 10:57 +0200 schrieb Frank Kroker:
>der nun leeren Partion lag. Hat auch geklappt. Dann wollte ich die Linux 
>Partion erweitern in den leeren Bereich hinein. Das geht aber nicht, da mir 
>vom Partionsprogramm angezeigt wird, das noch ein ca 1MB großer Bereich 
>vorhanden ist zwischen den beiden Bereichen, die zusammengeführt werden 
>sollen. Den bekomme ich aber nicht gelöscht. Kann mir eventuell jemand meinen 
>Fehler aufzeigen und Hilfestellung geben. 

Ich vermute mal, du hast die leeren Partitionen nicht aus der
Partitionstabelle geloescht?!?
also erst mit parted/fdisk die leeren Partitionen entfernen, und
dann die gewuenschte Partition vergroessern. Anschliessend das
Filesystem vergroessern.

Aber Achtung: welche der Partitionen ist die erste auf der Platte?
Du kannst das fs nur nach hinten vergroessern.
Andernfalls muss das fs erst nach vorne verschoben werden
bevor ein resize gemacht wird. Merk dir also gut die
Position wo das fs beginnt!

Besser: 
du nimmst die leere Partition (z.b. sda1) und installierst dort
erstmal lvm drauf:
#> pvcreate /dev/sda1
damit machst du ein lvm laufwerk aus deiner partition
#> vgcreate mygroup /dev/sda1
damit legst du eine volume group drauf an
#> lvcreate -L 450g -n myname mygroup
und damit erzeugst du eine logical volume (entspricht einer Partition).

dann erzeuge ein fs:
#> mkfs.ext4 /dev/mygroup/myname

jetzt mountest du die neue partition
#> mkdir /mnt/new
#> mount /dev/mygroup/myname /mnt/new
und nun die alte (z.b. /dev/sda3)
#> mkdir /mnt/old
#> mount /dev/sda3 /mnt/old

jetzt kopierst du alles rueber:
#> rsync -av -SAX /mnt/old/. /mnt/new/.

und jetzt wieder unmounten
#> umount /mnt/old
#> umount /mnt/new
sicherheitshalber ein fs-check:
#> fsck.ext4 /dev/mygroup/myname


jetzt machst du auch aus /dev/sda3 eine lvm partitionen:
#> pvcreate /dev/sda3
und fuegst die zur volume group hinzu:
#> vgextend mygroup /dev/sda3
jetzt vergroesserst du die logical volume von oben
es ist dabei egal ob die beiden hintereinanderliegen
oder nicht. lvm haendelt das fuer dich!
#> lvresize -l 100%FREE mygroup/myname
alternativ kannst du auch erst mal eine oder mehrere
weiter logical volumes mit lvcreate anlegen

dann musst du das fs vergroessern:
#> resize2fs /dev/mygroup/myname
und noch ein fs check
#> fsck.ext4 /dev/mygroup/myname

done!

note: auf manchen linuxen wird /dev/mygroup/myname
nicht angelegt, dann nimm den Namen:
/dev/mapper/mygroup-myname

falls du /dev/sda2 auch hinzunehmen willst, dann:
#> pvcreate /dev/sda2
#> vgextend mygroup /dev/sda2
vor dem lvresize

falls du schon mit lvm arbeitest, dann entfaellt
das umkopieren. du nimmst einfach die neue 
partition mit in deine gruppe mit auf:
#> pvcreate /dev/sda1
#> vgextend mygroup /dev/sda1
#> lvresize -l 100%FREE myroup/myname
usw...


mygroup ist hier der name deiner gruppe (volume group)
und myname der name deiner partition (logical volume).
du kannst die namen natuerlich beliebig waehlen.


wenn du lvm nicht nutzen moechtest, dann kopiere erst
die daten von der hinteren auf die vordere:
#> mkfs.ext4 /dev/sda1
#> mount /dev/sda1 /mnt/new
#> mount /dev/sda3 /mnt/old
#> rsync -av -SAX /mnt/old/. /mnt/new/.

und jetzt wieder unmounten
#> umount /mnt/old
#> umount /mnt/new

entfaellt natuerlich wenn linux schon auf der ersten
partition ist.

in jedem fall ein fs-check machen:
#> fsck.ext4 /dev/sda1

jetzt die alten partitionen entfernen:
#> parted /dev/sda rm 2
#> parted /dev/sda rm 3

und /dev/sda1 erweitern:
#> parted /dev/sda resizepart 1 -1

jetzt das fs erweitern:
#> resize2fs /dev/sda1
und noch ein fs check
#> fsck.ext4 /dev/sda1

done!

beachte, dass linux manchmal die partitionstabelle
nicht richtig einlesen kann, so dass ein reboot
notwendig wird nach dem resizepart.
wenn von cd gebootet wird passiert das selten.
haeufig hilft dann auch ein
#> blockdev --rereadpt
um ein erneutes einlesen zu erzwingen, so erspart
man sich den reboot.


beachte aber: sda1 ist nicht zwangslaeufig die
erste partition (auch wenn in meinem beispiel oben
angenommen). die nummer in sdaX gibt nur die 
position in der partitionstabelle an, nicht die 
position der partition auf der platte. also
sda2 kann durchaus vor sda1 liegen. im zweifelsfall mal
ein fdisk -l machen.


im allgemeinen empfehle ich aber lvm, ich habe da sehr
gute erfahrungen mit gemacht. es ist halt sehr viel
flexibler, wenn du mal irgendetwas umpartitionieren 
musst / willst, oder eine zweite platte mit hinzunehmen
moechtest,... aber beachte, dass nicht alle bootloader
damit zurecht kommen. mit grub2 kein problem.
im zweifelsfall eine kleine partition fuer /boot 
ausserhalb des lvm belassen.


beachte aber: wenn du auf lvm umsteigst wirst du
wahrscheinlich die initrd's neu generieren muessen.
unter debian:
#> update-initramfs -u -k all
wie das unter openSuse geht - keine Ahnung.

da du von cd bootest einfach die neue partition
mounten:
#> mkdir /z
#> mount /dev/mygroup/myname /z
#> mount -t proc proc /z/proc
#> mount -t sysfs sys /z/sys
#> mount --bind /dev /z/dev
#> chroot /z /bin/bash

jetzt bist du in deinem system und kannst die initramfs neu
machen.

ausserdem wirst du wahrscheinlich den bootloader aktualisieren
muesen (wahrscheinlich auch beim umpartitionieren):
(ebenfalls im chrooted-system):
#> update-grub2

auch hier - keine Ahnung wie das tool in openSuse heisst.


ich hoffe das war jetzt hilfreich und halbwegs verstaendlich.
viel erfolg.


und ja: ein backup ist vor solchen aktionen immer sinnvoll.
zu schnell macht man einen dummen fehler und dann hat man
arbeit alles wieder herzustellen.





-- 
Don't worry be happy ...
Ciao Frank Reker




Mehr Informationen über die Mailingliste linux-l