Cái gì * chính xác * bị vặn khi tôi giết -9 hoặc kéo điện?


13

Thiết lập

Tôi đã là một lập trình viên khá lâu rồi nhưng tôi vẫn hơi mơ hồ về những thứ nội tâm sâu sắc.

Hiện nay. Tôi cũng nhận thức được rằng đó cũng không phải là một ý tưởng hay:

  1. giết -9 một quá trình (xấu)
  2. Tự nhiên rút phích cắm điện trên máy tính hoặc máy chủ đang chạy (tệ hơn)

Tuy nhiên, đôi khi bạn chỉ đơn giản là phải. Đôi khi một quá trình sẽ không phản hồi bất kể bạn làm gì và đôi khi một máy tính sẽ không phản hồi, bất kể bạn làm gì.

Giả sử một hệ thống chạy Apache 2, MySQL 5, PHP 5 và Python 2.6.5 thông qua mod_wsgi.

Lưu ý: Tôi quan tâm nhất về Mac OS X ở đây, nhưng câu trả lời liên quan đến bất kỳ hệ thống UNIX nào sẽ giúp tôi hiểu.

Nỗi lo của tôi

Mỗi lần tôi phải làm một trong những điều này, đặc biệt là lần thứ hai, tôi rất lo lắng trong một khoảng thời gian mà một cái gì đó đã bị phá vỡ. Một số tệp ở đâu đó có thể bị hỏng - ai biết tệp nào? Có hơn 1.000.000 tệp trên máy tính.

Tôi thường sử dụng OS X, vì vậy tôi sẽ chạy thao tác "Xác minh đĩa" thông qua Tiện ích đĩa. Nó sẽ báo cáo không có vấn đề, nhưng tôi vẫn lo ngại về điều này.

Điều gì xảy ra nếu một số tập tin cấu hình ở đâu đó đã bị hỏng. Hoặc thậm chí tệ hơn, nếu một tệp nhị phân ở đâu đó bị hỏng. Hoặc một tập tin script ở đâu đó bị hỏng bây giờ. Điều gì nếu một số phần cứng bị hư hỏng?

Điều gì sẽ xảy ra nếu tôi không tìm hiểu về nó cho đến tháng tới, trong một kịch bản quan trọng, khi tham nhũng hoặc thiệt hại gây ra thảm họa?

Hoặc, nếu dữ liệu có giá trị đã bị mất thì sao?

Niềm hy vọng của tôi

Hy vọng của tôi là những mối quan tâm và lo lắng là không có cơ sở. Rốt cuộc, sau khi làm điều này nhiều lần trước đó, vẫn chưa có gì thực sự tồi tệ xảy ra. Điều tồi tệ nhất là tôi đã phải sửa chữa một số bảng MySQL, nhưng dường như tôi không bị mất bất kỳ dữ liệu nào.

Nhưng, nếu những lo lắng của tôi không phải là không có cơ sở, và thiệt hại thực sự có thể xảy ra trong cả tình huống 1 hoặc 2, thì hy vọng của tôi là có một cách để phát hiện và ngăn chặn nó.

Những câu hỏi của tôi)

Điều này có thể là do các hệ điều hành hiện đại được thiết kế để đảm bảo rằng không có gì bị mất trong các kịch bản này? Điều này có thể là do phần mềm hiện đại được thiết kế để đảm bảo không mất gì? Thiết kế phần cứng hiện đại thì sao? Biện pháp nào được đưa ra khi bạn rút phích cắm điện?

Câu hỏi của tôi là, đối với cả hai kịch bản này, chính xác điều gì có thể sai, và cần thực hiện các bước nào để khắc phục nó?

Tôi có ấn tượng rằng một điều có thể sai là một số chương trình có thể không đưa dữ liệu của họ vào đĩa, do đó, bất kỳ dữ liệu nào gần đây được cho là ghi vào đĩa (giả sử, vài giây trước khi mất điện ) có thể bị mất. Nhưng những gì về điều đó ngoài? Và vấn đề mất dữ liệu 5 giây này có làm hỏng hệ thống không?

Thế còn tham nhũng của các tệp ngẫu nhiên ẩn ở đâu đó trong rừng tệp khổng lồ trên ổ cứng của tôi thì sao?

Còn hư hỏng phần cứng thì sao?

Điều gì sẽ giúp tôi nhiều nhất

  1. Mô tả chi tiết về những gì diễn ra trong nội bộ khi bạn giết -9 một quá trình hoặc kéo sức mạnh trên toàn hệ thống. (có vẻ như ngay lập tức, nhưng ai đó có thể làm chậm nó cho tôi không?)

  2. Giải thích về tất cả những điều có thể sai trong các tình huống này, cùng với xác suất (tất nhiên là thô) (nghĩa là điều này rất khó xảy ra, nhưng điều này rất có thể) ...

  3. Mô tả các biện pháp áp dụng trong phần cứng, hệ điều hành và phần mềm hiện đại, để ngăn ngừa thiệt hại hoặc tham nhũng khi những tình huống này xảy ra. (để an ủi tôi)

  4. Hướng dẫn những việc cần làm sau khi giết -9 hoặc kéo điện, ngoài việc "xác minh đĩa", để thực sự đảm bảo không có gì bị hỏng hoặc bị hỏng ở đâu đó trên ổ đĩa.

  5. Các biện pháp có thể được thực hiện để củng cố một thiết lập máy tính để nếu có thứ gì đó phải bị giết hoặc phải rút điện, mọi thiệt hại tiềm tàng đều được giảm nhẹ.

  6. Một số thông tin về tệp nhị phân - không đúng là tệp nhị phân apache hoặc thư viện nào đó có thể có một byte ngẫu nhiên hoặc hai bị hỏng ở giữa, điều đó sẽ không xuất hiện và gây ra sự cố cho đến sau này? Làm thế nào tôi có thể đảm bảo với bản thân mình rằng điều này đã không xảy ra do sức mạnh hoặc sự giết chóc?

Cám ơn rất nhiều!


Những quy trình bạn đang gửi kill -9? Bạn đề cập đến 'Apache 2, MySQL 5, PHP 5 và Python 2.6.5 thông qua mod_wsgi.' Bạn đang giết một số trong số này. Biết những gì bạn đang giết sẽ cho phép phản ứng trực tiếp hơn về ý nghĩa của việc làm như vậy. Ngoài ra, những gì thực sự xảy ra để làm cho bạn muốn giết các quá trình. Biết điều này và có thể có thể xác định nguyên nhân gốc rễ cho vấn đề của bạn thay vì bạn chỉ hiểu ý nghĩa của phương pháp vũ phu để khắc phục nó. BTW, trên MacOS X, đối với các máy hiện đại, giữ nút nguồn trong 10 giây thay vì chỉ kéo điện, sẽ ít tàn bạo hơn.
Graham Dumpleton

Tôi không biết về kill -9 nhưng trừ khi bạn có một số nguồn cung cấp năng lượng dự phòng, tôi nghĩ rằng khá an toàn khi nói rằng MỌI THỨ bị giết khi bạn rút phích cắm điện.
John Gardeniers

Câu trả lời:


9

Kéo điện khiến mọi thứ dừng lại trong chuyến bay, không có cảnh báo. kill -9 có tác dụng tương tự đối với một quá trình duy nhất, mạnh mẽ chấm dứt nó bằng SIGKILL .

Nếu một quá trình bị giết bởi kernel hoặc mất điện, nó sẽ không thực hiện bất kỳ việc dọn dẹp nào. Điều đó có nghĩa là bạn có thể có các tệp được viết một nửa, trạng thái không nhất quán hoặc bộ nhớ cache bị mất. Bạn thường không phải lo lắng về điều này vì nhật ký, trạng thái thoát và pin dự phòng.

Các tệp tạm thời trong / tmp sẽ tự động biến mất nếu chúng ở trong tmpfs, nhưng bạn vẫn có thể có các tệp khóa dành riêng cho ứng dụng được đặt xung quanh để xóa, như khóa và .parentlock cho firefox.

Hầu hết các phần mềm đủ thông minh để thử lại một giao dịch nếu nó không ghi lại trạng thái thoát thành công. Một ví dụ điển hình của việc này là một hệ thống thư thông thường. Nếu một tin nhắn đang được gửi, nhưng bị cắt ở giữa, người gửi sẽ thử lại sau cho đến khi nhận được thành công.

Hệ thống tập tin của bạn có thể được ghi lại. Nếu bạn đang di chuyển hoặc viết một tập tin và nó chết giữa dòng, hệ thống tập tin được ghi lại sẽ vẫn tham chiếu bản gốc. Hệ thống tập tin được ghi nhật ký sẽ thực hiện các thay đổi không phá hủy, để lại bản sao cũ, sau đó chỉ tham chiếu bản sao mới như bước cuối cùng trước khi lấy lại không gian các bản sao cũ bị chiếm trên đĩa.

Bây giờ nếu bạn có một mảng RAID, nó có tất cả các loại bộ nhớ để tăng hiệu suất và cung cấp độ tin cậy khi mất điện. Nhiều khả năng hệ thống tập tin của bạn sẽ không biết về bộ nhớ cache trong thiết bị và trạng thái của chúng, vì vậy nó nghĩ rằng một sự thay đổi đã được cam kết với đĩa, nhưng nó vẫn nằm trong bộ đệm RAID ở đâu đó. Vậy chuyện gì xảy ra khi mất điện? Hy vọng rằng bạn có một pin chức năng trong vỏ RAID và bạn theo dõi nó. Nếu không, bạn có một hệ thống tập tin bị hỏng để fsck.

Vâng, một vài bit có thể bị hỏng trong hệ nhị phân, nhưng tôi sẽ không lo lắng nhiều về phần cứng hiện đại. Nếu bạn thực sự hoang tưởng, bạn có thể theo dõi sức khỏe của đĩa và RAID bằng các công cụ thích hợp, nhưng dù sao bạn cũng nên làm điều đó. Thực hiện sao lưu thường xuyên và nhận được một nguồn cung cấp điện liên tục.


5

Trong trường hợp tắt đột ngột, các tệp duy nhất bị hỏng là các tệp được mở để ghi. Trên hầu hết các hệ thống tại bất kỳ thời điểm nào, bạn có thể không ghi vào tệp. Có lẽ.

1 giết -9

là POSIX SIGKILL và phụ thuộc vào việc triển khai. Quá trình nhận được tín hiệu này sẽ không có cơ hội để xử lý nó.

1 Tắt nguồn

phụ thuộc vào phần cứng. Các đầu tự động đỗ theo đà ổ đĩa và Mọi thứ trong bộ đệm ghi của bạn sẽ mất DRAM làm mới và phân rã thành tham nhũng không thể khắc phục trong vòng vài giây. Điều tương tự cũng xảy ra với bộ nhớ hệ thống, bộ đệm CPU, các thanh ghi, v.v.

Từ wdc.com (google: site: wdc.com Bãi đậu xe bảo vệ)

Mất nguồn: Ổ cứng được đặt lại. Đầu được đỗ trong vùng hạ cánh sử dụng năng lượng trục chính. Động cơ trục chính dừng lại.

2 - những gì có thể đi sai

các tập tin còn mở được viết không đầy đủ. Nếu một tệp được mở để viết, sẽ có dữ liệu bị hỏng. Tập tin ghi trong phần cứng hiện đại là PC nhanh và hiện đại thường không bị căng thẳng với IO. Nó giống như đi bịt mắt trên một con đường đất nước yên tĩnh. Hầu hết thời gian, bạn sẽ ổn thôi.

3 - biện pháp đối phó

xem ở trên để biết những gì đĩa làm.

Tra cứu các hệ thống tệp được ghi nhật ký, hiện tại chúng rất bình thường: http://en.wikipedia.org/wiki/Journaling_file_system

Phần mềm như MS Word hoặc vi sẽ ghi vào một tệp tạm thời chứ không phải là bản gốc. Mục tiêu là không bao giờ rời khỏi hệ thống ở trạng thái không có bản sao nhất quán trên đĩa.

Windows giữ các bản sao của sổ đăng ký (nó quá quan trọng) Wikipedia: "Windows 2000 giữ một bản sao thay thế của các sổ đăng ký (.ALT) và cố gắng chuyển sang đăng ký khi phát hiện tham nhũng" (Tôi đã không hỗ trợ công nghệ nặng Win2k, vì vậy tôi không chắc cơ chế mới của MS là gì)

4 - phải làm gì

Theo thứ tự độ khó (dễ-khó)

  • Giữ bản sao lưu
  • Kiểm tra những gì bạn đã làm việc cuối cùng trên
  • Khởi động từ một đĩa riêng và tìm kiếm ngày / lần sửa đổi cuối cùng để tìm hiểu xem sytem có thể đã làm gì vào thời điểm xảy ra sự cố
  • Khởi động từ một đĩa riêng và so sánh md5sums của tất cả các tệp của bạn với một bản sao ngoại tuyến.

Giữ bản sao lưu là câu trả lời thích hợp nhất, bản sao lưu tốt sẽ cho phép bạn quay lại phiên bản đã sửa đổi trước đó.

5

Dự phòng năng lượng? Giáo dục người dùng cuối? Đặt băng và các tông qua nút nguồn?

6

Thiếu các sự cố phần cứng, trình điều khiển đĩa bị hỏng, nhân hệ điều hành bị hỏng, không có kiểm tra hoặc sự cố trong quá trình nâng cấp, các tệp nhị phân và thư viện không được mở đọc-ghi để chúng không bị hỏng. Nó xảy ra, nhưng nó hiếm.


+1 cho điểm # 6
Bigbio2002

4

Đối với kill -9, điều này sẽ gửi tín hiệu cho quá trình "chết" ngay tại chỗ. Quá trình chết (trừ khi nó ở trong giấc ngủ không bị gián đoạn, trong trường hợp đó nó trở thành một thây ma). Không có tệp nào bị đóng, không có dữ liệu nào được ghi ra và chương trình không thể bắt được tín hiệu này và làm một cái gì đó khác. Không dọn dẹp, không có gì: nó chỉ chết.

Hệ thống tập tin ngày nay rất mạnh mẽ; những thứ như XFS, JFS, ext3 và ext4 đều có tạp chí và những thứ khác để giữ nguyên siêu dữ liệu của hệ thống tệp.

Các nhị phân như chính Apache và các loại khác không có khả năng bị hỏng do mất điện đột ngột hoặc bị giết bởi hệ thống, vì chúng nằm trong bộ nhớ hoặc đang được đọc; nếu chúng được đọc từ (ví dụ, Apache HTTP đang bắt đầu), có khả năng một sự gia tăng sức mạnh có thể làm hỏng nhị phân, nhưng có vẻ như không thể.

Tôi có một chiếc Mac Mini mọi người dường như muốn tắt lạnh (cho dù tôi có nói với họ bao nhiêu lần đi chăng nữa) và nó vẫn tiếp tục.

Đối với hầu hết các phần ,, miễn là bạn không dựa vào kill -9 hoặc tắt nguồn thường xuyên, tôi sẽ không lo lắng quá nhiều. Mọi thứ đã tồi tệ hơn nhiều trong quá khứ; Tôi lo lắng nhiều hơn về (ví dụ) Solaris 2.6 so với Solaris 10 (v.v.).



3

"Kill -9" sẽ không đồng bộ hóa hoạt động IO đang chờ xử lý. Đây thường không phải là một vấn đề, nhưng nếu hệ thống đang tải IO nặng, bạn có thể mất dữ liệu.

Đó là một vấn đề với các máy chủ, trong đó bộ điều khiển RAID (không có bộ đệm được hỗ trợ bởi pin) có thể ghi bộ đệm và mất dữ liệu của bạn.

Chỉnh sửa : Một điều nữa ... nếu bạn phụ thuộc vào các ổ đĩa gắn trên mạng và có các tệp xử lý tệp mở, bạn rất có thể để tệp không nhất quán hoặc bị hỏng. Trên Windows, ví dụ kinh điển về điều này nơi bạn thấy điều này là khi người dùng gắn các tệp Outlook PST trên chia sẻ và mất kết nối nguồn hoặc kết nối mạng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.