运行命令
yum remove python
后,我才发生了灾难,现在我无法启动服务器了。如何发生的:我尝试通过CentOS上的yum更新一些应用程序5 VPS,由于某些奇怪的python 2.4错误,命令失败。我注意到我的python版本很旧,我尝试先删除它来重新安装它,所以我做了
yum remove python
。之后,它问我一些有关删除依赖项的事情,看起来好像没有什么我可以错过的所以我单击了
Y
。所以后果是我无法运行任何命令。我什至尝试过
cd /var/www
,但它说的是“ command does not exist in /usr/bin
”。当我使用Tab键查看文件夹导航建议时,文件结构似乎仍然存在(至少对我来说非常重要的/var/www
位)。之后,我尝试重新启动vps(从
reboot
开始,从管理面板命令不起作用),现在它不再启动。现在我的问题是:这样的命令怎么可能这样破坏我的服务器?
#1 楼
非常抱歉:服务器无法启动/无法服务。但是,当我读到以下内容时我迷失了:
它问我一些有关删除依赖项的信息,它看起来好像没有什么我想念的,所以我单击[Y]
肯定要删除的软件包列表确实是
python
是RHEL / CentOS的重要组成部分。您永远不要确认您不太了解的警告消息。您已经可以做的最好的事情是,建议您通过恢复媒体(即livecd)启动,提取所需数据文件,然后使用较新的CentOS版本重新安装您的计算机(由于CentOS 6已经很旧,我强烈建议您以CentOS 7为基础)。
评论
对于未来:在LVM LV(ISTR是RHEL的默认值)上使用OS构建服务器。在没有任何机会破坏系统之前,请创建快照。如果确实中断了系统,则可以在几分钟内恢复到快照。否则,如果一切正常,则可以删除快照。 unix.stackexchange.com/questions/18913。 NB快照不是备份。对于快照无法保存您的情况,您仍然需要备份。
–nigel222
17-4-18在12:48
在Debian / Ubuntu上,他可以启动恢复映像(例如finnix),使用debootstrap,chroot和apt-get install ubuntu-desktop解压缩基本系统。不知道centos / rhel是否具有等效的debootstrap。
–艾德希尔
17年4月19日在8:56
支持CentOS 6直到2020年11月。没有急于升级的趋势(尽管升级到7确实有很多优势)。
–psmears
17年4月19日在9:10
#2 楼
坦白说,因为您做了一些您没有完全理解的事情。 Python是操作系统的重要组成部分,您认为不重要的事情非常重要。从备份还原。删除Python后,
yum
向您显示了一长串也将被删除的软件包。该列表包含yum
本身,coreutils
,net-tools
等必需品。您确认要百胜,您知道自己在做什么,并且仍然想继续进行。结果是系统无法正常工作。这并不奇怪。 记录下来,在新的CentOS版本上这不再可行,因为某些软件包现在被标记为受保护,不能删除,只能重新安装或升级。而且由于CentOS 5现在已经停止销售,因此现在是升级到较新版本的好时机。
评论
哈哈,这很快就升级了(请删除python ==只是擦除整个机器:D)。您是否认为我至少可以恢复/ var / www中的文件,或者完全是foobard?
–tadoman
17年4月15日在20:02
@tadoman:如果您可以启动某种救援系统,则可以挂载磁盘并从中恢复数据(这应该是您的所有用户数据,包括配置文件)。您必须联系您的提供商以讨论他们的环境中可能发生的情况。
–Sven
17年4月15日在22:30
@RussellBorogove:我什么都不说。 yum通过在依赖关系图上移动来进行工作,并删除软件包,直到满足所有依赖关系为止。如果程序包A依赖于程序包B,而程序包B依赖于程序包C,则yum还将删除程序包B,并依次删除程序包A,以满足所有依赖项(如果您尝试删除程序包C)。对于中央程序包(如python),这可能导致在大量看似无关的已删除软件包中。
–Sven
17年4月16日在15:20
@RussellBorogove:是的,确实如此,尽管coreutils在CentOS 5中并不直接依赖于python,而是通过一个或多个中间包-结果相同:删除。
–Sven
17年4月16日在16:32
coreutils的中间软件包的数量似乎是两个。 python-> cracklib-> pam-> coreutils之所以存在依赖关系,是因为存在与cracklib的python绑定,pam是使用cracklib构建的,而su与pam集成在一起。当然,它也删除了许多重要的内容,例如yum来安装更多软件包...
– John Mahowald
17年4月18日在5:50
#3 楼
您所做的某些事情没有完全了解后果该安装是无法恢复的,需要大量工作才能重新安装centos5。这是一个糟糕的计划,因为
CentOS 5即将终止,因此没有更新。考虑到它听起来像是在公共互联网上提供内容的网络服务器,并且您使用面板应用程序来控制它,因此这特别严重。
CentOS> 5将阻止您执行此更新并杀死该盒子。
CentOS 7声称支持适当的主要版本升级。我从未使用过它,但是能够在发行时从7跳到8会非常好。 Debian从一开始就拥有此功能,但是Redhat始终需要重新安装才能进行主要版本跳转。
解决方案
您最好的选择是创建一个全新的VPS,进行全新安装CentOS7,然后重新附加旧的centos5磁盘卷并将其挂载为只读。然后,将数据从旧驱动器复制(而不移动)到新驱动器。
请注意,这是我使用AWS的方法。如果您的VPS提供程序无法将磁盘连接到不同的VM,则您必须调整计划。
无论您做什么,请将来考虑设置自动备份。它不会节省您的费用,但是会使恢复更加灵活。现在,您需要在新的工作服务器中该磁盘上的数据。不要丢失现有磁盘。
#4 楼
这怎么可能呢?好吧,很简单:通过删除对服务器至关重要的部件。
为您准备的下一步:重新部署新的操作系统并从备份中还原数据。
评论
卸载软件包永远不要删除数据。除非有一些软件包维护者被搞砸了,否则确实没有必要恢复任何东西。
–Jörg W Mittag
17年4月16日在11:04
如果OP按照我的建议还原了全新的OS,则肯定会需要还原数据和配置。
–EEAA
17年4月16日在11:06
@JörgWMittag我想您可能误解了“恢复”一词的用法。 EEAA意味着必须重新配置系统,并将现有数据放置在新计算机上的某个位置。尽管我可以看到有人使用该数据库的还原功能,但“还原”可能不是最好的选择。
– jpmc26
17-4-19在2:42
@JörgWMittag哦,很有可能他的数据还在。只是由于他的系统无法运行,他无法访问它。
– Shadur
17年4月20日在4:54
#5 楼
正如Dragon788和其他人在评论中所指出的那样,在Gentoo中,开发人员还维护了一组tinderbox程序包,它们只是针对此类情况的操作系统核心程序集的预构建二进制版本。如果您丢失了核心软件包,则只需将系统引导至LiveCD / DVD,然后将故障服务器的OS驱动器安装好,然后将tinderbox软件包解压缩到文件系统中,然后进行卸载,重新引导,如果正确启动,重新构建软件包以恢复服务器的规格和配置。因此,要在CentOS中执行类似的操作,我认为您需要找到已卸载的RPM的正确版本,然后引导至LiveCD。 / DVD,挂载OS驱动器和chroot(也许...如果您熟悉如何使用rpm的“ --relocate”标志,则可能不需要chroot),然后重新安装这些软件包,然后卸载并重新启动。
当然,由于对CentOS 5的支持已于上个月结束,因此,在正确重新启动系统后,可以将其更新为当前版本。
HTH。
#6 楼
通常,您可以从安装介质启动,然后从chroot
运行命令或进入当前的安装并恢复文件或重新安装软件包。评论
您将无法在/ usr / bin等目录中没有有用的二进制文件的情况下将chroot更改为根目录。这样做的结果与引导进入无效系统的结果相同。也不需要Chroot,因为一旦挂载了文件系统,就可以从/ var / www复制要恢复的文件。
– qris
17年4月16日在11:45
绝对正确,我记得安装Gentoo / Arch时通常会提供一些有用的二进制文件。我从来没有先卸载所有东西。 ;)
–dragon788
17年4月16日在13:04
评论
顺便说一句,apt-get remove apt可以正常工作。我还没有尝试过dpkg-删除dpkg。我敢打赌,这真的很糟糕。您确实有备份吧?
@joshudson我刚刚在VM中生成了Debian 8.4 live CD并尝试了它。结果:#dpkg --remove dpkg吐出dpkg:错误处理dpkg(--remove):这是必不可少的软件包;它不应该被删除。如果我在dpkg的命令行中添加--force-all,则dpkg会发出一整套警告并继续删除自身,并破坏大约两打其他依赖dpkg的软件包。在一个真实的系统上,我很确定您会从中恢复时遇到一些麻烦,但是您可能可以(.debs的魔力很小); CentOS在这方面可能相似,也可能不相似。
@joshudson之所以起作用,是因为发出命令时内存中正在运行apt的副本...一旦完成(程序终止),您将无法再使用apt。
我相信Yum本身是用Python实现的,因此删除Python可以很好地击退自己的脚!