System-Installation

在不重新安裝 Linux 的情況下切換筆記型電腦磁碟驅動器?

  • January 1, 2018

我在筆記型電腦的硬碟上安裝了 Lubuntu 17.04。我現在買了一塊大小幾乎相同的 SSD 作為替代品;它是空的,沒有動過。

現在,我想切換磁碟,並將我在 HDD 上已經擁有的內容基本完全相同的內容轉移到 SSD - 並且讓我的 Linux 啟動並執行而無需任何進一步的調整(可能是/etc/fstabUUID 問題除外)。

我怎樣才能做到這一點…

  1. 沒有額外 PC 的幫助?
  2. 在額外的 PC 的幫助下?

筆記:

  • 如有必要,我可以生成可啟動的 U 盤。
  • 如有必要,我可以使用 CD/DVD 閱讀器。
  • HDD 的使用率為 33%,因此數據適合 - 但 HDD 容量稍大。
  • 硬碟驅動器可能有一些臨界壞的扇區(但現在 - Linux 啟動並工作)。
  • 硬碟上只有一個分區,據我所知-考慮到我是唯一的使用者,我也可以將其保留在 SSD 上,並且它不用作某些公共伺服器等。

您有兩種基本方法可以將安裝切換到新磁碟、複製磁碟或複制內容並修復系統(即引導載入程序、fstab 條目)。這兩種方法都有其優點和缺點。

這兩種方法都需要另一個系統,該系統連接了該磁碟以及一些額外的儲存空間或第二個磁碟。這可以是另一台筆記型電腦或台式機 - 或實際筆記型電腦上的 live usb/cd。

如果您可以將兩個磁碟都連接到系統,這是最簡單的 - 但如果您不能這樣做,您可以在交換驅動器時將額外的儲存用作臨時暫存區域。如果你有一個大的 USB 硬碟驅動器,可以使用它。一個更簡單的選擇可能是獲得一個USB 機箱,它允許您將兩個磁碟連接到同一台電腦。

因此,使用 live usb 和 usb 機箱,您可以在要更換驅動器的筆記型電腦上完成所有操作。對於這兩種方法,我將討論在連接兩個磁碟並且兩者都未安裝的情況下進行直接磁碟傳輸(即您安裝了另一台電腦或正在使用現場 USB/CD)。我將使用/dev/sdS來指示源磁碟(在您的情況下為硬碟)並/dev/sdD指示目標磁碟。將這些替換為系統上的實際磁碟 - 請務必驗證這些磁碟,因為出錯會破壞您擁有的任何數據。

方法一:複製磁碟

這是從磁碟轉到相同大小或更大的磁碟時最簡單的方法,但是通過額外的步驟可以從較大的磁碟轉到較小的磁碟。這樣做的主要缺點是它逐塊複製磁碟,因此需要讀取和寫入整個磁碟。當磁碟大部分為空時,這將比複製系統花費更長的時間。

您提到從稍大的磁碟到較小的磁碟,因此第一步是將源磁碟上的分區調整為小於目標磁碟的大小。使用gparted最容易做到這一點,只需確保縮小驅動器,使可用空間位於磁碟末尾。這可能需要一段時間,因為它必須將磁碟末尾的任何數據移動到新位置。

dd現在您只需使用或將源磁碟複製到目標ddrescueddrescue可能是可取的,因為它會更加努力地重新讀取您提到的可能有的壞扇區。

sudo ddrescue /dev/sdS --force /dev/sdD

或者使用dd

sudo dd if=/dev/sdS of=/dev/sdD

請注意,您將在寫入期間收到目標磁碟已滿的錯誤消息 - 這很好,因為我們調整了磁碟大小,因此磁碟末尾不應包含任何有用的內容。這就是為什麼您必須確保將其調整為略小於目標的大小。

現在您可以再次使用 gparted 來調整目標的大小以填充驅動器。

您現在應該能夠交換磁碟並引導新系統。

方法2:複製根文件系統

如果您僅在大磁碟上使用少量空間,則此方法可能更快,但需要更多步驟來重新配置引導載入程序和 fstab 以引導系統。它還具有僅在源磁碟上讀取的優點,因此破壞原始磁碟的可能性較小(儘管上述方法並非如此,因為由於目標小於源磁碟,您必須調整磁碟大小)。它也更加靈活,因為您可以根據需要輕鬆更改分區。

第一步是在新驅動器上設置分區表並格式化分區。您提到驅動器上只有一個分區-據此我假設您使用的是舊版 bios 引導(因為 uefi 除了根文件系統外還需要 vfat 分區)。這是最容易做到的parted

sudo parted /dev/sdD mklabel msdos
sudo parted /dev/sdD mkpart primary ext4 0% 100%
sudo mkfs.ext4 -F /dev/sdD1

但你也可以使用fdiskorgdisk或者即使gparted你喜歡。如果您的源磁碟有更多分區,或者您想更改分區佈局,您現在可以這樣做 - 只需根據您的需要或要求設置目標磁碟。

現在掛載源磁碟和目標磁碟。

sudo mkdir -p /mnt/src /mnt/dest
sudo mount /dev/sdS1 /mnt/src
sudo mount /dev/sdD1 /mnt/dest

如果您有/想要比此更多的分區,請將根安裝在上述位置以及與該位置相關的其他分區。(例如,如果您的源有一個額外的引導分區,則將其掛載到 /mnt/src/boot)。

現在將內容從源複製到目標。

sudo rsync -avh /mnt/src/ /mnt/dest/

這需要一段時間。如果它被中斷,您可以通過重新執行命令來恢復它。

您現在可以解除安裝源驅動器,因為我們不再需要它。

sudo umount /mnt/source

最後的步驟是修復系統,使其可以啟動。首先為新系統打開/mnt/dest/fstab並修復它 - 如果分區佈局相同,這應該是更新 UUID/驅動器號以反映新分區的問題。用於blkid獲取所需資訊,建議使用UUID=PARTUUID=如果可用。

最後,我們需要修復引導載入程序——在這裡我假設您使用的是帶有舊版 bios 的 grub2,如果這不是真的,請忽略這一點並按照有關如何恢復引導載入程序的說明進行操作。

sudo grub-install --boot-directory=/mnt/dest/boot /dev/sdD

可以在此處找到有關恢復 ubuntu 引導載入程序的更多資訊。

如果一切順利,您應該能夠關機、交換驅動器並啟動新磁碟。

附加功能

通過第三個磁碟工作

如果您無法將兩個磁碟都附加到一台電腦上,您將需要一些額外的儲存空間 - 這可能是 USB 磁碟、網路附加儲存或您可以在本地訪問的任何其他東西,並且足夠大以儲存磁碟或根文件系統。

上述兩種方法的總體過程是相同的,但是先從一個磁碟複製到另一個磁碟,然後再复製到臨時暫存區;

使用方法1:

請注意,這要求暫存區域與您正在複製的磁碟一樣大。

將儲存安裝到/mnt/staging

sudo ddrescue /dev/sdS /mnt/staging/rootfs.img

您可以隨心所欲地保存所有文件。如果您願意,您可以從這裡壓縮它並將其作為系統的備份。

然後您可以關閉交換驅動器並再次啟動 live usb 以恢復映像

sudo ddrescue /mnt/staging/rootfs.img --force /dev/sdD

請注意,源和目標的驅動器號可能與此方法相同。

使用方法 2:

請注意,這僅要求暫存區域在壓縮時與文件系統一樣大,而不是整個磁碟。

將儲存安裝到/mnt/staging並且源安裝到/mnt/src

sudo tar -C /mnt/src -caf /mnt/staging/roofs.tar.gz /

然後,您可以關閉交換驅動器並再次啟動 live usb 以在設置目標磁碟文件系統後恢復文件系統。

sudo tar -C /mnt/dest -xf /mnt/staging/roofs.tar.gz /

然後繼續恢復 fstab 和 bootloader。

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