Linux Tar打包 備份 恢復 克隆到新的硬碟 操作流程方法
概述
1.當我們配置系統和環境後,要備份或則克隆到其他硬碟上,該怎麼做呢?下面介紹一下tar方法。我們都知道的Linux系統是萬物皆檔案。那麼系統當然也可以把它當檔案打包,tar是linux下的一個打包工具,下面用的ubuntu系統做示例,看看怎麼操作吧。
一,系統備份
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
此過程中要聯網,在終端輸入
sudo -i add-apt-repository ppa:yannubuntu/boot-repair
sudo apt-get update
sudo apt-get install -y boot-repair && boot-repair
等待下載完成後,有個視窗彈出,選擇Recommended repairs
等待它自動完成,彈出的視窗選是就行了。
完成後,重啟就可以進入系統了。