Lỗi sáng thứ hai: sudo rm -rf --no-reserved-root /


146

Xin lưu ý: Các câu trả lời và nhận xét cho câu hỏi này chứa nội dung từ một câu hỏi tương tự khác đã nhận được rất nhiều sự chú ý từ các phương tiện truyền thông bên ngoài nhưng hóa ra lại là câu hỏi lừa bịp trong một loại kế hoạch tiếp thị lan truyền. Vì chúng tôi không cho phép ServerFault bị lạm dụng theo cách như vậy, câu hỏi ban đầu đã bị xóa và câu trả lời được hợp nhất với câu hỏi này.


Đây là một bi kịch giải trí. Sáng nay tôi đang thực hiện một chút bảo trì trên máy chủ sản xuất của mình, khi tôi thực hiện sai lệnh sau:

sudo rm -rf --no-preserve-root /mnt/hetznerbackup /

Tôi đã không phát hiện ra khoảng trống cuối cùng trước đó /và vài giây sau, khi các cảnh báo tràn ngập dòng lệnh của tôi, tôi nhận ra rằng tôi vừa nhấn nút tự hủy. Đây là một chút của những gì đốt cháy trong mắt tôi:

rm: cannot remove `/mnt/hetznerbackup': Is a directory
rm: cannot remove `/sys/fs/ecryptfs/version': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/inode_readahead_blks': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/mb_max_to_scan': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/delayed_allocation_blocks': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/max_writeback_mb_bump': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/mb_stream_req': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/mb_min_to_scan': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/mb_stats': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/trigger_fs_error': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/session_write_kbytes': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/lifetime_write_kbytes': Operation not permitted
# and so on..

Tôi đã dừng nhiệm vụ và cảm thấy nhẹ nhõm khi phát hiện ra rằng dịch vụ sản xuất vẫn đang chạy. Đáng buồn thay, máy chủ không còn chấp nhận khóa công khai hoặc mật khẩu của tôi cho bất kỳ người dùng nào thông qua SSH.

Làm thế nào bạn sẽ di chuyển về phía trước từ đây? Tôi sẽ bơi một biển dây thép gai để lấy lại quyền truy cập SSH đó.

Máy chủ đang chạy Ubuntu-12.04 và được lưu trữ tại Hetzner.


48
Khôi phục từ bản sao lưu. Thành thật mà nói, đây là một trong những kịch bản không dễ dàng trở lại.
MadHatter

310
Làm thế nào để bạn thậm chí gõ --no-preserve-rootvô tình?! : -o
ThatGraemeGuy

144
Greame, các phím giống như ngay cạnh nhau.
MadHatter

38
Công việc thứ ba: Tìm kiếm công việc mới;) Hãy coi đó là một bài học tại sao cần sao lưu.
TomTom

43
Điều này chắc chắn giống như troll đối với tôi. Bạn không thể vô tình gõ --i-really-mean-xóa-my-Whole-root.
psusi

Câu trả lời:


95

Khởi động vào hệ thống cứu hộ do Hetzner cung cấp và kiểm tra xem bạn đã gây ra thiệt hại gì.
Chuyển bất kỳ tệp nào đến một vị trí an toàn và triển khai lại máy chủ sau đó.

Tôi sợ đó là giải pháp tốt nhất trong trường hợp của bạn.


102
Hãy nhìn vào mặt tươi sáng, ít nhất anh ta không có vấn đề gì với việc đau lòng!
metacom

222

Thực tế là? Tại thời điểm này, không có sửa chữa tự động đơn giản / dễ dàng cho việc này. Phục hồi dữ liệu là một khoa học và ngay cả các công cụ cơ bản, phổ biến cũng cần có người ngồi xuống và đảm bảo dữ liệu ở đó. Nếu bạn đang mong đợi phục hồi từ điều này mà không có thời gian chết lớn, bạn sẽ thất vọng.

Tôi khuyên bạn nên sử dụng testdisk hoặc một số công cụ phục hồi cụ thể của hệ thống tệp. Hãy thử một hệ thống, xem nó có hoạt động không, v.v. Không có cách nào thực sự để tự động hóa quy trình nhưng có lẽ bạn có thể cẩn thận thực hiện theo lô.

Điều đó nói rằng, có một vài điều rất đáng sợ trong các câu hỏi và nhận xét phải là một phần của báo cáo hành động của bạn.

Đầu tiên, bạn chạy lệnh ở khắp mọi nơi mà không kiểm tra nó trước. Chạy một lệnh trên một hộp. Sau đó một vài, sau đó nhiều hơn. Về cơ bản nếu có sự cố xảy ra, tốt hơn là để nó ảnh hưởng đến một vài thay vì tất cả các hệ thống của bạn.

Thứ hai

@Tim làm thế nào để sao lưu mà không cần gắn ổ đĩa từ xa trên máy chủ?

Làm tôi sợ Sao lưu cấp một cách là một vấn đề được giải quyết . Rupync có thể được sử dụng để bảo vệ quyền và sao chép các tệp một cách vào một trang web sao lưu. Vô tình một cái gì đó? Cài đặt lại (tốt nhất là tự động) rsync trở lại, và mọi thứ hoạt động. Trong tương lai, bạn có thể sử dụng ảnh chụp nhanh cấp hệ thống tệp với ảnh chụp nhanh btrfs hoặc zfs và vận chuyển chúng để sao lưu cấp hệ thống. Tôi thực sự là đồ chơi với việc tách các máy chủ ứng dụng, cơ sở dữ liệu và lưu trữ và giới thiệu nguyên tắc đặc quyền tối thiểu để bạn có thể phân chia rủi ro của một cái gì đó như thế này ..

Tôi biết có bất cứ điều gì tôi có thể làm. Bây giờ tôi cần nghĩ cách bảo vệ bản thân

Sau khi một cái gì đó đã xảy ra là thời gian tồi tệ nhất để xem xét điều này.

Những gì chúng ta có thể học hỏi từ này?

  1. Sao lưu lưu dữ liệu. Có thể là sự nghiệp.
  2. Nếu bạn có một công cụ và không biết nếu nó có thể làm gì thì nguy hiểm. Một jedi có thể làm những điều tuyệt vời với một thanh kiếm ánh sáng. Một căn phòng đầy tinh tinh với thanh kiếm ánh sáng ... sẽ trở nên lộn xộn.
  3. Không bao giờ chạy một lệnh ở mọi nơi cùng một lúc. Thu gom máy móc thử nghiệm và sản xuất, và tốt nhất là làm máy sản xuất theo từng giai đoạn. Tốt hơn hết là sửa 1 hoặc 10 máy thay vì 100 hoặc 1000.

  4. Lệnh kiểm tra kép và ba. Không có gì xấu hổ khi yêu cầu một đồng nghiệp kiểm tra lại "này, tôi sắp sửa lái xe, bạn có thể tỉnh táo kiểm tra điều này để cuối cùng tôi không xóa sạch ổ đĩa không?". Một cái bọc cũng có thể giúp ích, nhưng không có gì đánh bại được một đôi mắt ít mệt mỏi hơn.

bạn có thể làm gì bây giờ? Nhận một email ra cho khách hàng. Hãy cho họ biết có thời gian chết và có những thất bại thảm hại. Nói chuyện với những người cao hơn, hợp pháp, bán hàng và như vậy và xem làm thế nào bạn có thể giảm thiểu thiệt hại. Bắt đầu lập kế hoạch để phục hồi, và nếu cần, bạn sẽ phải, tốt nhất là thuê thêm tay. Tệ nhất, lên kế hoạch chi rất nhiều tiền cho việc phục hồi. Ở giai đoạn này, bạn sẽ làm việc để giảm thiểu sự rơi ra cũng như các sửa chữa kỹ thuật.


9
@MarcoMarsala Nếu bạn đã gắn bất cứ thứ gì trước khi sử dụng rsync, bạn sẽ không làm đúng. Bạn nên sử dụng rsync trên ssh.
Michael Hampton

67
Tôi muốn thêm vào câu trả lời tuyệt vời này: Bước ra khỏi máy tính. Đừng cố gắng sửa chữa bất cứ điều gì cho đến khi bạn bình tĩnh lại. Bạn đang xem xét một số thời gian chết nghiêm trọng; dành thời gian để suy nghĩ mọi thứ thay vì phá hỏng hệ thống của bạn thậm chí nhiều hơn (như trong ddvấn đề trên) sẽ không làm cho nó tồi tệ hơn.
Jenny D

22
Bất cứ ý tưởng tại sao lệnh thực sự chạy? Nếu $foo$barcả hai đều không được xác định, rm -rf /nên đã gửi nhầm --no-preserve-rootthông báo. Cách duy nhất tôi có thể nghĩ rằng điều này sẽ thực sự hoạt động trên máy CentOS7 là nếu được $barđánh giá *, vì vậy những gì đã được chạy rm -rf /*.
terdon

9
Tôi yêu phong cách trong "Vô tình một cái gì đó?". Điều đó có nghĩa là từ "bị xóa" đã bị "xóa" hoặc "bỏ" một cách vô tình.
sehe

20
@MarcoMarsala cũng ít nhất bạn nổi tiếng tại independent.co.uk/life-style/gadgets-and-tech/news/...
Martin Smith

92

Khi bạn xóa công cụ với rm -rf --no-preserve-root, nó không thể phục hồi. Rất có khả năng bạn đã mất tất cả các tệp quan trọng.

Như @faker đã nói trong câu trả lời của mình, cách hành động tốt nhất là chuyển các tệp đến một vị trí an toàn và triển khai lại máy chủ sau đó.

Để tránh những tình huống tương tự trong tương lai, tôi đề nghị bạn:

  • Hãy sao lưu hàng tuần, hoặc ít nhất hai tuần một lần. Điều này sẽ giúp bạn có được dịch vụ bị ảnh hưởng sao lưu với MTTR ít nhất có thể.

  • Đừng làm việc tận gốc khi không cần thiết . Và luôn suy nghĩ kỹ trước khi làm bất cứ điều gì. Tôi khuyên bạn cũng nên cài đặt safe-rm .

  • Đừng gõ các tùy chọn mà bạn không có ý định gọi , chẳng hạn như --no-preserve-root, hoặc --permission-to-kill-kittens-explicitly-grantedcho vấn đề đó.


18
Tương tự, trừ khi bạn THỰC SỰ Ý NGH ITA, đừng thêm --please-destroy-my-drivetham số vào hdparm.
MikeyB

3
Tôi muốn thêm vào; "Kiểm tra kỹ các đối số của bạn (và các tùy chọn) khi làm việc với quyền root", "Kiểm tra CurrentWorkingDirectory của bạn (trước khi thực hiện một số thứ như rm -rf *)" và "Sử dụng đường dẫn đầy đủ cho các lệnh (không chuyển tiếp trên $ PATH).
Baard Kopperud

47

Tôi đã có cùng một vấn đề nhưng chỉ cần thử nghiệm với một ổ cứng, tôi đã mất tất cả. Tôi không biết nó có hữu ích không nhưng không cài đặt bất cứ thứ gì , không ghi đè lên dữ liệu của bạn , bạn cần gắn ổ cứng và khởi chạy một số công cụ pháp y như chúng tôi khám nghiệm tử thi, photorec, Testdisk.

Tôi thực sự khuyên bạn nên dùng Testdisk, với một số lệnh cơ bản, bạn có thể khôi phục dữ liệu của mình nếu bạn không ghi đè lên nó.


8
Tôi chắc chắn sẽ khuyên bạn nên lưu trữ ngoại tuyến nếu có thể và gắn lại dưới dạng 'chỉ đọc' nếu bạn có thể. Cho dù với một máy chủ sống hoặc máy chủ khác.
mhouston100

2
Tôi thậm chí còn cân nhắc việc thực hiện một bản sao bit của đĩa gốc sang một đĩa mới từ một giá đỡ chỉ đọc của đĩa gốc để đảm bảo an toàn.
Jim

3
«Những công cụ này sẽ không phục hồi tên tệp và đường dẫn» Có, chúng có. Trong số 3 công cụ được đề cập, chỉ có một (Photorec) thực hiện khắc.
Andrea Lazzarotto

34

Cách tốt nhất để khắc phục một vấn đề như thế này là không có nó ngay từ đầu.

Không nhập thủ công lệnh "rm -rf" có dấu gạch chéo trong danh sách đối số. (Đặt các lệnh như vậy trong tập lệnh shell với các thói quen xác thực / vệ sinh thực sự tốt để bảo vệ bạn khỏi làm điều gì đó ngu ngốc thì khác.)

Đừng làm điều đó.
Không bao giờ. Nếu bạn nghĩ rằng bạn cần phải làm điều đó, bạn không suy nghĩ đủ mạnh.

Thay vào đó, hãy thay đổi thư mục làm việc của bạn thành cha mẹ của thư mục mà bạn dự định bắt đầu xóa, để mục tiêu của lệnh rm không yêu cầu dấu gạch chéo:

cd / mnt

sudo rm -rf hetznerbackup


31
Tôi luôn đặt -rf ở cuối danh sách đối số, vì vậy rm /bla/foo/bar -rf. Ít nhất theo cách đó tôi sẽ không gặp nhiều rắc rối khi tôi nhanh chóng nhấn trở lại sau khi gõ rm /phần đó.
Jens Timmerman

5
Tương tự, khi xóa các tệp "* ~", tôi nhập dấu ngã trước, sau đó thêm vào dấu hoa thị.
tekknolagi

4
Vì vậy, bạn muốn xóa nhà của bạn hơn tất cả mọi thứ trong thư mục hiện tại?!?
greg0ire

@ greg0ire Không, tôi nghĩ rằng anh ấy muốn nói rằng, bên trong /mnt/hetznerbackup, anh ấy đã phải sử dụng "/" để đánh dấu mọi thứ trong thư mục đó .. nhưng từ cha mẹ, chỉ hetznerbackuplà đủ, không có dấu gạch chéo.
T.Todua

1
@tazotodua: Tôi đã tham khảo bình luận của
tekknolagi

16

Tôi sẽ cố gắng khôi phục máy sao lưu, nơi lưu trữ tất cả các bản sao:

  • Bước 1 - Tạo bản sao lưu của các ổ đĩa "máy dự phòng" đã xóa này bằng ddcomand.
  • Bước 2 - Sử dụng testdiskđể khôi phục tập tin.

Vì vậy, giả sử bạn muốn khôi phục 1TB, Bạn sẽ cần thêm 2TB, 1TB để sao lưu (bước 1) cộng với 1TB để khôi phục (bước 2).

Tôi đã mắc lỗi tương tự với bí danh rm -fr [chuông điện thoại] và cd vào thư mục quý giá. Bây giờ tôi luôn nghĩ hai lần và kiểm tra lại vài lần trước khi tôi sử dụng lệnh rm hoặc dd.


6
Khá nhiều zeroed đĩa của bạn bằng cách làm điều đó. Điều đó thực sự làm cho nó khó khăn hơn rất nhiều để phục hồi. Có một lý do chính đáng để OP đề nghị bạn thử sử dụng testdisk và khôi phục trước, và trong khi cú pháp của dd có thể hơi kỳ lạ, đó là lý do chính đáng để kiểm tra gấp đôi và gấp ba trước khi bạn chạy lệnh. Bạn chỉ xóa sạch một máy chủ, phải không?
Journeyman Geek

1
Bạn vẫn có thể phục hồi, tùy thuộc vào thời gian bạn cho phép ddxóa cơ hội cuối cùng của mình.
Abc Xyz

129
Rất tiếc phải nói điều đó, nhưng tôi cảm thấy rất troll trong câu hỏi này ...
tymik

3
hy vọng bạn cảm thấy troll nhỏ trong câu trả lời :)
Abc Xyz

5
Một cách trung thực. Tôi không chắc bạn có thật không. Nếu là bạn, có lẽ bạn đang làm sai ...
còn lại

7

Như đã đề cập trong một câu trả lời khác, Hetzner có một hệ thống cứu hộ. Nó bao gồm cả tùy chọn netboot với quyền truy cập ssh cũng như một applet java để cung cấp cho bạn màn hình và bàn phím trên vserver của bạn.

Nếu bạn muốn khôi phục càng nhiều càng tốt, khởi động lại máy chủ vào hệ thống netboot, sau đó đăng nhập và tải xuống hình ảnh của hệ thống tập tin bằng cách đọc từ inode thiết bị thích hợp.

Tôi nghĩ một cái gì đó như thế này sẽ hoạt động:

ssh root@host cat /dev/sda > server.img

Tất nhiên việc chuyển hướng được thực hiện bởi shell trước khi lệnh ssh được gọi, vì vậy server.img là một tệp cục bộ. Nếu bạn chỉ muốn hệ thống tập tin gốc chứ không phải đĩa đầy đủ, hãy thay thế sdabằng cách sda3giả sử bạn đang sử dụng cùng một hình ảnh như tôi.


có thể có thể là: ssh root@host cat /dev/sda | gzip -c - > /path/to/dir_on_huge_partition/server.img.gz(gzip đang hoạt động sẽ hoặc không giúp đỡ tùy thuộc vào nội dung của hệ thống tập tin là gì ...)
Olivier Dulac

@OlivierDulac Sử dụng gzip theo cách đó sẽ gửi dữ liệu không nén qua mạng và sau đó nén dữ liệu ở phía bên nhận. Tôi giả sử kết quả bạn dự định đạt được là nén dữ liệu trong khi được truyền. Hình ảnh cục bộ có thể được lưu trữ nén hoặc không, nhưng các công cụ bạn muốn áp dụng cho hình ảnh đó sau này sẽ không hoạt động với phiên bản nén. Nếu tất cả những gì bạn muốn đạt được là nén dữ liệu trong khi truyền, bạn có thể sử dụng tính năng nén trong ssh. Nó có thể được kích hoạt -Cnếu nó chưa được kích hoạt trong cấu hình của bạn.
kasperd

2
Tôi đã cố gắng nhiều hơn để giảm kích thước của tập tin. Nhưng nếu bạn muốn tiết kiệm băng thông (ý tưởng tốt): chỉ cần thêm dấu ngoặc kép: ssh root@host "cat /dev/sda | gzip -c - " > /path/to/dir_on_huge_partition/server.img.gz(tùy chọn -c của ssh thường cũng tốt, nhưng bạn vẫn cần nén ở cuối, vì ssh sẽ chỉ nén ở lối vào của đường hầm và giải nén trước khi gửi đến thiết bị xuất chuẩn)
Olivier Dulac

2

Làm thế nào bạn sẽ di chuyển về phía trước từ đây?

Tôi sẽ thề sẽ sử dụng rmcho đến hết đời và nghĩ rằng thật điên rồ khi thùng rác không phải là lệnh loại bỏ mặc định trên các hệ thống nix.

https://github.com/andreafrancia/trash-cli

Tôi chắc chắn rằng đó là thứ đầu tiên tôi cài đặt trên một hệ thống hoàn toàn mới và thay alias rmvào đó là thứ gì đó bảo mọi người sử dụng trash-clithay thế. Nó cũng sẽ bao gồm một ghi chú về một bí danh khác thực sự chạy /bin/rmnhưng bảo họ tránh sử dụng nó trong hầu hết các trường hợp.

:( Câu chuyện có thật


2
Theo kinh nghiệm của tôi, những loại công cụ này giống như một sự phiền toái hơn là một sự trợ giúp thực sự - sớm hay muộn và sau một vài lời chửi thề, bạn sẽ loại bỏ nó. Máy trạm có thể ổn, nhưng trong nhiều trường hợp nếu không phải là hầu hết các trường hợp khi bạn đang thực hiện công việc quản trị trên máy chủ, bạn thực sự cần phải xóa dữ liệu, không chỉ di chuyển nó sang nơi khác (và nếu đó là trường hợp, chỉ cần sử dụng mv thay thế). Ngoài ra, việc tự động di chuyển dữ liệu vào thư mục thùng rác có thể dẫn đến các vấn đề nghiêm trọng (ví dụ: rác không nằm trên cùng hệ thống tệp, bảo mật).
maetthu

@maetthu Oh tất nhiên mọi thứ được xóa sau khi chúng đã vào thùng rác trong một số ngày nhất định. Máy tính để bàn Ubuntu thực hiện việc này với các mục đã bị bỏ vào thùng rác hơn 30 ngày. Trên một máy chủ, bạn có thể muốn một cái gì đó ngắn hơn, ví dụ. trash-empty 5trong một cron. Vấn đề là cho phép bạn một số thời gian ân hạn bởi vì con người phạm sai lầm.
Gerry

Không phải là tốt hơn để có một kế hoạch phục hồi desaster hoạt động thay vì cấm các công cụ hệ thống thiết yếu?
dùng292812

@ user292812 Tôi không đề xuất cấm / bin / rm, chỉ là nó không nên là lựa chọn đầu tiên trong hầu hết các trường hợp (lưu ý bí danh / bin / rm). Câu hỏi của bạn cũng cho thấy một lựa chọn sai giữa phục hồi thảm họa và tùy chọn xóa thân thiện với con người. Bạn nên có cả hai.
Gerry

1
Một quá trình loại bỏ hai bước có thể tiết kiệm rất nhiều rắc rối: 1. di chuyển đến thùng rác (bằng lời nói), 2. thùng rác. Tôi bí danh một kịch bản như vậy thành "rm" và nó đã cứu tôi khỏi việc vô tình xóa những thứ quan trọng nhiều lần.
Sam Watkins

1

Tôi sẽ tư vấn trong trường hợp như vậy là unmount và sử dụng debugfs , và với sự trợ giúp của lsdel, bạn có thể liệt kê tất cả các tệp đã bị xóa gần đây, nơi không được dọn sạch từ các tạp chí và sau đó kết xuất các tệp cần thiết. Liên kết tìm kiếm nhanh cho cùng: http://www.linuxvoodoo.com/resource/howtos/debugfs

hy vọng nó sẽ giúp được ai đó ;)

Và vâng, một khi các đề xuất là tạo kịch bản, điều này đã chuyển ream rm sang real.rm và symlinc mv thành rm ;)


-2

Dừng tất cả tiến trình máy chủ và mọi thứ có thể gây ra đĩa i / o ... sau đó chạy testdisk, nó sẽ nằm trong ngăn xếp phần mềm của bạn. Nếu bạn có quyền truy cập vật lý, hãy sử dụng một livecd với testdisk.


1
Tôi hoàn toàn không hiểu tại sao bạn nghĩ rằng ba câu trả lời cung cấp cùng một gợi ý là không đủ?
kasperd
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.