概述
1.當我們配置系統和環境後,要備份或則克隆到其他硬盤上,該怎麼做呢?下面介紹一下tar方法。我們都知道的Linux系統是萬物皆文件。那麼系統當然也可以把它當文件打包,tar是linux下的一個打包工具,下面用的ubuntu系統做示例,看看怎麼操作吧。
一,系統備份
參考自此篇文章:https://help.ubuntu.com/community/BackupYourSystem/TAR
1.去到你的系統的根目錄下
cd /
2.切換到根用戶,或者用su指令
su root
3.備份系統
tar -cvpzf backup.tar.gz --exclude=/backup.tar.gz --one-file-system /
解釋一下這些參數:
tar - 是創建存檔的命令。緊接着由每個字母修改,下面將對每個字母進行說明。
c - 創建新的備份存檔。
v - 詳細模式,tar將打印它在屏幕上所做的事情。
p - 保留存檔中放置的文件的權限以便以後恢復。
z - 使用'gzip'壓縮備份文件以使其更小。
f <filename> - 指定存儲備份的位置,backup.tar.gz是此示例中使用的文件名。它將存儲在當前工作目錄中,即使用cd命令時設置的目錄。
--exclude = /example/path - 此模型後面的選項指示tar 不要備份哪些目錄。我們不想備份所有內容,因爲某些目錄不是很有用。第一個排除規則指示tar不要自行備份,這對於避免操作期間的錯誤很重要。
--one-file-system - 不要在不同的文件系統上包含文件。如果您希望其他文件系統(例如/ home分區或安裝在/ media備份中的外部介質),您需要單獨備份它們,或省略此標誌。如果省略此標誌,則需要添加幾個--exclude =參數以避免您不想要的文件系統。這些將是root中的/proc,/sys,/mnt,/media,/run和/dev目錄。/proc和/sys是虛擬文件系統,它將窗口提供給正在運行的內核的變量,因此您不希望嘗試備份或還原它們。 /dev是一個tmpfs,其內容由udev動態創建和刪除,因此您也不想備份或恢復它。同樣,/run是一個tmpfs,它保存有關正在運行的系統的不需要備份的變量。
執行完成後,可能會出現一些提示或錯誤,“tar:Error exit from previous errors”或文件已經更改之類的消息,可以忽略它。
然後把backup.tar.gz這個備份文件複製到你的硬盤U盤。
2.爲恢復到新硬盤,做準備
1.首先備份一下UUID
sudo blkid
記錄一下這些信息,我的是這樣的,備份下來後面會用到
/dev/sda1: UUID="6815-BB32" TYPE="vfat" PARTUUID="e8860503-01"
/dev/sda2: UUID="0a93b854-4bb1-4e95-8805-72839b44d8ce" TYPE="ext4" PARTUUID="e8860503-03"
/dev/sda3: UUID="55e55928-707f-4109-b482-e95f8887ad75" TYPE="swap" PARTUUID="e8860503-05"
備份一下硬盤掛載信息
df -h
可見我的sda2是掛載在boot/efi下面的,到時候恢復也要創建這個目錄並把sda2上掛載上去
udev 3,9G 0 3,9G 0% /dev
tmpfs 795M 9,3M 786M 2% /run
/dev/sda2 109G 31G 73G 30% /
tmpfs 3,9G 176K 3,9G 1% /dev/shm
tmpfs 5,0M 4,0K 5,0M 1% /run/lock
tmpfs 3,9G 0 3,9G 0% /sys/fs/cgroup
/dev/sda1 511M 1,2M 510M 1% /boot/efi
tmpfs 795M 52K 795M 1% /run/user/1000
2.備份一下,硬盤分區格式及大小
sudo fdisk -l
得到,備份記錄下來,後面會用到
Disk /dev/sda: 119,2 GiB, 128035676160 bytes, 250069680 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: A3E432CA-5547-4E0D-839D-7C30FC6167C9
Device Start End Sectors Size Type
/dev/sda1 2048 1050623 1048576 512M EFI System
/dev/sda2 1050624 233359359 232308736 110,8G Linux filesystem
/dev/sda3 233359360 250068991 16709632 8G Linux swap
3.用live-cd啓動ubuntu,也就是一個linux的啓動盤,開機時選試用ubuntu(try ubuntu,一般是第一個),(系統盤的製作可以在網上查閱,這裏不說)
打開終端,對新的硬盤進行分區和格式化,查看硬盤的標號,一般是sda
sudo fdisk -l
然後用fdisk分區
sudo fdisk /dev/sda
Welcome to fdisk (util-linux 2.27.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help):
輸入d,把原有的分區都刪除掉,然後輸入p查看分區
Disk /dev/sda: 119,2 GiB, 128035676160 bytes, 250069680 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: A3E432CA-5547-4E0D-839D-7C30FC6167C9
Device Start End Sectors Size Type
然後新建分區,輸入n,分區號和大小都要和之前備份的那個一樣,重複3次後是這樣的
Device Start End Sectors Size Type
/dev/sda1 2048 1050623 1048576 512M Linux filesystem
/dev/sda2 1050624 233359359 232308736 110,8G Linux filesystem
/dev/sda3 233359360 250068991 16709632 8G Linux filesystem
對sda1分區類型進行更改,輸入t,選1,輸入1,就是linux efi類型了,全部類型可以在輸入t後輸入l查看。看着對應的來就行了。
對sda2分區類型進行更改,輸入t,選2,輸入83,Linux文件系統類型
對sda3分區類型進行更改,輸入t,選3,輸入19,linux swap類型
然後就和原來的分區一樣了
Device Start End Sectors Size Type
/dev/sda1 2048 1050623 1048576 512M EFI System
/dev/sda2 1050624 233359359 232308736 110,8G Linux filesystem
/dev/sda3 233359360 250068991 16709632 8G Linux swap
然後輸入w 保存退出
4.對分區格式化,根據之前的UUID信息和格式
格式化sda1
sudo mkfs.vfat /dev/sda1
格式化sda2,更改uuid,這裏的-U後面的uuid就是之前記錄下來的要一樣
sudo mkfs.ext4 -U 0a93b854-4bb1-4e95-8805-72839b44d8ce /dev/sda2
格式化sda3上,更改UUID
sudo mkswap -U 55e55928-707f-4109-b482-e95f8887ad75 /dev/sda3
好了,準備工作做完了。
三,系統恢復
可以開始恢復系統了
1.掛載系統根目錄,就是系統文件的那個分區,我這裏是sda2,掛載到mnt下面
sudo mount /dev/sda2 /mnt
在MNT根目錄下面,新建boot/efi目錄,掛載sda1
sudo mkdir /mnt/boot
sudo mkdir /mnt/boot/efi
sudo mount /dev/sda1 /mnt/boot/efi
將你之前複製的backup.tar.gz放到到/mnt/目錄下,準備恢復
去到mnt目錄下
cd /mnt
切換到根用戶或者用sudo的命令,由於live-cd沒有用戶密碼所以先要設置根的密碼
sudo passwd root
su
解包的備份文件
tar -xvpzf backup.tar.gz -C . --numeric-owner
命令解釋:
簡要說明:
x - 告訴tar立即提取f選項指定的文件。在這種情況下,存檔是backup.tar.gz
-C <directory> - 此選項告訴tar在解壓縮之前更改爲特定目錄。在此示例中,我們將還原到根(/mnt)目錄。
--numeric-owner - 此選項告訴tar恢復歸檔中文件的數字所有者,而不是匹配要還原的環境中的任何用戶名。這是因爲您要恢復的系統中的用戶ID:s不一定與您用於恢復的系統匹配(例如,Live CD)。
IconsPage /warning.png 這將覆蓋指定裝載中的每個文件和目錄,並使用存檔中的文件和目錄。歸檔後創建的任何文件都不會存儲在歸檔中,因此將保持不變允許恢復需要完成的時間。提取完成後,您可能需要重新創建原始存檔中未包含的目錄,因爲您使用--exclude將其排除。這不適用於--one-file-system排除的文件系統。這可以使用以下命令完成:
mkdir /proc /sys /mnt /media
完成後,重啓並在進行備份時將所有內容恢復到系統狀態。
查看sda1的UUID,更改/etc/fstab中文件裏面的sda1的UUID
sudo blkid
我的顯示是
/dev/sda1: UUID="48e1-89a1" TYPE="vfat" PARTUUID="e8860503-01"
將裏面的UUID複製,打開的/mnt/etc/fstab中
sudo gedit /mnt/etc/fstab
看見
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda2 during installation
UUID=0a93b854-4bb1-4e95-8805-72839b44d8ce / ext4 errors=remount-ro 0 1
# /boot/efi was on /dev/sda1 during installation
UUID=6815-BB32 /boot/efi vfat umask=0077 0 1
# swap was on /dev/sda3 during installation
UUID=55e55928-707f-4109-b482-e95f8887ad75 none swap sw 0 0
找到
# /boot/efi was on /dev/sda1 during installation
UUID=6815-BB32 /boot/efi vfat umask=0077 0 1
將UUID後面的碼換成剛剛得到的48e1-89a1,保存,退出。
2.修復GRUB
參考此鏈接:https://jingyan.baidu.com/article/5553fa82cd48a765a23934ae.html
此過程中要聯網,在終端輸入
sudo -i add-apt-repository ppa:yannubuntu/boot-repair
sudo apt-get update
sudo apt-get install -y boot-repair && boot-repair
等待下載完成後,有個窗口彈出,選擇Recommended repairs
等待它自動完成,彈出的窗口選是就行了。
完成後,重啓就可以進入系統了。