Teljes rendszer mentés

A teljes rendszer mentését két részre osztanám. A /home mappa és ezáltal a rendszer felhasználók adatainak a mentése és a / mappa vagyis a teljes rendszer, nem magában foglalva a /home. A mentést mind két esetben a tar parancs segítségével fogjuk elvégezni root felhasználóként.

Lássuk először a /home mappa mentését.

# su
Password:
# tar czpfv homebackup_`date +%Y%m%d`.tar.gz --one-file-system /home/

Az első utasítással root felhasználóra váltunk. Olyan disztribúciókon, ahol a root nincs engedélyezve (pl. Ubuntu és változatai), de a felhasználónak van jogosultásga hozzá, ott használhatjuk a sudo -i, a sudo -s vagy a sudo su parancsok bármelyikét. Következő a tar parancs, a megfelelő paraméterekkel:

  • czpfv - c arhívum készítés, z gzip tömörítéssel, p jogosultságok megtartása, f fájlok arhíválása és v verbose hogy lássuk is mi történik
  • homebackup_`date +%Y%m%d`.tar.gz - az elkészülő mentés neve. A backtick-ek közé tett date +%Y%m%d parancs által vissza adott érték kerül a mentés nevébe, vagyis egy dátum (év, hó és nap - ÉÉÉÉHHNN formátumban)
  • –one-file-system - hatására a mentés csak a mentett mappa fájl rendszerére korlátozódik, nem kerül bele home mappába esetlegesen becsatolt más partició vagy hálózati megosztás
  • /home/ - a mappa aminek a tartalmát menteni szeretnénk

A teljes rendszer mentés egy kicsit több körültekintést igényel. itt szintén a tar parancsot fogjuk használni root felhasználóként, de kihagyva a /dev, a /proc és a /sys mappákat, mivel ezek többnyire virtuális fájl rendszerek illetve a futó kernel adatai.

# su
Password:
# tar czpfv backup_`date +%Y%m%d`.tar.gz --exclude=dev --exclude=mnt --exclude=proc --exclude=sys --exclude=tmp --exclude=/backup_`date +%Y%m%d`.tar.gz /
  • czpfv paraméterek ismét
  • backup_`date +%Y%m%d`.tar.gz szintén a mentési fájl neve
  • a --exclude= paraméterrel tudjuk megadni a parancsnak, hogy mely mappáka és fájlokat hagyjuk ki a mentésből. Az elöbb említett mappákat és a készülő arhív fájlt tehát kihagyjuk.
  • a --one-file-system paramétert tetszés szerint használhatjuk itt is, így kihagyva az esetlegesen becsatolva maradt partíciókat.

Az elkészült tar.gz fájlokat már csak gondosan el kell raknunk.

Teljes rendszer visszaállítás

Tegyük fel, hogy a teljes rendszert kell visszaállítanunk a mentéseinkböl egy új hdd-re. Mivel az új hdd-n nincs semmilyen rendszer, így boot-oljunk be egy Live CD-röl. A rendszer indulása után indítsunk egy terminált. Váltsuk root felhasználóra (sudo -i vagy su), azonosítsuk be az új hdd-t (lsblk vagy fdisk -l) és partícionáljuk meg. Ha nem ismerjük a rendszer felépítését és hogy mi hova volt mount-olva, akkor a tömörített teljes mentés fájlban levő /etc/fstab fájl segíthet. A méretek nem fognak kiderülni, de hogy mi hova volt csatolva, az igen. Példánkban a / alá volt csatolva a teljes rendszer (1.5GB) és a maradék volt a swap partíció.

# sudo -i
# lsblk
NAME  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda   254:0    0    2G  0 disk 
# fdisk /dev/vda

Welcome to fdisk (util-linux 2.25.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x102db5ea.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-4194303, default 2048): 
Last sector, +sectors or +size{K,M,G,T,P} (2048-4194303, default 4194303): +1.5G

Created a new partition 1 of type 'Linux' and of size 1.5 GiB.

Command (m for help): n
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2): 2
First sector (3123200-4194303, default 3123200): 
Last sector, +sectors or +size{K,M,G,T,P} (3123200-4194303, default 4194303): 

Created a new partition 2 of type 'Linux' and of size 523 MiB.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

Ellenőrizzük az elkészült partíciókat és formázzuk meg őket.

# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda    254:0    0    2G  0 disk 
|-vda1 254:1    0  1.5G  0 part 
`-vda2 254:2    0  523M  0 part 
# mkfs -t ext4 /dev/vda1
mke2fs 1.42.12 (29-Aug-2014)
Creating filesystem with 390144 4k blocks and 97536 inodes
Filesystem UUID: ee4186ce-e01d-49b0-b1a4-346b8e7791ab
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done 

# mkswap /dev/vda2
Setting up swapspace version 1, size = 535548 KiB
no label, UUID=fcdb10c4-4c99-459a-9b6f-e8b5a7b99404

Most hogy kész vannak a partíciók csatoljuk fel a rendszer partícióját a /mnt mappa alá.

# mount /dev/vda1 /mnt

Másoljuk a /mnt alá felcsatolt partícióra a teljes mentés fájlunkat és a home mappa mentését, utána indítsuk el a kicsomagolásukat.

# cd /mnt
# ls -la
total 215300
drwxr-xr-x  3 root root      4096 Feb 13 18:10 .
drwxr-xr-x 31 root root       240 Feb 13 17:43 ..
-rw-r--r--  1 root root 220445046 Feb 13 18:10 backup_20160213.tar.gz
-rw-r--r--  1 root root     62742 Feb 13 18:10 homebackup_20160213.tar.gz
drwx------  2 root root     16384 Feb 13 18:02 lost+found
# tar xzpfv backup_20160213.tar.gz
...
# tar xzpfv homebackup_20160213.tar.gz
...

Ezek után készítsük el a mentésnél kihagyott mappákat.

# mkdir dev mnt proc sys tmp

Ha ez is meg van, akkor következhet a GRUB helyreállítása. Ehhez fel kell csatolnunk a live rendszer /dev, /dev/pts, /proc és /sys mappáját a felcsatolt rendszer partíció ugyan ezen mappája alá --bind paraméterrel. A --bind opció lehetővé teszi, hogy a felcsatolt almappa, elérhető legyen mind két helyen, vagyis az eredeti és a cél mappában is.

# mount --bind /dev /mnt/dev 
# mount --bind /dev/pts /mnt/dev/pts 
# mount --bind /proc /mnt/proc 
# mount --bind /sys /mnt/sys

Most futtasunk egy chroot-ot a /mnt mappára, ezzel egy shell indul aminek az adott mappa lesz a gyökere, bezárva őt oda.

# chroot /mnt

Mivel a hhd-nk /dev/vda lett, így futassunk egy grub-install-t rá. Majd töröltessük a device map-ot, ha van és frissítsük a grub-ot.

# grub-install /dev/vda 
Installing for i386-pc platform.
Installation finished. No error reported.
# grub-install --recheck /dev/vda
Installing for i386-pc platform.
Installation finished. No error reported.
# update-grub
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.16.0-4-686-pae
Found initrd image: /boot/initrd.img-3.16.0-4-686-pae
done

Már csak az van hátra, hogy ellenőrizzük hogy az /etc/fstab a partíciókra UUID alapján hivatkozik-e. Ha igen, akkor cseréljük ki az új UUID-re a root és a swap partíció bejegyzésénél is. Az új UUID-t a blkid utasítással kérhetjük le a partícióinkról. Meg tehetnénk azt is, hogy a tune2fs parancsal újra cimkézzük az új partíciókat az fstab-ból kinyert régi UUID-kkel, de most inkább az újjakat használjuk.

# blkid /dev/vda1
/dev/vda1: UUID="ee4186ce-e01d-49b0-b1a4-346b8e7791ab" TYPE="ext4" PARTUUID="102db5ea-01"
# blkid /dev/vda2
/dev/vda2: UUID="edcfac01-51e3-4c8c-b48a-d624741549d5" TYPE="swap" PARTUUID="102db5ea-02"

Most hogy tudjuk az új UUID-ket, ellenőrizzük a /etc/fstab-ot.

# grep UUID /etc/fstab 
UUID=3dc86efc-d739-4073-a678-afad59abf1d0 /               ext4    errors=remount-ro 0       1
UUID=bd7677be-89cd-4bf2-afa1-9f46f64a30a8 none            swap    sw              0       0

Cseréljük ki a régi UUID-t az újjakra és ellenőrizzük.

# sed -i s/"3dc86efc-d739-4073-a678-afad59abf1d0"/"ee4186ce-e01d-49b0-b1a4-346b8e7791ab"/ /etc/fstab 
# sed -i s/"bd7677be-89cd-4bf2-afa1-9f46f64a30a8"/"edcfac01-51e3-4c8c-b48a-d624741549d5"/ /etc/fstab 
# grep UUID /etc/fstab 
UUID=ee4186ce-e01d-49b0-b1a4-346b8e7791ab /               ext4    errors=remount-ro 0       1
UUID=edcfac01-51e3-4c8c-b48a-d624741549d5 none            swap    sw              0       0

Ha mindent jól csináltunk, akkor már csak a /dev/pts, /dev, /proc és a /sys mappák lecsatolása és az újraindítás van hátra. A biztonság kedvéért azért indítsunk egy sync parancsot, hogy biztos kiírodjanak az adatok a cache-ből.

# umount /mnt/dev/pts
# umount /mnt/dev    
# umount /mnt/proc
# umount /mnt/sys 
# sync
# reboot

Ilyen egyszerű az egész :)