当我杀死-9或拔出电源时,究竟*到底是什么被弄砸了?


13

设定

我已经当了很长时间的程序员,但是我对深层的内部东西还是有点模糊。

现在。我很清楚,这不是一个好主意:

  1. 杀死-9个进程(坏)
  2. 自发拔出正在运行的计算机或服务器上的电源插头(更糟)

但是,有时您只是必须这样做。有时,无论您做什么,一个进程都不会响应,有时,无论您做什么,一台计算机都不会响应。

假设系统通过mod_wsgi运行Apache 2,MySQL 5,PHP 5和Python 2.6.5。

注意:我对Mac OS X最感兴趣,但是与任何UNIX系统相关的答案都可以帮助我。

我的顾虑

每次我必须执行其中之一,尤其是第二次时,我很担心一段时间内某些东西已损坏。某处的某些文件可能已损坏-谁知道哪个文件?计算机上有超过1,000,000个文件。

我经常使用OS X,因此我将通过“磁盘工具”运行“验证磁盘”操作。它不会报告任何问题,但是我仍然对此表示关注。

如果某个地方的配置文件搞砸了怎么办。甚至更糟的是,如果某个地方的二进制文件损坏了怎么办。或者某个脚本文件现在已损坏。如果某些硬件损坏了怎么办?

如果直到下个月(在严重的情况下)腐败或破坏造成灾难的情况下我仍未找到答案,该怎么办?

或者,如果有价值的数据已经丢失怎么办?

我的希望

我希望这些担心和担忧是没有根据的。毕竟,经过多次这样的尝试,还没有发生真正的坏事。最糟糕的是我不得不修复一些MySQL表,但是我似乎没有丢失任何数据。

但是,如果我的担心不是没有根据的,并且在情况1或2中都可能发生真正的损害,那么我希望有一种方法可以检测到并防止这种情况发生。

我的问题

难道是因为现代操作系统旨在确保在这些情况下没有损失?可能是因为现代软件旨在确保没有损失吗?那么现代硬件设计呢?拔下电源插头时有哪些措施?

我的问题是,对于这两种情况,究竟会出现什么错误,应采取哪些步骤加以解决?

我的印象是,可能出错的一件事是某些程序可能没有将其数据刷新到磁盘,因此应该将任何最新的数据写入磁盘(例如,上电前几秒钟) )可能会丢失。但是除此之外呢?而这个5秒钟的数据丢失问题是否会破坏系统?

隐藏在硬盘驱动器上巨大文件林中某个地方的随机文件损坏怎么办?

硬件损坏怎么办?

什么对我最大的帮助

  1. 当您终止-9个进程或拉动整个系统的电源时,内部发生的情况的详细说明。(似乎是即时的,但是有人可以替我放慢速度吗?)

  2. 在这些情况下,所有可能出错的事情的解释,以及(当然是)大概的概率(即,这种可能性很小,但这很可能)...

  3. 描述了现代硬件,操作系统和软件中为防止发生这些情况而造成的损坏或破坏的措施。(安慰我)

  4. 有关在“验证磁盘”之外执行杀死-9或上电后执行操作的说明,以真正确保驱动器上某处没有损坏或损坏。

  5. 可以采取的加强计算机设置的措施,以便如果必须杀死某些物品或必须切断电源,则可以减轻任何潜在的损坏。

  6. 有关二进制文件的一些信息-apache二进制文件或某个库的中间是否有一个随机字节或两个损坏,这是不是真的,直到以后才会出现并引起问题?我如何向自己保证这不是由于拉力或杀死而导致的?

非常感谢!


您要发送kill -9哪些程序?您提到“通过mod_wsgi的Apache 2,MySQL 5,PHP 5和Python 2.6.5”。您要杀死其中一些吗?知道您要杀死的东西将使您对这样做的含义有更直接的反应。另外,实际上是什么使您想要终止进程。知道这一点,也许能够找出问题的根本原因,而不是仅仅了解解决问题的蛮力方法的含义。在MacOS X上,对于现代机器而言,BTW只需按住电源按钮10秒钟即可,而不仅仅是拉动电源,因此残酷程度降低了。
Graham Dumpleton 2010年

我不了解kill -9,但除非您有某种备用电源,否则我很肯定地说出拔下电源插头会杀死所有东西。
John Gardeniers 2010年

Answers:


9

拔下电源会使一切停止飞行,而不会发出警告。kill -9对单个进程具有相同的效果,并用SIGKILL强制终止它。

如果某个进程被内核或电源中断杀死,则不会进行任何清理。这意味着您可能有半写的文件,状态不一致或缓存丢失。通常,您无需担心任何这些,因为有日志记录,退出状态和备用电池。

如果/ tmp中的临时文件位于tmpfs中,则它们将自动消失,但是您可能仍然需要删除特定于应用程序的锁定文件,例如firefox的lock和.parentlock。

如果大多数软件未记录成功的退出状态,则它们足够聪明,可以重试事务。一个典型的邮件系统就是一个很好的例子。如果邮件正在传递,但在中间被切断,则发件人将稍后重试,直到成功为止。

您的文件系统可能已记录日志。如果您正在移动或写入文件,并且文件在中途死亡,则日记文件系统仍将引用原始文件。带日志记录的文件系统将以非破坏性的方式进行更改,保留旧副本,然后仅在回收磁盘上旧副本所占空间之前作为最后一步引用新副本。

现在,如果您有RAID阵列,则它具有各种内存缓冲区,可以提高性能并在断电时提供可靠性。您的文件系统很可能不知道设备中的缓存及其状态,因此认为更改已提交到磁盘,但仍在RAID缓存中。那么,当电源消失时会发生什么呢?希望您的RAID机箱中有功能正常的电池,并且可以对其进行监控。否则,您将有损坏的文件系统需要fsck。

是的,二进制文件中的某些内容可能会损坏,但是我对现代硬件不会担心那么多。如果您真的很偏执,可以使用适当的工具监视磁盘和RAID的运行状况,但是无论如何都应该这样做。进行定期备份并获得不间断电源。


5

在意外关闭中,唯一应损坏的文件是可以写入的文件。在大多数系统上,在任何给定的时间点,您可能都不在写文件。大概。

1杀-9

是POSIX SIGKILL,并且取决于实现。接收到该信号的进程将没有机会进行处理。

1关机

取决于硬件。磁头在驱动力的作用下自动停车,写入缓存中的所有内容都会丢失DRAM刷新,并在几秒钟内衰减为无法修复的损坏。系统内存,CPU缓存,寄存器等也会发生同样的情况。

从wdc.com(google:site:wdc.com保护头停车位)

断电:硬盘驱动器已重置。使用主轴能量将磁头停在着陆区。主轴马达停止。

2-可能出什么问题

打开的文件未完全写出。如果打开文件进行写入,则将导致数据损坏。现代硬件中的文件写入速度很快,并且通常不会给IO带来现代PC的压力。这就像在一条安静的乡间小路上蒙着双眼。大多数时候,你会没事的。

3-对策

请参阅上面的磁盘功能。

查找日志文件系统,它们现在很正常:http : //en.wikipedia.org/wiki/Journaling_file_system

像MS Word或vi这样的软件将写入一个临时文件,而不是原始文件。目的是永远不要让系统处于磁盘上没有一致副本的状态。

Windows保留注册表的副本(这太重要了)Wikipedia:“ Windows 2000保留注册表配置单元(.ALT)的备用副本,并在检测到损坏时尝试切换到该注册表副本”(自那以来,我没有提供过多的技术支持Win2k,所以我不确定MS的新机制是什么)

4-怎么做

以困难程度排序(轻而易举)

  • 保留备份
  • 检查您最近的工作
  • 从单独的磁盘启动,并查找上次修改的日期/时间,以弄清系统在崩溃时可能正在做什么
  • 从单独的磁盘引导,然后将所有文件的md5sums与脱机副本进行比较。

保留备份是最合适的答案,好的备份应该让您回到以前修改的版本。

5

冗余电源?最终用户教育?将胶带和纸板放在电源按钮上?

6

缺少硬件故障,磁盘驱动器损坏,操作系统内核损坏,缺少校验和或在升级过程中崩溃,二进制文件和库未以读写方式打开,因此不会损坏。它发生了,但是很少见。


点+1的+1
Bigbio2002年

4

至于kill -9,这会向进程发送一个信号,让它当场“死亡”。该过程终止(除非它处于不间断的睡眠中,在这种情况下它将变成僵尸)。没有文件被关闭,没有数据被写入,并且程序无法捕获该信号并执行其他操作。没有清理,什么也没有:它只是死了。

今天的文件系统非常强大。诸如XFS,JFS,ext3和ext4之类的东西都具有日志和其他东西来保持文件系统元数据的完整性。

诸如Apache本身之类的二进制文件以及其他二进制文件不太可能因突然断电或系统被破坏而损坏,因为它们要么在内存中要么正在读取。如果从中读取它们(例如,Apache HTTP正在启动),则电涌可能会破坏二进制文件,但似乎不太可能。

我有一个Mac Mini,人们似乎喜欢关闭冷气(无论我告诉他们多少次.....),而且这种情况一直持续下去。

在大多数情况下,只要您不依赖kill -9或定期关闭电源,我都不会太担心。过去的情况更糟。与Solaris 10(以此类推)相比,我更担心(例如)Solaris 2.6。



3

“ kill -9”将不会同步待处理的IO操作。这通常不是问题,但是如果系统承受大量IO负载,则可能会丢失数据。

对于服务器来说,这更是一个问题,其中RAID控制器(无电池后备缓存)可能会缓存写操作并丢失您的数据。

编辑:还有一件事...如果您依赖网络安装的驱动器并具有打开的文件句柄,则很有可能会使文件不一致或损坏。在Windows上,经典的示例是用户在共享上安装Outlook PST文件并失去电源或网络连接时看到的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.