linux software raid1: grotere harde schijven plaatsen

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • GiLuX
  • Registratie: Juni 1999
  • Laatst online: 18-11-2022
ik wil de schijven in een raid 1 vervangen door grotere.

er zijn weliswaar meerdere howto's te vinden maar ze laten allemaal net het stukje over je partitie indeling achterwegen dus wellicht dat iemand hier mijn idee daar over kan bevestigen.

normaal gesproken vervang ik een kapotte schijf door een zelfde of grotere maar hou dan de originele partitie indeling aan.

nu wil ik eerst de kapotte schijf (SDB) vervangen en de indeling vergroten, laten syncen en dan hetzelfde met de andere (SDA).

de mdadm man page geeft ook geen uitsluitels aangaande aanpassen van partitie schema's:
Normally when an array is built the "size" it taken from the smallest of the drives. If all the small drives in an arrays are, one at a time, removed and replaced with larger drives, then you could have an array of large drives with only a small amount used. In this situation, changing the "size" with "GROW" mode will allow the extra space to start being used. If the size is increased in this way, a "resync" process will start to make sure the new parts of the array are synchronised.

Note that when an array changes size, any filesystem that may be stored in the array will not automatically grow to use the space. The filesystem will need to be explicitly told to use the extra space.
wat ik me nu afvraag en wellicht heel logisch lijkt is moet ik dan dus eerst de partitie vergroten en trekt die raid het als de ene schijf 'tijdelijk' een grotere partitie heeft dan andere?

er van uitgaande dat ik MD0 wil vergroten waar normaal gesproken sda2 en sdb2 in hangen
dan zou dit mijn stappen plan zijn:

- nieuwe schijf er in hangen
# fdisk /dev/sdb
 'zelfde partitie schema creeren maar sdb2 groter maken dan voorheen'


# fdisk -l

SDA (nog met originele partitie indeling):
/dev/sda1   *           1          25      200781   fd  
/dev/sda2              26        8950    71690062+  fd (origineel)
/dev/sda3            8951        9212     2104515   fd  

SDB (met vergrote sdb2 partitie):
/dev/sdb1   *           1          25      200781   fd  
/dev/sdb2              26        20000 167082510   +  fd  (vergroot)
/dev/sdb3            20001        20262   2104515   fd 


- SDB terug zetten in raid array
- laten syncen
- grub installeren op SDB

vervolgens vervang ik SDA:

# fdisk /dev/sda


# fdisk -l

SDA:
/dev/sda1   *           1          25      200781   fd  
/dev/sda2              26        20000 167082510+   fd  (vergroot)
/dev/sda3            8951        9212     2104515   fd 

SDB:
/dev/sdb1   *           1          25      200781   fd 
/dev/sdb2              26        20000 167082510+  fd  (vergroot)
/dev/sdb3            20001        20262   2104515   fd 


- SDA terug zetten in raid array
- laten syncen
- grub installeren op SDA

dan zou ik doen:
# mdadm --grow /dev/md0 --size=max


en dan:
# resize2fs -p /dev/md0



ik zou graag willen weten of dit 'the way to go is' voordat ik mijn hele raid in de soep laat draaien ;)

"I disagree with what you are saying, but I will defend to the death your right to say it." -- not clear who


Acties:
  • 0 Henk 'm!

  • Guru Evi
  • Registratie: Januari 2003
  • Laatst online: 24-08 19:45
Ziet er goed uit. Neem eerst even een backup, je weet nooit wat er mis gaat. Daarnaast kun je ook je oude schijf/schijven tijdelijk behouden, daar zou alles ook nog moeten op staan. Maar neem in ieder geval een backup voordat je begint (of draai je dagelijkse backup manueel).

Pandora FMS - Open Source Monitoring - pandorafms.org


Acties:
  • 0 Henk 'm!

  • blaataaps
  • Registratie: Juli 2001
  • Niet online
GiLuX schreef op donderdag 13 januari 2011 @ 18:39:
ik wil de schijven in een raid 1 vervangen door grotere.

er zijn weliswaar meerdere howto's te vinden maar ze laten allemaal net het stukje over je partitie indeling achterwegen dus wellicht dat iemand hier mijn idee daar over kan bevestigen.

normaal gesproken vervang ik een kapotte schijf door een zelfde of grotere maar hou dan de originele partitie indeling aan.

nu wil ik eerst de kapotte schijf (SDB) vervangen en de indeling vergroten, laten syncen en dan hetzelfde met de andere (SDA).

de mdadm man page geeft ook geen uitsluitels aangaande aanpassen van partitie schema's:

[...]


wat ik me nu afvraag en wellicht heel logisch lijkt is moet ik dan dus eerst de partitie vergroten en trekt die raid het als de ene schijf 'tijdelijk' een grotere partitie heeft dan andere?
Dat is geen probleem, de raid-array wordt dan zo groot als de kleinste partitie.
er van uitgaande dat ik MD0 wil vergroten waar normaal gesproken sda2 en sdb2 in hangen
dan zou dit mijn stappen plan zijn:
Volgens mij klopt het stappenplan wel ongeveer. Als je de tijd (en gelegenheid tot downtime hebt) kun je ook beginnen met een dd-kopie te maken van bijvoorbeeld sda, naar 1 van de nieuwe schijven. Als er dan iets misgaat, heb je altijd de oude schijven nog onaangetast liggen. Wat je ook kunt doen, is in virtualbox een vergelijkbare setup te maken (zelfde partitie-indeling en raidconfig, maar dan een stuk kleiner, dan gaat het wat sneller), en dan de procedure virtueel proberen. Dan heb je alles al een keer gedaan, en weet je welke struikelblokken je kunt verwachten.

Acties:
  • 0 Henk 'm!

  • pennywiser
  • Registratie: November 2002
  • Laatst online: 11:35
Volgens mij is de partitiononering ook vrij onbelangrijk. Je mirrort met mdadm een partitie tegen een andere partitie ahw. Je kan bv. zelfs een usb stick mirroren. Beide hoeven dus ook niet even groot te zijn, zelfde disken te zijn etc.

Acties:
  • 0 Henk 'm!

  • GiLuX
  • Registratie: Juni 1999
  • Laatst online: 18-11-2022
ok,
voor degene die dit topic ooit nodig hebben,
wat ik hier boven heb beschreven werkt als een zonnetje.

de grow actie leek overigens binnen een paar seconden klaar te zijn, de file system resize deed er een stuk langer over.

zal hier onder even een soort mini howto neer zetten die iets afwijkt van mijn eerste post en er gewoon van uit gaat dat je je raid-1 schijven wil vervangen door schijven met meer capaciteit:


HOWTO:

Dit is overigens getest op een redhat 5 compatible systeem

we gaan er van uit dat je geen LVM gebruikt en alle partities raided zijn en je kernel versie minimaal 2.6 ivm resize2fs op een mounted filesystem:
If the filesystem is mounted, it can be used to expand the size of the mounted filesystem, assuming the kernel supports on-line resizing. (As of this writing, the Linux 2.6 kernel supports on-line resize for filesystems mounted using ext3 only.).
;

we gaan voor het gemak van uit dat in de huidige situatie het partitie schema er zo uit ziet:

1e partitie: /boot (ongeveer 200 MB)
2e partitie: / (ongeveer 70 GB)
3e partitie: 'swap' (ongeveer 2048 MB)

(swap hoef je overigens niet te raiden, sommige doen het wel sommige niet)

en dit is hoe bv je raid indeling er uit ziet:

# cat /proc/mdstat 

Personalities : [raid1] 
md0 : active raid1 sda1[1] sdb1[0]
      200704 blocks [2/2] [UU]

md1 : active raid1 sda2[1] sdb2[0]
      71681920 blocks [2/2] [UU]

md2 : active raid1 sda3[1] sdb3[0]
      2096384 blocks [2/2] [UU]



verder gaan we er van uit dat de enige partitie die in dit geval vergroot wordt de / partitie is.

bekijk de output van fidsk:

# fdisk -l

/dev/sda1   *           1          25      200781   fd  
/dev/sda2              26        8949    71690062+  fd
/dev/sda3            8950        9210     2104515   fd  

/dev/sdb1   *           1          25      200781   fd  
/dev/sdb2              26        8949    71690062+  fd 
/dev/sdb3            8950        9210   2104515   fd 


het handigste is om deze output even op te slaan in een textfile:
# fdisk -l | grep "/dev/sda[[:digit:]]" > partitions.txt


verder is het handig om even uit te rekenen hoeveel cylinders je huidige schema per partitie gebruikt zodat je later makkelijk kan re-partitioneren:
old_IFS=$IFS;IFS=$'\n';for i in `cat partitions.txt`;do echo ${i/\*/}|awk '{print $1"\t"$3" - "$2"\t= "$3-$2" cylinders"}';done;IFS=$old_IFS > cylinders.txt


partitions.txt bevat nu:
/dev/sda1 25 - 1 = 24 cylinders
/dev/sda2 8949 - 26 = 8923 cylinders
/dev/sda3 9210 - 8950 = 260 cylinders

nu heb je je basis info en kan je je nieuwe schijven gaan partitioneren.


Partitioneren

in dit geval gaan we er van uit dat je enkel de partitie waar "/" op staat meer ruimte wil geven.

hang de nieuwe schijven aan een pc en open fdisk:
# fdisk /dev/sdb


de commando's die we in dit voorbeeld zouden geven zijn, tussen haakjes staat wat het doet:

n (nieuwe  partitie)
1 (eerste partitie)
1 (start cylinder)
25 (end cylinder)


nu heb je de eerste partitie gedaan, die blijft verder hetzelfde, gaan we verder met de tweede partitie.
stel je wil dat deze partitie op je nieuwe schijf 500GB wordt:

n (nieuwe  partitie)
2 (tweede partitie)
26 (start cylinder, oftewel 1 meer dan waar de vorige eindigde)
+500000M (we geven op deze manier de grote aan in MB's)


nu is de tweede partitie 500 GIG en wat we nu willen weten is, welke eind cylinder dat oplevert dus doen we:
p (laat de voorlopige nieuwe partitie indeling zien)


we krijgen de volgende output:
   Device Boot      Start         End      Blocks 
/dev/sdb1              1          25      200781  
/dev/sdb2              26       62273   500007060


de nieuwe eind cylinder is dus geworden 62273

we weten dus dat de derde partitie op 62273 + 1 gaat beginnen
en aangezien we nog weten van de orginele indeling die in cylinders.txt staat dat de orginele derde partitie 260 cylinders telde:
/dev/sda3 9210 - 8950 = 260 cylinders
tellen we dit er bij op:

62273 + 1 + 260 = 62534


dus nu gaan we verder met de laatste partitie:
n (nieuwe  partitie)
3 (derde partitie)
62274 (start cylinder)
62534 (end cylinder)


nu is deze partitie in principe dus opgeschoven naar boven maar heeft nog dezelfde grote als bij de originele indeling.

we zijn nog niet klaar, we moeten nog de boot partitie bootable maken:
a (bootlable flag zetten)
1 (op de eerste partitie)


en als laatste de raid eigenschap aan de partities toevoegen:

t (partitie type zetten)
1 (op eerste partitie)
fd (is type "Linux raid autodetect")


herhaal dit voor partitie 2 en 3

check het resultaat met:
p (print de nieuwe tabel)

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1          25      200781   fd  Linux raid autodetect
/dev/sdb2              26       62273   500007060   fd  Linux raid autodetect
/dev/sdb3           62274       62534     2104515   fd  Linux raid autodetect


als het er goed uit ziet kan je de nieuwe partitie indeling officieel maken met:
w (leg partitie indeling vast)
q (verlaat fdisk)


dit hele fdisk nog een keer herhalen voor de tweede nieuwe schijf.


nu zijn we klaar om 1 oude schijf te gaan vervangen.


Disk uit array gooien

als je al met een kapotte schijf zit dan kan je die uit de raid array gaan knikkeren, als ze beide nog goed zijn maakt het in principe niet uit welke.

in dit voorbeeld is SDB de klos.

je kan twee dingen doen nu,

server uitzetten en de schijf er uit trekken.

als je de server weer aanzet zonder nieuwe schijf of met een lege schijf zal de raid software dit detecteren en zelf de andere schijf op niet aktief zetten.

je kan ook eerst de schijf uit de raid array te gooien door de partities eerst te 'failen' en daarna te 'removen':

fail elke partitie:
mdadm --set-faulty /dev/md0 /dev/sdb1
mdadm --set-faulty /dev/md1 /dev/sdb2
mdadm --set-faulty /dev/md2 /dev/sdb3


verwijder elke partitie uit array:
mdadm --remove /dev/md0 /dev/sdb1
mdadm --remove /dev/md1 /dev/sdb2
mdadm --remove /dev/md2 /dev/sdb3


kijk of ze er ook daadwerkelijk uit liggen, dit hoort er ongeveer zo uit te zien:
# cat /proc/mdstat 

Personalities : [raid1] 
md0 : active raid1 sda1[0]
      200704 blocks [2/1] [U_]
      
md1 : active raid1 sda2[0]
      71681920 blocks [2/1] [U_]
      
md2 : active raid1 sda3[0]
      2096384 blocks [2/1] [U_]


je ziet aan "[U_]" dat de partitie van SDB er uit ligt. ([UU] is dat ze beiden er nog in zitten)


Disk vervangen

schakel de server uit en vervang HDB voor 1 van de nieuw gepartioneerde schijven

start weer op

hang schijf terug in raid array:
mdadm --add /dev/md0 /dev/sdb1
mdadm --add /dev/md1 /dev/sdb2
mdadm --add /dev/md2 /dev/sdb3


de array gaat nu rebuilden en kan lang duren.

om de vooruitgang te volgen kan je doen:

watch -n1 cat /proc/mdstat


als de schijven weer in sync zijn grub installeren op de nieuwe schijf:
# grub
device (hd0) /dev/hdb
root (hd0,0)
setup (hd0)
quit


vervolgens server weer uitzetten en nu SDA er uit trekken, en als je het netjes wil doen eerst ook weer failen en removen uit de array.

weer opstarten

nu gaan we de raid partitie laten groeien naar maximale capaciteit van de partitie (500GB):
# mdadm --grow /dev/md1 --size=max


dit gaat snel

nu kunnen we uiteindelijk het filesystem zelf laten groeien:
# resize2fs -p /dev/md1


de optie "-p" geeft voortgang aan en dit duurt wel even voordat het klaar is.

als het eindelijk klaar is kunne we de tweede nieuwe schijf er bij gaan zetten die je ook al had voorzien van de nieuwe partitie indeling.

duszz.. server weer uitzetten,

nieuwe schijf erbij hangen (op positie die nu dus al leeg was) en weer opstarten

we zijn er bijna,
we voegen de nieuwe schijf toe aan de array:
mdadm --add /dev/md0 /dev/sda1
mdadm --add /dev/md1 /dev/sda2
mdadm --add /dev/md2 /dev/sda3


volgen rebuild met:
watch -n1 cat /proc/mdstat


en daarna we installeren de bootloader op eerste partitie:
# grub
device (hd0) /dev/hda
root (hd0,0)
setup (hd0)
quit


voila.

"I disagree with what you are saying, but I will defend to the death your right to say it." -- not clear who


Acties:
  • 0 Henk 'm!

  • BoAC
  • Registratie: Februari 2003
  • Laatst online: 07:02

BoAC

Memento mori

Bij het verwijderen van SDA is het niet nodig om die eerst uit het array te verwijderen?

Acties:
  • 0 Henk 'm!

  • GiLuX
  • Registratie: Juni 1999
  • Laatst online: 18-11-2022
je hebt gelijk, dat is een beetje tegenstrijdig ja.

in principe hoeft het niet want als je weer op zou starten ziet de raid software dat er iets mis is omdat de superblocks niet overeen komen en wordt de missende/vervangen schijf automatisch uit de array gegooid.

heb het even aangepast, thx voor oplettendheid.

[ Voor 6% gewijzigd door GiLuX op 21-01-2011 10:45 ]

"I disagree with what you are saying, but I will defend to the death your right to say it." -- not clear who

Pagina: 1