無需重新安裝即可將多引導系統遷移到更大的磁碟
我想用一個更大的系統驅動器替換我的系統驅動器,並且不希望重新安裝主操作系統 (OpenSUSE),或者即使很少使用 Windows。安裝 Windows 和 Suse 似乎需要很長時間,我寧願不必為 Suse 安裝重建我的首選項和自定義設置。
其他可引導系統對於測試來說是短暫的,因此它們的損失將是微不足道的。我的系統在 BIOS 引導中使用 MBR 磁碟,並在第一個磁碟的 MBR 中為引導載入程序使用 GRUB2。所有的 GRUB 節都使用
LABEL=
而不是UUID=
這樣,這不會是一個問題。同樣,我的/etc/fstab
usesLABEL=
,因此更改或重複的 UUID 不是問題。我相信我可以使用Clonzilla Live來遷移 Windows 分區。我將那個分區保持在相同的大小和相同的位置。如果我正確理解 Clonezilla,那麼該複製的 UUID 將是相同的,因此 Windows不應該知道發生了任何事情,或者至少不足以關心。我的問題或擔憂是:
- 我認為,在 MBR 上安裝 GRUB 後,我不能直接複製它,因為分區正在更改
- Suse 安裝使用 BTRFS,我想讓它的根分區更大
- 我還想增加 Suse
/boot
分區的大小(發生了一些需要更多空間的罕見事件/boot
)- 我還沒有找到已
partclone
安裝 BTRFS 文件系統和驅動程序的 Live USB 發行版- 我只想拍一張
我的理解
partclone
是系統必須離線才能複製 BTRFS 系統。我知道 Clonezilla Live 必須是因為它是一個可啟動的系統。數據失去不是問題,因為所有數據都在不參與作業系統遷移的其他磁碟上。我找到了一個工具,btrfs-clone,我希望它可以簡化這個過程,並增加我成功的機會。我已經對其進行了測試,它將複製實時系統。在此過程中保持系統相當安靜當然是個好主意。同樣,分區的 UUID 對除了可能的 Windows 之外的所有內容都無關緊要,Windows 無論如何只能看到自己的分區。
問題的簡短版本是需要對新磁碟和分區執行哪些步驟才能將現有系統複製到新磁碟上並在我交換電纜時使其可啟動?
作為一個額外的說明,有一個現有的問題似乎是正確的。我擔心的是,
rsync
在 BTRFS 系統上使用不會獲得所有快照,並且系統不會在新系統上“原樣”。僅使用btrfs-clone
代替就可能rsync
解決所有問題。因為它是我的主要(唯一)桌面系統,所以我想一次性搞定它。
因為我需要完成這件事,所以我必須使用一個我有理由確信會起作用的過程,即使不是我所希望的理想。直到有人有更好的答案,對於以後的使用者,我會成功地回答我所做的事情。
最初的問題陳述包括 BIOS 引導正在使用以及磁碟以 DOS 或 MBR 格式分區的資訊。因此,此處不考慮使用 UEFI 引導或 GPT 分區可能出現的並發症(如果有)。
注意:幾乎每個重要程序都需要 root 權限。這可以通過以 root 身份登錄(在某些發行版上不是選項)、使用 切換到 root 使用者
sudo su
或在每個命令前加上sudo
. 這裡的假設是使用前兩個選項之一以 root 身份完成所有操作。這些命令都是從 root 帳戶而不是使用者帳戶執行的。為此需要的是:
- 現有系統處於執行狀態
- 第二個磁碟,HDD 或 SSD,可供系統訪問(內部或通過 USB)
- Clonezilla Live的可引導版本、CD 或 USB
- 具有實時發行版或能夠進入恢復模式的 USB 驅動器的可引導光碟。
如果它是使用相同或非常接近的核心複製的系統版本,則最後一項是最好的。無論選擇哪種工具,都需要能夠安裝並
chroot
進入新系統。不需要光碟或 USB 驅動器中的其他工具。1. 驗證涉及的磁碟名稱。
執行
mount | grep '/dev/sd'
. 這將顯示所有目前安裝的分區。在 BTRFS 文件系統的情況下,如問題中給出的,可能會為on / type btrfs
給出的分區列出幾個不同的掛載點。所有這些分區都可以忽略,因為複製根的過程也會複製它們。如果其他分區是從不同的物理磁碟掛載的,並且該磁碟在遷移後仍將保留,則也可以跳過它們。還需要且更難找到的是安裝 Windows 的分區。如果通常首先安裝 Windows,則 Windows 分區很可能是
/dev/sda1
,尤其是如果 Linux 系統也在/dev/sda
.要查找的常見分區是
/home
和/boot
。2.在新磁碟上創建需要的分區
如果新磁碟能夠通過 USB 連接,那就更容易了。
- 在未連接磁碟的情況下執行命令
lsblk
- 連接磁碟並
lsblk
再次執行- 第二個列表中的設備不是第一個是要使用的設備
注意:如果您在此過程中隨時重新啟動,並且連接了多個 USB 磁碟,則設備名稱很可能會更改。在繼續之前每次檢查以驗證正確的設備名稱,否則您可能會在某處失去數據。
使用的工具是個人選擇,取決於您的喜好。大多數係統中通常可用的一些選項可能包括
parted
、gparted
、cfdisk
、fdisk
和gdisk
。創建分區後,執行
partprobe
以確保系統“知道”新分區。有些工具會通知核心它需要,有些則不會。自己做可以確保它確實完成了。驗證分區是否已創建,並
lsblk
再次使用該命令被核心看到。3. 在新分區上創建 Linux 文件系統
BTRFS 根分區可以用
mkfs.btrfs
命令製作,mkfs.ext4
可以用來製作/boot
和/home
分區。為方便起見,如果新磁碟有交換分區,則可以使用mkswap
命令準備新的交換分區。4、清理BTRFS根分區,減少複製操作的時間
列出系統的快照,
snapper list
並儘可能多地刪除,使用snapper delete <number>
. 結果,回滾選項將非常有限。如果系統被複製,它可能處於穩定狀態,不需要回滾到先前的條件。在 BTRFS 文件系統上執行平衡操作。完全平衡可能非常耗時!將其限制為僅平衡使用少於某個百分比的塊可以完成很多工作,同時花費更少的等待時間。取決於系統有多髒,50% 可能是您耐心的極限。我的系統經常是平衡的,所以我可以使用更高的百分比 (90%) 並花費可以容忍的時間。該
-dusage
選項將平衡操作限制為使用少於給定百分比的數據塊。對於我的系統,命令是
btrfs balance start -dusage=90 /
5.創建掛載點並掛載新分區進行複製
根分區在所有情況下都很明顯。可能還需要
/home
和/boot
分區。6. 複製非 BTRFS 文件系統
該
rsync
命令是比簡單命令更好的選擇,cp
因為它可用於保留複製文件的所有權和權限。rsync
如果它被中斷,也可以重新啟動該過程。一個例子是
rsync --archive -hh --hard-links --partial --info=stats1 --info=progress2 --modify-window=1 --one-file-system /boot/ /boot2/
7.複製根、BTRFS、分區
該
btrfs-clone
程序是我決定信任的工具。文件表明最好的結果(就使用的空間而言)來自“生成”策略,所以這是我選擇的。執行此操作的命令很簡單
btrfs-clone --strategy generation / /mnt
預計手術需要一段時間。
8.修改“新”系統
您可能需要對
/etc/fstab
文件進行更改,以適應對要安裝在新系統中的分區的更改。整個系統不必保持完全相同。標籤名稱、UUID 甚至設備名稱都可以在遷移過程中更改。在 openSUSE 的情況下,還有另一個可能的問題原因。系統設置包括在 GRUB 配置期間用於硬編碼
grub.cfg
菜單中的一些核心參數的文件。該文件是/etc/default/grub
並且可能包含類似於以下內容的行:GRUB_CMDLINE_LINUX_DEFAULT="splash=silent resume=/dev/disk/by-label/Linux_swap quiet mitigations=auto"
值得關注的是部分
resume=....
。這指向用於掛起到磁碟操作的交換分區。如果該行沒有被註釋掉,resume=...
其中包含 ,並且新磁碟具有與目前磁碟不同的標籤、UUID 或設備名稱,則必須對其進行更改以反映新版本是什麼。這將在後面的步驟中變得重要。9. 使用Clonezilla複製 Windows 分區。
我不是 Clonezilla 方面的專家。選項似乎是在可啟動 CD 上實時使用 Clonezilla 。除了語言/鍵盤選項之外,我遵循的步驟是:
device-device work directly from a disk or partition to a disk or partition Expert Expert mode: choose your own options part_to_local_part local_partition_to_local_partition Select the source partition Select the target partition Options menu changes add Reinstall grub on target hard disk drop Automatically adjust geometry ... drop sfdisk uses CHS ... drop Resize filesystem ... add No GUI ... add Remove NTFS volume dirty flag ... -sfck Skip checking/repairing source file system -p choose Choose reboot/shutdown/etc when everything is finished
完成後,Windows 分區已被複製,GRUB可能會添加到 MBR。
10.用新盤更換舊盤
這是鍛煉身體的關鍵。解除安裝舊磁碟並安裝新磁碟。如果兩個磁碟都保持安裝或連接狀態,此後系統可能會感到困惑。作為替代方案,如果要使用兩個磁碟,將新磁碟用作引導磁碟,則需要更改或重新格式化舊的不再需要的分區,以賦予它們新的 UUID 和標籤。
11.重建啟動過程
根據我的實驗,Clonezilla 添加到 MBR(如果有)的引導載入程序是不完整的。由於上述設置
initrd
,舊系統的 可能與新系統不兼容,尤其是在 openSUSE/etc/default/grub
上。最後,該grub.cfg
文件可能包含與新系統不兼容的元素。如果前面的步驟已成功完成,則更正所有這三個步驟是一個直接的過程。啟動 live 光碟,如果需要,選擇恢復選項。如果使用現場 CD,例如 Ubuntu,可以一直進入現場系統,然後打開終端。在實時系統上使用終端還需要使用
sudo su
具有 root 權限。大多數係統上的恢復模式已經在根目錄下。以下假設
/dev/sdx
具有以下分區的磁碟:/dev/sdx1 Windows /dev/sdx2 `/boot` /dev/sdx3 `/` /dev/sdx4 swap
分區號,甚至設備名稱,在您的系統上可能不同,需要修改以下步驟以匹配情況
步驟
- 製作一個通常可以使用的目錄,該目錄
/mnt
可能已經存在- 掛載新系統的根分區:
mount /dev/sdx3 /mnt
- 掛載新系統的引導分區:
mount /dev/sdx2 /mnt/boot
- 將現有系統的程序連接到新系統
for item in proc sys dev run; do mount /$item --rbind /mnt/$item done
- 切換到掛載系統
chroot /mnt
- 掛載新系統通常掛載的任何其他分區
mount -a
- 創建新的
initrd
mkinitrd
- 將 GRUB 安裝到 MRB
grub2-install /dev/sdx
- 生成新的
grub.cfg
grub2-mkconfig -o /boot/grub2/grub.cfg
- 退出
chroot
並重新啟動exit reboot
- 刪除帶有實時或恢復系統的 USB 驅動器磁碟。
- 檢查新磁碟是否可以引導到 Window 和 Linux 系統。