LVM: Unterschied zwischen den Versionen
Cbs (Diskussion | Beiträge) (→Platte austauschen) |
Cbs (Diskussion | Beiträge) |
||
Zeile 132: | Zeile 132: | ||
mit folgendem kommando kann wird die ausgabe staendig refreshed: | mit folgendem kommando kann wird die ausgabe staendig refreshed: | ||
watch cat /proc/mdstat | watch cat /proc/mdstat | ||
+ | |||
+ | |||
+ | ==LVM Snapshot/Backup== | ||
+ | |||
+ | erstelle ein backup eines logischen volumes.<br/> | ||
+ | dies wird hauptsaechlich zum backup von mysql benutzt. ich fuehre also die<br/> | ||
+ | schritte, die innerhalb von mysql benoetigt werden, hier mit auf...<br/> | ||
+ | |||
+ | mysql-datenbanken locken damit die files consistent sind: | ||
+ | |||
+ | mysql> FLUSH TABLES WITH READ LOCK | ||
+ | |||
+ | dies kann einen moment dauern.<br/> | ||
+ | wenn das kommando durch ist, die mysql-connection offen lassen!<br/> | ||
+ | nun: | ||
+ | |||
+ | lvcreate -L16G -s -n dbbackup /dev/vg1/mysqlPartition | ||
+ | |||
+ | dies erzeugt eine kopie der lvm-partition die die datenbanken enthalten.<br/> | ||
+ | bei der groesse (-L16G) muss man natuerlich darauf achten dass partition f. die kopie<br/> | ||
+ | gross genug ist um die daten in /dev/vg1/mysqlPartition aufzunehmen.<br/> | ||
+ | danach haben wir eine kopie unserer partition /dev/vg1/mysqlPartition unter /dev/vg1/dbbackup<br/> | ||
+ | |||
+ | zurueck zur datenbank und tabellen frei geben.<br/> | ||
+ | falls die DB repliziert ist muss man zusaetzlich noch die log-position sichern: | ||
+ | |||
+ | mysql> SHOW MASTER STATUS; | ||
+ | ... | ||
+ | mysql> UNLOCK TABLES; | ||
+ | |||
+ | nun kann man ganz gemuetlich die backup-partition mounten und die daten kopieren.<br/> | ||
+ | die datenbank laeuft derweil ganz normal weiter...<br/> | ||
+ | |||
+ | mount /dev/vg1/dbbackup /mnt/backup | ||
+ | cp /mnt/backup/mysql/* /path/to/backups | ||
+ | |||
+ | or whatever you want...<br/> | ||
+ | if ready, unmount the partition and destroy it... | ||
+ | |||
+ | umount /mnt/backup | ||
+ | lvremove /dev/vg1/dbbackup | ||
+ | |||
+ | thats it! ;-) |
Version vom 30. November 2010, 11:44 Uhr
TODO: mach et schoener... ;-)
Inhaltsverzeichnis
pakete
apt-get install lvm2 cryptsetup mdadm
raid erzeugen
mdadm -C /dev/md0 -l1 -n2 /dev/sdb1 /dev/sdc1
packt die platten sdb1 und sdc1 in ein raid1 (-l1)
-n2 = 2 raid-member
fuer ein raid5 waere das entsprechend:
mdadm -C /dev/md0 -l5 -n3 /dev/sdb1 /dev/sdc1 /dev/sdd1
lvm anlegen
pysical volume erzeugen
pvcreate /dev/md0
oder ohne raid:
pvcreate /dev/hda5 /dev/hdc1 /dev/sda2
fuegt die physical volumes hinzu.
bei der verwendung eines raid's muss das device /dev/mdX (z.B. pvcreate /dev/mdX) verwendet werden. |
volume-group erzeugen
vgcreate vg1 /dev/md0
legt die volume-group 'vg1' an. name frei waehlbar
logisches volume erzeugen
lvcreate -L 10G -n <name (z.b. daten)> <vol-group (z.b. vg1)>
wenn verschluesselt werden soll:
cryptsetup -c aes-cbc-essiv:sha256 -y -s256 luksFormat /dev/<vol-grp>/<name> cryptsetup luksOpen /dev/<vol-grp>/<name> daten.decrypted
Physical (encrypted) /dev/<vol-grp>/<name>
Logical (unencrypted) /dev/mapper/daten.decrypted
dateisystem erzeugen
mkfs.ext3 /dev/<vol-grp>/<name>
z.b.:
mkfs.ext3 /dev/vg1/daten
oder falls verschluesselt:
mkfs.ext3 /dev/mapper/daten.decrypted
lvm vergroessern
groesse der volume-group anzeigen
vgdisplay zeigt volume-group an, also verbleibender/benutzter speicher etc.
ohne den optionalen parameter werden alle volume groups aufgelistet.
vgdisplay [vol-group (z.b. daten)]
logisches volume vergroessern
lvextend -L +100G /dev/vg1/daten
dm-crypt-container vergroessern
wenn verschluesselt, dann den dmcrypt-container vergroessern
cryptsetup resize daten.decrypted
dateisystem vergroessern
danach das filesystem vergroessern...
resize2fs /dev/vg1/daten
wenn verschluesselt:
resize2fs /dev/mapper/daten.decrypted
Platte austauschen
alte platte raus
defekte platte aus raid entfernen
mdadm --remove /dev/md0 /dev/sdd
wenn man (wie ich) 3 gleiche platten eingebaut hat, wie finde ich jetzt die defekte?
ich weiss, es ist sdd, aber welche physikalische platte ist das?
sdparm -i /dev/sdd ... ST31000340AS 9QJ0W04D ...
oder man verwendet lshal
lshal | less
nun nach der defekten platte, also 'sdd' suchen
dann findet man ein paar zeilen weiter unten etwa sowas:
... storage.serial = 'SATA_ST31000340AS_9QJ0W04D' (string) ...
und hat damit die seriennummer der platte 9QJ0W04D
nun also platte raus...
neue platte rein
Falls noetig Partitionstabelle von platte sda auf neue platte sdb uebertragen:
sfdisk -d /dev/sda | sfdisk /dev/sdb
ich denke allerdings ein raid aus platten-partitionen ist eher sub-optimal!
ACHTUNG: bei platten die bereits als raid in benutzung waren! |
das magig-flag am anfang der raid-partition muss ueberschrieben werden:
dd if=/dev/zero of=/dev/sdb5 bs=1024 count=1000
bzw:
dd if=/dev/zero of=/dev/sdd bs=1024 count=1000
raid-partition zu mdX hinzufuegen bzw. ganzes device:
mdadm /dev/md0 -a /dev/sdb1
bzw:
mdadm /dev/md0 -a /dev/sdd
replication abwarten:
watch 'cat /proc/mdstat'
... [>....................] recovery = 4.1% (40587520/976761408) finish=227.8min ...
Raid-Status
cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sdb5[1] sda5[0] 155999040 blocks [2/2] [UU] unused devices: <none>
ausgabe bei inconsitenz oder fehlender platte:
cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sda5[0] 155999040 blocks [2/1] [U_] unused devices: <none>
mit folgendem kommando kann wird die ausgabe staendig refreshed:
watch cat /proc/mdstat
LVM Snapshot/Backup
erstelle ein backup eines logischen volumes.
dies wird hauptsaechlich zum backup von mysql benutzt. ich fuehre also die
schritte, die innerhalb von mysql benoetigt werden, hier mit auf...
mysql-datenbanken locken damit die files consistent sind:
mysql> FLUSH TABLES WITH READ LOCK
dies kann einen moment dauern.
wenn das kommando durch ist, die mysql-connection offen lassen!
nun:
lvcreate -L16G -s -n dbbackup /dev/vg1/mysqlPartition
dies erzeugt eine kopie der lvm-partition die die datenbanken enthalten.
bei der groesse (-L16G) muss man natuerlich darauf achten dass partition f. die kopie
gross genug ist um die daten in /dev/vg1/mysqlPartition aufzunehmen.
danach haben wir eine kopie unserer partition /dev/vg1/mysqlPartition unter /dev/vg1/dbbackup
zurueck zur datenbank und tabellen frei geben.
falls die DB repliziert ist muss man zusaetzlich noch die log-position sichern:
mysql> SHOW MASTER STATUS; ... mysql> UNLOCK TABLES;
nun kann man ganz gemuetlich die backup-partition mounten und die daten kopieren.
die datenbank laeuft derweil ganz normal weiter...
mount /dev/vg1/dbbackup /mnt/backup cp /mnt/backup/mysql/* /path/to/backups
or whatever you want...
if ready, unmount the partition and destroy it...
umount /mnt/backup lvremove /dev/vg1/dbbackup
thats it! ;-)