我正在使用 Clonezilla 将新的 CentOS 7 映像放到我们的计算机上。其中大多数是联想台式机,我们还有几台 HP 台式机,目前都运行旧映像。
为了使 Clonezilla 将新映像还原为新映像后能够正常工作,我们需要插入带有 CentOS 7 救援磁盘的 USB 并启动它来运行一些命令,以 开头chroot /mnt/sysimage
。
这在联想台式机上运行良好,但当我在 HP 台式机上运行此命令时,出现以下错误消息:
chroot: failed to run command ‘/bin/bash’: No such file or directory
联想和惠普的机器都具有相同的硬盘大小(80 GB),而我正在将完全相同的新映像放在这两台机器上。我无论如何也想不出为什么一台机器可以工作而另一台却不能,而且我不想拆开新映像并从头开始(我们只有大约 5 台惠普机器,其余都是联想)。
有人能解释一下为什么 chroot 命令在 HP 机器上不起作用吗?谢谢。
答案1
看起来 /mnt/sysimage 并未按预期挂载。命令
mount | grep "/mnt/sysimage"
应该会告诉您 处挂载了什么/mnt/sysimage
。如果没有输出,则表示/mnt/sysimage
未挂载,在这种情况下请尝试手动挂载。使用命令:
cat /proc/partitions | tr -s ' ' | cut -d ' ' -f 5
获取分区列表。然后尝试
mount /dev/<partition_name> /mnt/sysimage
您可能需要猜测正确的分区名称。我们无法根据您提供的信息判断。要尝试另一个分区,请卸载前一个分区
umount /mnt/sysimage
答案2
错误消息具有误导性,仅意味着/bin/bash
不存在(不是您的情况);或者使用的动态加载器/bin/bash
不存在(可能是您的情况);甚至使用 rsync 创建了 usr、lib 和 lib64 文件夹而没有保留链接标志。
最可能的解释是您的 chroot 缺少 lib 和/或 lib64 文件夹。
您应该复制 usr、lib 和 lib64 三个文件夹同时保留链接,或者仅将mount --bind
它们复制至/mnt/sysimage
。
答案3
如果它在某些机器上运行但在其他机器上运行不成功,则可能是架构不同。我怀疑一个是 32 位的,另一个是 64 位的 - 需要确保两种架构都存在二进制文件和共享库,否则 USB 记忆棒无法同时适用于这两种架构。
答案4
因此,我发现 HP 机器(以及较新型号的联想机器)正在安装 Linux 分区,/dev/sdb
而不是/dev/sda
在我插入 CentOS 7 救援磁盘时安装。
这是因为我的救援磁盘在 USB 上,所以系统安装了 USB/dev/sda
而不是其他分区。
为了解决这个问题,我下载了 CentOS 7 的 ISO,并将其刻录到 DVD 上,然后启动它。现在我可以chroot
毫无问题地执行命令,因为 Linux 分区现在已打开/dev/sda
。
谢谢大家的建议和帮助。