
問題很簡單。我已經尋找答案一段時間了,但不確定我是否得到了正確的答案。由於錯誤很容易毀掉我的驅動器和數據,所以我真的希望事情弄清楚。
我在 250GB SSD ( ) 上運行 Ubuntu,/dev/sda
它有兩個分割區,每個分割區大約 125GB 大。 sda1 安裝到/
,sda2 安裝到/home
。現在我想將所有內容移至新的 1TB SSD 中(假設是/dev/sdc
)並將每個驅動器擴展到 500GB。經過一番研究,我提出了兩種方法:
克隆
dd if=/dev/sda of=/dev/sdc
整個磁碟。之後我應該會得到一個帶有兩個 125 GB 分割區和一些未分配空間的可啟動磁碟。正確的?然後我需要使用 gparted 之類的工具將 sdc1 和 sdc1 的大小調整為 500GB。調整大小可能需要很長時間,對吧?第二種方法是先格式化新驅動器,製作兩個500GB的分割區。執行
dd if=/dev/sda1 of=/dev/sdc1
和dd if=/dev/sda2 of=/dev/sdc2
克隆兩個分區。此時,該磁碟應該無法啟動了吧?為了使其可引導,我需要將引導程式複製到新引導程式中。我只需要前 446 個位元組。dd if=/dev/sda of=/tmp/mbrsda.bak bs=512 count=1
這樣我就可以了dd if=/tmp/mbrsda.bak of=/dev/sdc bs=446 count=1
。透過這樣做,我使其可啟動,並保留了 500GB+500GB 的分割表。這種方法將使我免於調整磁碟大小。
對於這兩種方法,我需要更改文件中的 UUID /etc/fstab
。這可以透過在克隆後首先安裝新磁碟機來完成:sudo mount /dev/sdc1 /mnt/
,然後編輯/mnt/etc/fstab
檔案。
我對這一切的看法正確嗎?
是否存在弄亂我的舊驅動器的潛在風險?
答案1
任何時候你使用dd
(又名d
isk d
estroyer)都有可能弄亂你的資料。dd
對於意外將新磁碟機寫入舊磁碟機沒有任何保護措施。保持其正常工作的唯一方法是您非常小心地正確輸入命令並且不要混淆來源和目標。if=
且of=
彼此之間僅差一個小小的誤擊鍵!
另一個問題是速度dd
慢並且會對目標 SSD 造成不必要的磨損。大多數分區的使用率通常遠低於 100%。使用dd
複製具有大量可用空間的分割區最終會複製該分割區的每個字節,甚至實際上不包含任何已分配資料的位元組!
如果這是我的系統,我會這樣做:
- 將舊SSD的分區表截圖,以便稍後我們設定新SSD的分區表時參考。
- 將新 SSD 連接到電腦並斷開舊 SSD。保持舊 SSD 斷開連接使得我們在進行潛在破壞性工作時無法破壞任何寶貴數據。
- 在 Linux 即時模式下從 Ubuntu 安裝 USB 隨身碟啟動。確保您的 BIOS 始終以傳統/MBR 模式而不是 UEFI 模式啟動拇指驅動器,因為聽起來您的舊系統正在使用 MBR。如果我的假設無效,請確保您的 BIOS 以 UEFI 模式啟動拇指驅動器。把這些東西混在一起會讓以後正確安裝 grub 變得更加困難。
- 用於使用
gparted
所需的分割表設定新的 SSD 並格式化檔案系統。嘗試保持所有內容與舊 SSD 的分割區表相同(分割區大小和 UUID 除外)。不要忘記將/
根檔案系統標記為active/ bootable,就像您的舊 SSD 一樣。 - 現在所有危險的分區編輯工作都已完成,您可以安全地關閉並新增連接到電腦的舊 SSD。
- 再次啟動 Linux live USB 隨身碟,這次連接兩個驅動器。不要從舊的 SSD 啟動(我們需要保持該系統處於非活動狀態才能為其創建良好的乾淨副本)。
啟動後,打開終端機並開始執行這些命令,將資料從舊 SSD 複製到新 SSD。與使用不同的是
dd
,該cp
命令的防錯性要高得多,因為您無法在舊文件系統之上複製空文件系統來破壞任何內容——在這種情況下不會複製任何內容!另外,我們可以將舊SSD安裝為「唯讀」模式,以避免修改舊SSD的任何可能性。mkdir oldroot newroot oldhome newhome sudo mount -o ro /dev/sda1 oldroot sudo mount -o ro /dev/sda2 oldhome ls oldroot ls oldhome
驗證您是否可以看到舊資料。如果您看到的只是一個空檔案系統,則可能您使用了錯誤的“/dev/sdXX”裝置...
sudo mount -o noatime /dev/sdc1 newroot sudo mount -o noatime /dev/sdc2 newhome ls newroot ls newhome
驗證您所看到的只是一個空檔案系統作為您的目標。如果一切正常,請發出以下命令來複製所有文件,同時保留所有權限/所有權/SELinux 上下文設定:
sudo cp -Rfax oldroot/* newroot/ sudo cp -Rfax oldhome/* newhome/
完成後,卸載所有內容並將快取寫入同步到持久性儲存:
sudo umount oldroot sudo umount oldhome sudo umount newroot sudo umount newhome sync
現在,您可以安全地關閉並斷開舊 SSD,這樣我們在使新 SSD 可啟動時就不可能損壞其上的任何內容。
在 Linux 實時模式下使用 USB 拇指驅動器啟動計算機,僅連接新的 SSD。打開終端機並開始執行以下命令:
mkdir newroot sudo mount -o noatime /dev/sda1 newroot sudo chroot newroot /bin/bash mount -t devtmpfs udev /dev mount -t proc proc /proc mount -t sysfs sysfs /sys nano -w /etc/fstab
現在,您需要修改該
fstab
文件,以使 UUID 編號與新 SSD 上的任何編號相符。您可以打開gparted
查看分割區表並找出新的 UUID 是什麼。完成後,按 CTRL-X 並將 fstab 變更儲存到磁碟。update-grub grub-install /dev/sda
如果一切正常,這應該會配置 grub 並將其安裝到新 SSD 的 MBR 中。安裝 grub 後,您必須在退出之前卸載我們之前從 chroot 環境中安裝的所有內容。否則,Ubuntu 在關機時將很難徹底卸載 Linux 分割區。
umount /sys umount /proc umount /dev exit sudo umount newroot sync
現在你就擁有了!希望您的新 SSD 可以啟動並且現在一切都很好。
答案2
答案3
我在這裡發帖,更多的是分享我的經驗,而不是回答發布的問題。然而,我的目標與OP的既定目標相同。
我從 512 GB SSD 上的雙重開機系統開始,其中包含幾個分割區:EFI、Microsoft 保留的分割區、Windows 系統分割區、Linux 系統分割區、Linux 主分割區和復原分割區。
我的目標是將所有內容遷移到 2 TB SSD。
我從 Ubuntu Live-USB 啟動計算機,並使用dd
.我為自己買了一個小型 NVMe SSD 外殼,可以透過 USB 連接。
新的 SSD 完全未受影響地使用:沒有格式化,沒有分割區,什麼都沒有。
克隆後,dd
我交換了SSD,即我從電腦上卸下了小SSD並安裝了新的SSD。
Linux 啟動順利,但 Windows 運行了一些診斷/修復,但沒有任何結果。
接下來,我再次從 Ubuntu Live-USB 啟動系統,並啟動gparted
.
gparted
報告了 GPT 表中的一些錯誤,並提供修復。我選擇了修復選項,然後繼續調整大小並移動現有分割區。完成這一切後,令我驚訝的是,Windows 也可以正常啟動。
令我驚訝的是,整個克隆事件進行得如此順利。
這週我又做了一次,再次使用雙重引導機。
- 使用 Live-USB 啟動仍在內部的小型 SSD 的計算機
- 將新 SSD 安裝到外殼中並將其插入
- 使用複製磁碟
dd
dd
結束後,啟動gparted
修復 GPT 表,並調整大小和移動分割區- 關閉電腦並更換 SSD
- 兩個作業系統都啟動得很好
一些注意事項:
- 如果舊 SSD 包含 Windows 分割區,請確保 BitLocker 已完全停用
- 如果您忘記啟動
dd
任何顯示進度的選項,請參閱這個答案。您可以發送dd
訊號,使其顯示進度訊息,而不會幹擾其操作。