Konverze disku na RAID
Z KHnetWiki
(Není zobrazeno 5 mezilehlých verzí.) | |||
Řádka 1: | Řádka 1: | ||
- | + | Určení: linux guru, a spol.<br><br> | |
- | + | Testováno na ArchLinux 0.8 (beta2), jádro 2.6.20 | |
- | + | ||
- | + | ||
- | * | + | Tento článek popisuje instalaci druhého do funkčního systému s jedním diskem (a jeho konverzi na RAID1 - mirroring).<br> |
- | * | + | Nezapomeň: <b>zálohuj, zálohuj, zálohuj ...</b> byl jsi varován.<br> |
- | * cfdisk /dev/< | + | |
+ | * Primární disk, poznamenej si rozdělení. Ukázka je z programu cfdisk. | ||
+ | * POZNÁMKA: nic neměň... QUIT. | ||
+ | * cfdisk /dev/<yourOLDdevice> | ||
<pre> | <pre> | ||
- | + | sda1 Boot, NC Primary Linux ext2 41.13 | |
- | + | sda2 Primary Linux swap / Solaris 271.44 | |
- | + | sda3 Primary Linux ext3 82030.72 | |
</pre> | </pre> | ||
- | * | + | * Sekundární disk, rozděl ho stejně. |
- | * cfdisk /dev/< | + | * cfdisk /dev/<yourNEWdevice> |
<pre> | <pre> | ||
- | + | sdb1 Boot Primary Linux raid autodetect 41.13 | |
- | + | sdb2 Primary Linux raid autodetect 271.44 | |
- | + | sdb3 Primary Linux raid autodetect 82030.72 | |
- | + | Rada --> Linux raid autodetect je typ: FD | |
</pre> | </pre> | ||
- | * | + | * vytvoř md zařízení |
<pre> | <pre> | ||
mknod /dev/md0 b 9 0 | mknod /dev/md0 b 9 0 | ||
mknod /dev/md1 b 9 1 | mknod /dev/md1 b 9 1 | ||
mknod /dev/md2 b 9 2 | mknod /dev/md2 b 9 2 | ||
- | |||
... | ... | ||
</pre> | </pre> | ||
- | * | + | * vytvoř raid pole |
<pre> | <pre> | ||
- | [root@svn ~]# mdadm --create /dev/md0 --level=1 --raid-devices=2 missing /dev/< | + | [root@svn ~]# mdadm --create /dev/md0 --level=1 --raid-devices=2 missing /dev/<yourNEWdevice-partitionA> |
- | mdadm: array /dev/md0 started. | + | mdadm: array /dev/md0 started. |
- | [root@svn ~]# mdadm --create /dev/md1 --level 1 --raid-devices=2 missing /dev/< | + | [root@svn ~]# mdadm --create /dev/md1 --level 1 --raid-devices=2 missing /dev/<yourNEWdevice-partitionB> |
- | mdadm: array /dev/md1 started. | + | mdadm: array /dev/md1 started. |
- | [root@svn ~]# mdadm --create /dev/md2 --level 1 --raid-devices=2 missing /dev/< | + | [root@svn ~]# mdadm --create /dev/md2 --level 1 --raid-devices=2 missing /dev/<yourNEWdevice-partitionC> |
- | mdadm: array /dev/md2 started. | + | mdadm: array /dev/md2 started. |
... | ... | ||
- | + | Může se tě zeptat: 'Continue creating array? y' pokud je disk už naformátován. | |
[root@svn ~]# | [root@svn ~]# | ||
</pre> | </pre> | ||
- | * | + | * Zkontroluj /proc/mdstat |
- | * | + | * Všechny pole budou degradovány. Přeci jenom jim vždy jedna partition chybí. |
<pre> | <pre> | ||
[root@svn ~]# cat /proc/mdstat | [root@svn ~]# cat /proc/mdstat | ||
Řádka 62: | Řádka 62: | ||
</pre> | </pre> | ||
- | * | + | * vytvoř souborový systém |
- | * | + | * je relativně fuk, jaký použiješ. Jenom na to musíš myslet a upravit na to mkinitcpio (viz dále). |
- | * | + | * POZNÁMKA: v příkladu je /boot ext2, / je ext3. |
<pre> | <pre> | ||
- | [root@svn ~]# mke2fs | + | [root@svn ~]# |
- | + | mke2fs /dev/md0 | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
* mkswap | * mkswap | ||
- | [root@svn ~]# mkswap /dev/md1 | + | [root@svn ~]# |
- | + | mkswap /dev/md1 | |
- | + | ||
* mkfs.ext3 for / | * mkfs.ext3 for / | ||
- | [root@svn ~]# mkfs.ext3 -j /dev/md2 | + | [root@svn ~]# |
- | + | mkfs.ext3 -j /dev/md2 | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
[root@svn ~]# | [root@svn ~]# | ||
+ | atakdále pro všechny raid partition. | ||
</pre> | </pre> | ||
- | * | + | * Namontuj a zkopíruj data. |
<pre> | <pre> | ||
- | # mount new raid / | + | # mount new raid / (v příkladu md2) |
[root@svn ~]# mount /dev/md<where you assigned-/-number> /mnt/ | [root@svn ~]# mount /dev/md<where you assigned-/-number> /mnt/ | ||
- | # mount new raid /boot | + | |
+ | # mount new raid /boot (v příkladu md0) | ||
[root@svn ~]# mkdir /mnt/boot | [root@svn ~]# mkdir /mnt/boot | ||
[root@svn ~]# mount /dev/md<where you assigned-/boot-number> /mnt/boot/ | [root@svn ~]# mount /dev/md<where you assigned-/boot-number> /mnt/boot/ | ||
- | + | ||
- | + | # pokračuj ... všechny partition na starém disku musí mít "obraz" v raid partition. | |
- | ... | + | |
# copy / to new /raid/ | # copy / to new /raid/ | ||
[root@svn ~]# cd /mnt | [root@svn ~]# cd /mnt | ||
- | [root@svn mnt]# tar -C / -clspf - | + | [root@svn mnt]# tar -C / -clspf - <seznam všech adresářů root partition> | tar -xlspvf - |
+ | (úprava, protože kopírování najednou [tečka] nějak nejede. Tj. /bin /dev /etc atd. (vše kromě sys, proc a samostatných oddílů) | ||
+ | V podstatě to lze udělat i midnight commanderem. Ale radši to nedoporučuji. | ||
+ | |||
# copy /boot to new /raid/boot | # copy /boot to new /raid/boot | ||
cd /mnt/boot | cd /mnt/boot | ||
[root@svn boot]# tar -C /boot -clspf - . | tar -xlspvf - | [root@svn boot]# tar -C /boot -clspf - . | tar -xlspvf - | ||
- | # | + | # všechny ostatní partition obdobně. |
- | + | ||
- | + | ||
</pre> | </pre> | ||
- | * NOTE: <b> | + | * NOTE: <b>KRITICKÝ KROK</b> (tedy ne že by ostatní byly fuk) |
- | * | + | * edituj /mnt/boot/grub/menu.lst |
- | * | + | * bude to vypadat asi takto: |
- | * | + | * přidej "fallback 1" (což znamená, že pokud se nepovede nabootovat z prvního disku, zkusí druhý) |
<pre> | <pre> | ||
Řádka 155: | Řádka 119: | ||
title Arch Linux [Disc0: /boot/vmlinuz26] | title Arch Linux [Disc0: /boot/vmlinuz26] | ||
root (hd0,0) | root (hd0,0) | ||
- | + | kernel /vmlinuz26 root=/dev/md<root partition - md2> md=<všechny md zařízení, ovšem POUZE nové partition> ro | |
- | kernel /vmlinuz26 root=/dev/md< | + | #md=0,/dev/sdb1 md=1,/dev/sdb2 atd |
- | md=< | + | initrd /kernel26.img |
- | + | ||
- | + | ||
# (1) Arch Linux | # (1) Arch Linux | ||
title Arch Linux [Disc1: /boot/vmlinuz26] | title Arch Linux [Disc1: /boot/vmlinuz26] | ||
root (hd1,0) | root (hd1,0) | ||
- | #kernel | + | #kernel - to samé, co předchozí blok |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
----- snip ----- | ----- snip ----- | ||
</pre> | </pre> | ||
- | * | + | * uprav /mnt/etc/fstab - montovat se budou již MD zařízení |
- | + | ||
<pre> | <pre> | ||
- | |||
/dev/md2 / ext3 defaults 0 1 | /dev/md2 / ext3 defaults 0 1 | ||
- | |||
/dev/md0 /boot ext2 defaults 0 1 | /dev/md0 /boot ext2 defaults 0 1 | ||
- | |||
/dev/md1 swap swap defaults 0 0 | /dev/md1 swap swap defaults 0 0 | ||
+ | #atd ... | ||
</pre> | </pre> | ||
- | * | + | * přimontuj /proc a /sys na nový raid |
<pre> | <pre> | ||
mount --bind /sys /mnt/sys | mount --bind /sys /mnt/sys | ||
Řádka 190: | Řádka 145: | ||
</pre> | </pre> | ||
- | * chroot | + | * chroot na raid a kompilace initrd |
<pre> | <pre> | ||
chroot /mnt | chroot /mnt | ||
- | # | + | # edituj /etc/mkinitcpio.conf - přidej 'raid' do proměnné HOOKS před 'autodetect' |
+ | # možná budeš muset přidat i moduly filesystému, pokud máš něco jiného než ext2 nebo ext3. Také viz nápověda v souboru. | ||
mkinitcpio -g /boot/kernel26.img | mkinitcpio -g /boot/kernel26.img | ||
- | + | /etc/start_udev (případně odinstalace -Rd a instalace pacmanem) | |
- | + | ||
exit | exit | ||
</pre> | </pre> | ||
- | * | + | * Instalace grub na nový disk. Čísla disků musí souhlasit, což je někdy problém. (hd0,0) je /boot partition prvního disku (starého) a (hd1,0) nového, již v raidu zapojeného. Logicky (hd1) značí MBR daného disku. |
+ | Grub to čísluje tak, jak to bios nadetekoval. Většinou v pořadí PATA, SATA. Pokud na PATA není hardisk, tak to tam prostě není. | ||
<pre> | <pre> | ||
[root@svn /]#grub | [root@svn /]#grub | ||
Řádka 219: | Řádka 176: | ||
[root@svn /]# | [root@svn /]# | ||
</pre> | </pre> | ||
+ | Důležité je, aby nehlásil chyby, a končil succeeded. | ||
- | * | + | * restartuj počítač. <b>NUTNÉ</b> je bootovat z nového disku. Budeš muset sáhnout do biosu. |
<pre> | <pre> | ||
/sbin/reboot | /sbin/reboot | ||
</pre> | </pre> | ||
- | * cross fingers ;) | + | * drž si palce, aneb cross fingers ;) |
- | * | + | * nabootuje-li počítač správně, MUSÍŠ přidat zbylé (ze starého) partition do RAIDu. |
<pre> | <pre> | ||
- | [root@svn ~]# mdadm /dev/md0 -a /dev/<old-disk-partitionA> | + | [root@svn ~]# mdadm /dev/md0 -a /dev/<old-disk-partitionA> (/dev/sda1) |
- | mdadm: hot added /dev/<old-disk-partitionA> | + | mdadm: hot added /dev/<old-disk-partitionA> |
[root@svn ~]# mdadm /dev/md1 -a /dev/<old-disk-partitionB> | [root@svn ~]# mdadm /dev/md1 -a /dev/<old-disk-partitionB> | ||
- | mdadm: hot added /dev/<old-disk-partitionB> | + | mdadm: hot added /dev/<old-disk-partitionB> |
[root@svn ~]# mdadm /dev/md2 -a /dev/<old-disk-partitionC> | [root@svn ~]# mdadm /dev/md2 -a /dev/<old-disk-partitionC> | ||
- | mdadm: hot added /dev/<old-disk-partitionC> | + | mdadm: hot added /dev/<old-disk-partitionC> |
... | ... | ||
[root@svn ~] | [root@svn ~] | ||
</pre> | </pre> | ||
+ | Hlavně to nespleť ... | ||
- | * | + | * Ověř to ... cat /proc/mdstat |
- | * | + | * A počkej si na zesynchronizování jednotlivých partition. |
<pre> | <pre> | ||
[root@svn ~]# cat /proc/mdstat | [root@svn ~]# cat /proc/mdstat | ||
Řádka 256: | Řádka 215: | ||
</pre> | </pre> | ||
- | * | + | * dokonči konfiguraci grubu |
<pre> | <pre> | ||
----- snip ----- | ----- snip ----- | ||
Řádka 262: | Řádka 221: | ||
title Arch Linux [Disc0: /boot/vmlinuz26] | title Arch Linux [Disc0: /boot/vmlinuz26] | ||
root (hd0,0) | root (hd0,0) | ||
- | + | kernel /vmlinuz26 root=/dev/md<root partition - md2> md=<všechny md zařízení, KOMPLET> ro | |
- | kernel /vmlinuz26 root=/dev/md< | + | #md=0,/dev/sdb1,/dev/sda1 md=1,/dev/sdb2,/dev/sda1 atd |
- | md=< | + | |
- | + | ||
- | + | ||
# (1) Arch Linux | # (1) Arch Linux | ||
title Arch Linux [Disc1: /boot/vmlinuz26] | title Arch Linux [Disc1: /boot/vmlinuz26] | ||
root (hd1,0) | root (hd1,0) | ||
- | #kernel | + | #kernel - to samé, co předchozí blok |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
----- snip ----- | ----- snip ----- | ||
</pre> | </pre> | ||
- | * | + | * dokončit initrd |
<pre> | <pre> | ||
- | + | edituj /etc/mkinitcpio.conf | |
- | + | přesuň 'raid' hook za autodetect a překompiluj initrd | |
mkinitpcio -g /boot/kernel26.img | mkinitpcio -g /boot/kernel26.img | ||
</pre> | </pre> | ||
- | * | + | * Vrať zpět BIOS, bootovat se může již normálně. |
- | + | ||
+ | * Toť vše. Pokud se na nic nezapomene, jede to krásně. | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | Backup the MBR which contains the boot code and partition table: | ||
+ | |||
+ | # dd if=/dev/sd''X'' of=/path/to/backup/mbr_backup bs=512 count=1 | ||
+ | |||
+ | Only 446 bytes of the MBR contain boot code, the next 64 contain the partition table. If you do not want to overwrite your partition table when restoring, it is strongly advised to backup only the MBR boot code: | ||
+ | |||
+ | # dd if=/dev/sd''X'' of=/path/to/backup/bootcode_backup bs=446 count=1 | ||
+ | |||
+ | |||
+ | This command also restores the partition table, so be careful of overwriting a modified partition table with the old one. It '''will''' mess up your system. | ||
+ | |||
+ | # dd if=/path/to/backup/first-sectors of=/dev/sdX bs=512 count=1 | ||
+ | |||
+ | A safer way is to restore only the MBR boot code use: | ||
+ | |||
+ | # dd if=/path/to/backup/mbr-boot-code of=/dev/sdX bs=446 count=1 | ||
+ | |||
+ | [[Kategorie:Howto]][[Kategorie:System]] |
Aktuální verze z 4. 4. 2014, 08:11
Určení: linux guru, a spol.
Testováno na ArchLinux 0.8 (beta2), jádro 2.6.20
Tento článek popisuje instalaci druhého do funkčního systému s jedním diskem (a jeho konverzi na RAID1 - mirroring).
Nezapomeň: zálohuj, zálohuj, zálohuj ... byl jsi varován.
- Primární disk, poznamenej si rozdělení. Ukázka je z programu cfdisk.
- POZNÁMKA: nic neměň... QUIT.
- cfdisk /dev/<yourOLDdevice>
sda1 Boot, NC Primary Linux ext2 41.13 sda2 Primary Linux swap / Solaris 271.44 sda3 Primary Linux ext3 82030.72
- Sekundární disk, rozděl ho stejně.
- cfdisk /dev/<yourNEWdevice>
sdb1 Boot Primary Linux raid autodetect 41.13 sdb2 Primary Linux raid autodetect 271.44 sdb3 Primary Linux raid autodetect 82030.72 Rada --> Linux raid autodetect je typ: FD
- vytvoř md zařízení
mknod /dev/md0 b 9 0 mknod /dev/md1 b 9 1 mknod /dev/md2 b 9 2 ...
- vytvoř raid pole
[root@svn ~]# mdadm --create /dev/md0 --level=1 --raid-devices=2 missing /dev/<yourNEWdevice-partitionA> mdadm: array /dev/md0 started. [root@svn ~]# mdadm --create /dev/md1 --level 1 --raid-devices=2 missing /dev/<yourNEWdevice-partitionB> mdadm: array /dev/md1 started. [root@svn ~]# mdadm --create /dev/md2 --level 1 --raid-devices=2 missing /dev/<yourNEWdevice-partitionC> mdadm: array /dev/md2 started. ... Může se tě zeptat: 'Continue creating array? y' pokud je disk už naformátován. [root@svn ~]#
- Zkontroluj /proc/mdstat
- Všechny pole budou degradovány. Přeci jenom jim vždy jedna partition chybí.
[root@svn ~]# cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid5] [multipath] [raid6] [raid10] md2 : active raid1 sdb3[1] 80108032 blocks [2/1] [_U] md1 : active raid1 sdb2[1] 264960 blocks [2/1] [_U] md0 : active raid1 sdb1[1] 40064 blocks [2/1] [_U] unused devices: <none> [root@svn ~]#
- vytvoř souborový systém
- je relativně fuk, jaký použiješ. Jenom na to musíš myslet a upravit na to mkinitcpio (viz dále).
- POZNÁMKA: v příkladu je /boot ext2, / je ext3.
[root@svn ~]# mke2fs /dev/md0 * mkswap [root@svn ~]# mkswap /dev/md1 * mkfs.ext3 for / [root@svn ~]# mkfs.ext3 -j /dev/md2 [root@svn ~]# atakdále pro všechny raid partition.
- Namontuj a zkopíruj data.
# mount new raid / (v příkladu md2) [root@svn ~]# mount /dev/md<where you assigned-/-number> /mnt/ # mount new raid /boot (v příkladu md0) [root@svn ~]# mkdir /mnt/boot [root@svn ~]# mount /dev/md<where you assigned-/boot-number> /mnt/boot/ # pokračuj ... všechny partition na starém disku musí mít "obraz" v raid partition. # copy / to new /raid/ [root@svn ~]# cd /mnt [root@svn mnt]# tar -C / -clspf - <seznam všech adresářů root partition> | tar -xlspvf - (úprava, protože kopírování najednou [tečka] nějak nejede. Tj. /bin /dev /etc atd. (vše kromě sys, proc a samostatných oddílů) V podstatě to lze udělat i midnight commanderem. Ale radši to nedoporučuji. # copy /boot to new /raid/boot cd /mnt/boot [root@svn boot]# tar -C /boot -clspf - . | tar -xlspvf - # všechny ostatní partition obdobně.
- NOTE: KRITICKÝ KROK (tedy ne že by ostatní byly fuk)
- edituj /mnt/boot/grub/menu.lst
- bude to vypadat asi takto:
- přidej "fallback 1" (což znamená, že pokud se nepovede nabootovat z prvního disku, zkusí druhý)
----- snip ----- default 0 color light-blue/black light-cyan/blue ## fallback disc1 fallback 1 # (0) Arch Linux title Arch Linux [Disc0: /boot/vmlinuz26] root (hd0,0) kernel /vmlinuz26 root=/dev/md<root partition - md2> md=<všechny md zařízení, ovšem POUZE nové partition> ro #md=0,/dev/sdb1 md=1,/dev/sdb2 atd initrd /kernel26.img # (1) Arch Linux title Arch Linux [Disc1: /boot/vmlinuz26] root (hd1,0) #kernel - to samé, co předchozí blok ----- snip -----
- uprav /mnt/etc/fstab - montovat se budou již MD zařízení
/dev/md2 / ext3 defaults 0 1 /dev/md0 /boot ext2 defaults 0 1 /dev/md1 swap swap defaults 0 0 #atd ...
- přimontuj /proc a /sys na nový raid
mount --bind /sys /mnt/sys mound --bind /proc /mnt/proc
- chroot na raid a kompilace initrd
chroot /mnt # edituj /etc/mkinitcpio.conf - přidej 'raid' do proměnné HOOKS před 'autodetect' # možná budeš muset přidat i moduly filesystému, pokud máš něco jiného než ext2 nebo ext3. Také viz nápověda v souboru. mkinitcpio -g /boot/kernel26.img /etc/start_udev (případně odinstalace -Rd a instalace pacmanem) exit
- Instalace grub na nový disk. Čísla disků musí souhlasit, což je někdy problém. (hd0,0) je /boot partition prvního disku (starého) a (hd1,0) nového, již v raidu zapojeného. Logicky (hd1) značí MBR daného disku.
Grub to čísluje tak, jak to bios nadetekoval. Většinou v pořadí PATA, SATA. Pokud na PATA není hardisk, tak to tam prostě není.
[root@svn /]#grub grub> root (hd1,0) Filesystem type is ext2fs, partition type 0xfd grub> setup (hd1) Checking if "/boot/grub/stage1" exists... yes Checking if "/boot/grub/stage2" exists... yes Checking if "/boot/grub/e2fs_stage1_5" exists... yes Running "embed /boot/grub/e2fs_stage1_5 (hd1)"... 16 sectors are embedded. succeeded Running "install /boot/grub/stage1 (hd1) (hd1)1+16 p (hd1,0)/boot/grub/stage2 /boot/grub/grub.conf"... succeeded Done grub>quit [root@svn /]#
Důležité je, aby nehlásil chyby, a končil succeeded.
- restartuj počítač. NUTNÉ je bootovat z nového disku. Budeš muset sáhnout do biosu.
/sbin/reboot
- drž si palce, aneb cross fingers ;)
- nabootuje-li počítač správně, MUSÍŠ přidat zbylé (ze starého) partition do RAIDu.
[root@svn ~]# mdadm /dev/md0 -a /dev/<old-disk-partitionA> (/dev/sda1) mdadm: hot added /dev/<old-disk-partitionA> [root@svn ~]# mdadm /dev/md1 -a /dev/<old-disk-partitionB> mdadm: hot added /dev/<old-disk-partitionB> [root@svn ~]# mdadm /dev/md2 -a /dev/<old-disk-partitionC> mdadm: hot added /dev/<old-disk-partitionC> ... [root@svn ~]
Hlavně to nespleť ...
- Ověř to ... cat /proc/mdstat
- A počkej si na zesynchronizování jednotlivých partition.
[root@svn ~]# cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid5] [multipath] [raid6] [raid10] md1 : active raid1 sda2[0] sdb2[1] 264960 blocks [2/2] [UU] md2 : active raid1 sda3[2] sdb3[1] 80108032 blocks [2/1] [_U] [>....................] recovery = 1.2% (1002176/80108032) finish=42.0min speed=31318K/sec md0 : active raid1 sda1[0] sdb1[1] 40064 blocks [2/2] [UU] unused devices: <none> [root@svn ~]#
- dokonči konfiguraci grubu
----- snip ----- # (0) Arch Linux title Arch Linux [Disc0: /boot/vmlinuz26] root (hd0,0) kernel /vmlinuz26 root=/dev/md<root partition - md2> md=<všechny md zařízení, KOMPLET> ro #md=0,/dev/sdb1,/dev/sda1 md=1,/dev/sdb2,/dev/sda1 atd # (1) Arch Linux title Arch Linux [Disc1: /boot/vmlinuz26] root (hd1,0) #kernel - to samé, co předchozí blok ----- snip -----
- dokončit initrd
edituj /etc/mkinitcpio.conf přesuň 'raid' hook za autodetect a překompiluj initrd mkinitpcio -g /boot/kernel26.img
- Vrať zpět BIOS, bootovat se může již normálně.
- Toť vše. Pokud se na nic nezapomene, jede to krásně.
Backup the MBR which contains the boot code and partition table:
# dd if=/dev/sdX of=/path/to/backup/mbr_backup bs=512 count=1
Only 446 bytes of the MBR contain boot code, the next 64 contain the partition table. If you do not want to overwrite your partition table when restoring, it is strongly advised to backup only the MBR boot code:
# dd if=/dev/sdX of=/path/to/backup/bootcode_backup bs=446 count=1
This command also restores the partition table, so be careful of overwriting a modified partition table with the old one. It will mess up your system.
# dd if=/path/to/backup/first-sectors of=/dev/sdX bs=512 count=1
A safer way is to restore only the MBR boot code use:
# dd if=/path/to/backup/mbr-boot-code of=/dev/sdX bs=446 count=1