我知道在某些情况下,将 Windows 安装从一台计算机移动到另一台计算机(物理移动硬盘驱动器)可能很困难,但是这在 Linux 上如何工作?大多数驱动模块不是在启动时加载的吗?那么理论上会有那么麻烦吗?
显然,xorg 配置会发生变化,并且专有的 ATI 驱动程序必须重新编译(也许?)。难道还有比我想象的更多的事情吗?
假设两台计算机来自同一时代,例如都是 i7,但硬件略有不同。
更新:
感谢您的回答。这主要是出于我自己的好奇心。我在工作中安装并运行了 Linux 系统,但最终我想换到一台可以安装双显卡的计算机,这样我就可以运行两个以上的显示器。但不会很快。
答案1
假设源处理器和目标处理器具有相同的架构(例如,都是 x86、都是 x64、都是 arm...),移动或克隆 Linux 安装非常容易。
移动
移动时,您必须注意硬件依赖性。然而,大多数用户不会遇到任何困难,除了xorg.conf
(甚至现代发行版往往不需要它)和引导加载程序之外。
如果磁盘配置不同,可能需要重新配置引导装载程序和文件系统表(
/etc/fstab
,/etc/crypttab
如果您使用加密技术,/etc/mdadm.conf
如果您使用 md RAID)。对于引导加载程序,最简单的方法是将磁盘插入新机器,启动发行版的 live CD/USB 并使用其引导加载程序修复工具。请注意,如果您要复制数据而不是物理移动磁盘(例如,因为一个或两个系统与 Windows 双引导),则复制整个分区(使用 (G)Parted 或
dd
)会更快、更容易。如果你有一个
xorg.conf
文件来声明与显示相关的选项(例如与专有驱动程序相关),如果目标系统具有不同的显卡或不同的显示器设置,则需要对其进行修改。您还应该安装专有驱动程序在移动之前检查目标系统的显卡(如果适用)。如果您已声明模块选项或黑名单
/etc/modprobe.d
,它们可能需要针对目标系统进行调整。
克隆
克隆安装涉及与移动相同的硬件相关问题,但还需要注意一些事情才能为新机器提供新的身份。
编辑为新机器指定一个新名称。 在 下搜索其他出现的主机名。常见位置是(别名为 127.0.0.1)和/或其他邮件系统配置。
/etc/hostname
/etc
/etc/hosts
/etc/mailname
重新生成ssh 主机密钥。
对以下内容进行任何必要的更改网络配置(例如静态 IP 地址)。
更改 RAID 卷的 UUID(不是必需的,但建议避免混淆),例如
mdadm -U uuid
.
也可以看看针对 Ubuntu 的分步克隆指南。
我当前的台式计算机安装是从其前身克隆的,方法是拔出两个 RAID-1 镜像磁盘之一,将其移动到新计算机中,在现有磁盘上创建 RAID-1 卷,让镜像重新同步,并进行概述的更改以上适用。
答案2
我不确定这是否回答了您的问题,但通常您会做完全相反的事情 - 移动您的用户文件夹并重新安装所有内容。理论上,所有自定义和单独的配置文件都应该位于您的用户文件夹中,因此这是您真正需要传输的唯一内容。
一些包管理器可以列出所有已安装的包(Debian/Ubuntu 有dpkg --list
,Gentoo 有/etc/world
,等等),所以你可以:
- 在新系统上安装基本发行版
- 告诉它“安装我在另一台计算机上的所有软件包”
- 复制您的用户文件夹
您最终应该得到一个功能相同的系统。
答案3
事实上,在 Windows 下,几乎不可能通过复制硬盘内容或在 PC 之间切换硬盘来将安装移动到新 PC,但在 Linux 下,这效果非常好。我从 Thinkpad R52 切换到 Thinkpad T400,只需将旧硬盘的内容复制到新硬盘(将旧硬盘放入通过 USB 连接的外部封闭件中,然后将所有内容复制到 Gparted-Live-CD 下)。之后我所要做的就是手动将 Grub 放入 MBR 并启动。一切仍然对我有用。
正如 Michael 所说,通常来说,一台新 PC 是一个很好的机会来摆脱随着时间的推移积累的垃圾,但有时你只需要快速重新开始工作,然后复制硬盘内容就可以在 Linux 上很好地工作,因为所有驱动程序都包含在内内核中的驱动程序无需安装即可供内核使用,现在驱动程序是自动加载的,而不是在 modprobe.conf 中手动列出,甚至 xorg 也会为我自动配置自身。
仅当您必须在旧 PC 上手动配置驱动程序(例如 Raid 系统、专有图形驱动程序等)时,您才可能遇到问题。
答案4
大纲
最近,我将 Arch Linux 安装移动到了另一个驱动器较小比原来的驱动器。
原始驱动器仅使用一个分区,这简化了事情。如果您有与根分区分开的引导分区,这是一个答案这可能对你有帮助。
步骤是:
- 备份数据。
- 在目标驱动器上创建包含 ext4 文件系统的分区。
- 将源分区的所有数据复制到目标分区。
- 安装GRUB作为目标驱动器上的引导加载程序。
提示
在我们开始之前的提示:为了确定我连接的设备的路径(例如/dev/sdb
)并通常关注设备和分区的状态,我使用watch
结合lsblk
:
watch lsblk -o tran,name,model,fstype,label,mountpoints,fssize,fsavail,fsused,fsuse%
它每两秒更新一次并产生如下输出:
TRAN NAME MODEL FSTYPE LABEL MOUNTPOINTS FSSIZE FSAVAIL FSUSED FSUSE%
sata sda SanDisk SSD PLUS 1000GB
├─sda1 ext4 VM partition /sda1 108G 50G 53.4G 49%
└─sda3 ext4 / 808G 561.3G 205.7G 25%
usb sdb SABRENT
└─sdb1 ext4 new_daedalus /run/media/me/new_daedalus 29.2G 25.3G 2.4G 8%
sata sr0 MATSHITADVD-RAM UJ8A2
由于我们要将一个分区的内容复制到另一个分区,因此最好摆脱占用大量空间的碎片:使用以下命令检查源分区ncdu
对于包含最多数据的目录,并在可能的情况下删除或移动它们。
另一件事:我使用 SATA 转 USB 适配器,例如这些将源驱动器和目标驱动器连接到我的计算机。
细节
假设您已经备份了数据并且目标驱动器位于/dev/sdb
,让我们详细介绍一下:
在目标驱动器上创建包含 ext4 文件系统的分区:
将源分区的所有数据复制到目标分区:
- 以下假设您的旧分区和新分区均已安装:
sudo rsync -a --hard-links --delete --progress --human-readable --stats /run/media/me/old_partition/ /run/media/me/new_partition/
- 我用了
rsync
这里。您也可以使用 good oldcp
来实现相同的目的:sudo cp --recursive -a /run/media/me/old_partition/* /run/media/me/new_partition/
- 以下假设您的旧分区和新分区均已安装:
安装GRUB作为目标驱动器上的引导加载程序:
- 将运行所需的虚拟文件系统添加到新分区
grub-install
:sudo mount --bind /dev /run/media/me/new_partition/dev; sudo mount --bind /proc /run/media/me/new_partition/proc
- 使新分区的根目录成为当前根目录:
sudo chroot /run/media/me/new_partition/
- 在目标驱动器上安装 GRUB(请参阅这有关此处发生的情况的更多信息):
grub-install /dev/sdb; grub-mkconfig -o /boot/grub/grub.cfg
chroot
使用Ctrl+d或退出exit
- 卸载虚拟文件系统和分区本身:
sudo umount --recursive /run/media/me/new_partition
- 将运行所需的虚拟文件系统添加到新分区
就是这样,您现在应该能够在new_partition
驱动器上使用您安装的 Linux 了/dev/sdb
。