Linux

如何縮小、複製整個 Linux 磁碟並啟動它?

  • July 24, 2016

我有一個在 1024 GB 磁碟(磁碟 A)上執行的 Ubuntu 14.04,它最多只使用了 130 GB 空間。我想將它複製到 256 GB SSD 磁碟(磁碟 B)。但是失敗了。

我曾經gparted將磁碟 A 上的分區縮小到只有 180 GB 左右,以便成功地為磁碟 B 做準備。

你能告訴我我哪裡錯了嗎?

1)恢復分區表

我確實備份了磁碟A的分區表。

└──╼ $ sudo sfdisk -d /dev/sda
# partition table of /dev/sda
unit: sectors

/dev/sda1 : start=     2048, size=   997376, Id=83, bootable
/dev/sda2 : start=   999424, size= 15624192, Id=82
/dev/sda3 : start= 16623616, size=337020928, Id=83
/dev/sda4 : start=        0, size=        0, Id= 0

尖端

/dev/sda1/boot/dev/sda2swap/dev/sda3/

保存分區表

sudo sfdisk -d /dev/sda > partition.table

然後我嘗試將分區表恢復到磁碟 B(/dev/sdc在這種情況下)。

我替換sdasdcin file partition.table。然後它看起來像:

# partition table of /dev/sdc
unit: sectors

/dev/sdc1 : start=     2048, size=   997376, Id=83, bootable
/dev/sdc2 : start=   999424, size= 15624192, Id=82
/dev/sdc3 : start= 16623616, size=337020928, Id=83
/dev/sdc4 : start=        0, size=        0, Id= 0

然後成功還原。

sudo sfdisk /dev/sdc < partition.table

2)遷移磁碟分區內容

sudo dd if=/dev/sda1 of=/dev/sdc1

sudo dd if=/dev/sda2 of=/dev/sdc2

sudo dd if=/dev/sda3 of=/dev/sdc3

遷移後,可以掛載和查看 /dev/sdc 上的這些分區。

失敗

但是如果我將 SSD 磁碟(磁碟 B)插入我的筆記型電腦,在一些 Thinkpad BIOS 輸出後它不會啟動。沒有出現錯誤,但游標閃爍…

我敢打賭 BIOS 在啟動時甚至沒有檢測到/boot磁碟 B 上的內容。

你能幫助我嗎?非常感謝!


更新

有人建議我用它grub-install /dev/sdc來解決問題。

我搜尋了什麼grub-install是有能力的——連結讓我試試。而且我很確定磁碟 A(安裝了 MBR)。


更新

做完後dd if=/dev/sda of=/dev/sdc bs=512 count=1,只插入B盤,還是一樣的閃爍游標。BIOS之後真的什麼都沒有。

完成後grub-install --boot-directory=/mnt/mypartition/boot /dev/sdc我去啟動它,只有磁碟B。

但是 grub 控制台出來了。並報導

在此處輸入圖像描述


更新

現在它正在工作!

我是這樣做的,在 PC 上執行磁碟 A 作為作業系統,磁碟 B ( /dev/sdc) 作為 USB 硬碟驅動器。

sudo mount /dev/sdc3 /mnt
sudo mount /dev/sdc1 /mnt/boot

sudo grub-install --boot-directory=/mnt/boot /dev/sdc3

然後去了/mnt/boot/grub/grub.cfg,我確實替換了文件中的2個東西grub.cfg。(記得給文件寫權限grub.cfg

替換hd1hd0

替換/dev/sdc3/dev/sda3

然後保存文件。-> 關閉電腦 -> 通過 SATA 插入磁碟 B 並永遠取出磁碟 A。-> 啟動 -> 看到 grub 錯誤但仍然啟動

如果您遇到錯誤Error: invalid environment block. Press any key to continue,請檢查此問題以解決問題。按任意鍵將啟動您的系統。https://askubuntu.com/questions/191852/error-invalid-environment-block-press-any-key-to-continue

sudo -i

然後,一個接一個地執行每個命令。

cd /boot/grub
rm grubenv
grub-editenv grubenv create
grub-editenv grubenv set default=0
grub-editenv grubenv list
update-grub

現在去重新啟動,它會工作!

這就是我縮小 1024GB 磁碟硬碟並將整個系統遷移到新的 256GB SSD 磁碟的方法。

我不熟悉sfdisk,但你可以完成同樣的事情,分區表和 MBR 備份使用dd.

這是我的筆記,我不是作者…

備份 MBR

MBR 儲存在磁碟的前 512 個字節中。它由3部分組成:

  • 前 446 個字節包含引導載入程序。
  • 接下來的 64 個字節包含分區表(4 個條目,每個條目 16 個字節,每個主分區一個條目)。
  • 最後 2 個字節包含一個標識符

將 MBR 複製為 mbr.img:

dd if=/dev/sdX of=/path/mbr_file.img bs=512 count=1

將分區複製為 pX.img

dd if=/dev/sdX of=/path/pX.img bs=1024

將 MBR 還原到新磁碟

dd if=/path/mbr_file.img of=/dev/sdY bs=512

將分區還原到新磁碟

dd if=/path/pX.img of=/dev/sdX bs=1024

或者

您可以clonezilla用來製作作業系統的映像並將其還原到已創建分區的磁碟上。

這樣你可能需要在新磁碟上重新安裝 grub

grub-install

grub-mkconfig

並在“新”作業系統中設置您的交換分區。

mkswap

swapon

引用自:https://unix.stackexchange.com/questions/297446