将操作系统从一种介质传输到另一种介质

将操作系统从一种介质传输到另一种介质

我有一个带有 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

  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

可能某些软件可能不喜欢根文件系统临时挂载为只读;重新启动即可解决该问题。

相关内容