Linux 系統的備份、恢復
刪庫跑路的事常常聽說,不過,這只能是個調侃的話題,真正的工作中可不能這么干,否則,庫是刪了,路怕是跑不了了。
所以,備份很重要!!!!!
tar 命令
副本(本機備份整個系統,以后還原還是還原到本機)
注意根目錄下要有充足的可用空間用于備份。
- cd /
- #tar.gz格式
- tar cvpzf system_backup.tar.gz / --exclude=/proc --exclude=/lost+found --exclude=/system_backup.tar.gz --exclude=/mnt --exclude=/sys
- #tar.bz2格式
- tar cvpjf system_backup.tar.bz2 / --exclude=/proc --exclude=/lost+found --exclude=/system_backup.tar.bz2 --exclude=/mnt --exclude=/sys
- # 恢復系統
- cd /
- #上傳文件到根目錄下
- tar xvpfz system_backup.tar.gz -C /
- 或
- tar xvpfj system_backup.tar.bz2 -C /
- #創(chuàng)建備份時排除的目錄
- mkdir proc
- mkdir lost+found
- mkdir mnt
- mkdir sys
- /proc 權限:文件所有者:root群組:root 所有者:讀取 執(zhí)行 群組:讀取 執(zhí)行 其它:讀取 執(zhí)行
- /lost+found 權限:文件所有者:root群組:root 所有者:讀取 寫入 執(zhí)行 群組:讀取 執(zhí)行 其它:讀取 執(zhí)行
- /mnt 權限:文件所有者:root群組:root 所有者:讀取 寫入 執(zhí)行 群組:讀取 執(zhí)行 其它:讀取 執(zhí)行
- /sys 權限:文件所有者:root群組:root 所有者:讀取 寫入 執(zhí)行 群組:讀取 執(zhí)行 其它:讀取 執(zhí)行
恢復完成重啟以后,所以的事情都會和你備份的時候一模一樣。
鏡像(本機備份系統,還原到新主機上)
1.檢查系統版本,在目標機上安裝一樣版本的系統(最簡安裝即可),分區(qū)格式,類型也一樣(我沒試過不一樣的情況,不知道能否成功)
- lsb_release -a
- uname -a
- df -Th
- free -h
2.備份源系統
- # 因為目標機和源主機硬件配置不同,所以排除dev,tmp;再適當增加你要排除的文件,如:--exclude=/root/*.bz2
- # 這里再mnt下有充足空間,所以保存到mnt下。
- cd /
- tar cvpzf /mnt/system_backup.tar.gz / --exclude=/mnt/system_backup.tar.gz \
- --exclude=/proc --exclude=/lost+found --exclude=/mnt --exclude=/sys --exclude=/dev \
- --exclude=/tmp --exclude=/media
- # 上傳到目標主機
- scp /mnt/system_backup.tar.gz root@192.168.0.166:/mnt
3,在目標機上用ISO、LiveCD等啟動,掛載磁盤(一般會自動掛載到/media文件夾)
- sudo -s
- cd /media/<對應的uuid號>
- # 備份重要配置文件/boot/gurb/gurb.cfg /etc/fstab
- 記錄里面的UUID,
- # 刪除重復文件
- # 除了上面?zhèn)浞菹到y時排除的一些文件夾外,比如說dev mnt media sys這些文件夾,其他全部刪除。
- rm -rf root home usr lib lib64 etc var bin sbin opt boot run selinux vmlinuz initrd.img
- # 還原備份
- mount /dev/vda1 /mnt/1
- # 這里注意千萬不要寫/目錄,會把現有的系統搞掛!?。撌菕燧d的目錄
- tar xvpfz system_backup.tar.gz -C /mnt/1
- cd /mnt/1 #此時你可以看到根目錄的結構,但是編輯fstab文件發(fā)現是現有系統的fstab
- chroot ./ #執(zhí)行chroot后會以./目錄為根目錄,這時編輯的文件就是真正的目標源文件了。
還原后修改/etc/fstab里的UUID為剛剛備份的文件里面的信息,注意分區(qū)格式也要對應。修改/boot/gurb/gurb.cfg里的UUID為剛剛備份的文件里面的信息。修改網卡、IP配置文件,以防無法分配IP。(如果是虛擬機記得添加網卡,配置中等性能的顯卡)如果有依賴于原有平臺的服務,如內建NTP,Agent等監(jiān)控程序;關閉服務,關閉開機自啟;Ubuntu:在命令行輸入runleve可以查看當前運行級別,一般默認是2查看/etc/rc2.d目錄中的S開頭的服務都是會開機自動運行的;里面是軟鏈接,想添加的話自己建一個鏈接文件就可以,S代表start,后面數字是啟動順序,刪除軟鏈接。同時刪除/etc/init.d/下對應的腳本。
- vim /etc/init.d/rc.local
Centos:用systemctl
完成上述步驟后
- exit #退出chroot
- cd ~
- umount /mnt/1
- # 一切完成后就可以重啟了,不出意外就正常啟動系統了(啟動后原來安裝系統時設置的賬戶等全部消失;賬戶和源主機一致)。
若開機Grub提示“boot error 15 :Error 15 file not found”解決方法:請檢查GRUB相關文件的內核文件所在位置。通常與/boot分區(qū)有關。 若開機Grub提示“dracut:dono't how to hand root=f078”解決方法:將root=UUID改成root=/dev/sdaX這種格式。
若開機系統提示/usr/libexec/gconf-sanity-check-2退出狀態(tài)256的解決
解決方法:chmod 777 /tmp
rsync命令
注意目標分區(qū)的格式最好是NTFS、FAT、EXT之類的格式,避免遇到大于4G的文件無法備份的問題。
- #最好有其他分區(qū)或外接存儲設備,掛載好,df -lh看掛載點。
- #備份
- rsync -Pa / /media/usb/backup_20170410 --exclude=/media/* --exclude=/sys/* --exclude=/proc/* --exclude=/mnt/* --exclude=/tmp/*
- #恢復
- rsync -Pa /media/usb/backup_20170410 /
dd命令
dd命令屬于扇區(qū)克隆,目標分區(qū)要比備份分區(qū)要大,即使沒有使用的空間也會被原樣克隆下來,會比較慢。
- #備份
- df -h #查看系統所在分區(qū)
- dd if=/dev/sda1 of=/dev/sdb3 #備份sda1到sdb3中
- #恢復
- dd if=/dev/sdb3 of=/dev/sda1 #恢復sdb3到sdb1中