Linux rendszer teljes mentése és visszaállítása (tar,gzip)
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 ésv
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 :)