Partition

將作業系統從一種介質轉移到另一種介質

  • August 13, 2020

我有一個帶有 Manjaro ARM 的 USB 驅動器(用於 Raspberry Pi 4 系統)和一個空的 SD 卡。有沒有一種方法可以將作業系統從 USB 驅動器傳輸到 SD 卡,同時保留分區?如果可能的話,可以在 Manjaro 執行時完成嗎?

這是輸出lsblk

$ lsblk # partitions on USB Drive
sda      8:0    1  14.9G  0 disk 
├─sda1   8:1    1 213.6M  0 part /boot
└─sda2   8:2    1  14.7G  0 part /
zram0  254:0    0  11.2G  0 disk [SWAP]
  1. 有沒有一種方法可以將作業系統從 USB 驅動器傳輸到 SD 卡,同時保留分區?

是的,假設 sd 卡至少和 USB 驅動器一樣大。您可以執行blockdev --getsize64 /dev/sda以獲取 USB 驅動器的大小(以字節為單位),並通過將設備路徑更改為 sd 卡,您可以確保它至少有同樣多的字節。

這些設備的大小可能不太可能完全相同,因此我最好在 sd 卡上手動創建一個相同的分區表(具有相同的分區號以減少麻煩)。這確保了 sd 卡上潛在可用的額外磁碟空間稍後可用於擴展根分區或創建新分區。用於sfdisk -l /dev/sda以扇區為單位獲取/dev/sda 上的分區列表,然後用於fdisk /dev/sdb在sd 卡上創建相同的分區(假設您的sd 卡設備為/dev/sdb,請根據需要更新)。

重新創建分區後,您可以一次複製每個分區的內容。

  1. 如果可能的話,可以在 Manjaro 執行時完成嗎?

是的,但在這種情況下,您應該以只讀方式掛載文件系統,以避免作業系統在您複製時將任何內容寫入磁碟時損壞副本的風險。

以下是執行此操作並複制您在問題中列出的兩個分區的命令,假設您已按上述方式創建分區,並再次假設您的 sd 卡是 /dev/sdb:

mount /dev/sda1 -oremount,ro
dd if=/dev/sda1 of=/dev/sdb1 bs=1048576
mount /dev/sda2 -oremount,rw

mount /dev/sda2 -oremount,ro
dd if=/dev/sda2 of=/dev/sdb2 bs=1048576
mount /dev/sda2 -oremount,rw

可能某些軟體可能不喜歡根文件系統臨時以只讀方式掛載;重新啟動將解決此問題。

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