Vô tình làm dd / dev / sda


35

Tôi đã viết một hình ảnh ISO vào đĩa cứng của tôi bằng cách sử dụng sudo dd if=image.iso of=/dev/sda. Ý tôi là /dev/sdc, và bây giờ chạy sudo fdisk -lchỉ trả về một phân vùng trên / dev / sda trong khi được cho là 6. Có thể khôi phục dữ liệu của tôi không?

Tôi chưa tắt (khởi động lại) máy tính của tôi.


24
ddđã hiển thị lại khuôn mặt 'Kẻ hủy diệt dữ liệu' xấu xí của nó :-( Nó đã ghi đè lên phần đầu của ổ đĩa (tương ứng với kích thước của tệp iso). Dữ liệu bị mất. Bạn đã có bản sao lưu gần đây của tập tin mà bạn không thể đủ khả năng để mất? nếu không, bạn phải chuẩn bị cho công việc khó khăn để sửa chữa các hệ thống bảng phân vùng và tập tin, tốt nhất về một bản sao nhân bản sử dụng Testdisk , và nếu thất bại, thậm chí công việc khó khăn hơn để khôi phục dữ liệu tập tin được tìm thấy 'đằng sau' một phần của ổ đĩa bị ghi đè. Bạn có thể sử dụng PhotoRec cho mục đích đó. Xem liên kết này, cssecurity.org
sudodus

6
Là ổ đĩa gpt được phân vùng, nó có lợi thế của bảng phân vùng sao lưu ở cuối ổ đĩa. Chỉ có sự khởi đầu của ổ đĩa theo kích thước của ISO đã bị ghi đè hoàn toàn và bị mất. Tùy thuộc vào kích thước của các phân vùng sau đó bạn có thể khôi phục một số hoặc hầu hết các phân vùng khác.
oldfred

10
@sudodus " ddđã thể hiện lại khuôn mặt 'Kẻ hủy diệt dữ liệu' xấu xí của nó" - Ngoại trừ việc không có gì để làm dd, đó là việc truy cập trực tiếp vào thiết bị đĩa dưới dạng root. Bất kỳ công cụ nào khác cũng có thể có tác dụng tương tự. cat image.iso > /dev/sdasẽ có tác dụng chính xác như vậy. Hoặc pv .... Hoặc, ở một mức độ nào đó, thậm chí vi /dev/sda. Trên thực tế, điều này làm tôi nhớ đến câu chuyện Linus Torvalds đã cố gắng quay số vào mạng bằng thiết bị ổ cứng của mình chứ không phải thiết bị modem, ghi đè khởi động ổ đĩa của anh ấy bằng cách bắt tay quay số . Không có gì để làm với dd.
marcelm

4
Làm thế nào lớn chính xác là .isotập tin của bạn ? Bạn đã làm gián đoạn dd, hoặc nó đã chạy để hoàn thành?
marcelm

4
@marcelm, Bạn nói đúng. Nhưng trong cuộc sống thực, mọi người đang sử dụng ddnhư thế này (cho mục đích này), vì vậy tôi nghĩ rằng cảnh báo 'Kẻ hủy diệt dữ liệu' có liên quan, mặc dù cảnh báo hoàn toàn chính xác nên dài hơn: "Không sử dụng một dòng lệnh như sudo dd if=image.iso of=/dev/sdxsao chép vào một khối Sử dụng một công cụ giúp bạn xác định và chọn đúng thiết bị đích và có điểm kiểm tra cuối cùng, để bạn có thể kiểm tra kỹ xem bạn sẽ sao chép từ tệp iso vào đúng thiết bị đích, ví dụ: StartupDiskCreator, Disks, mkusb , Win32DiskImager. "
sudodus

Câu trả lời:


65

Vì máy tính của bạn vẫn đang bật, bạn có cơ hội tốt để lưu mọi thứ.

Đầu tiên, sysfshiển thị kernel trong khung nhìn bộ nhớ của các bảng phân vùng. Ngay bây giờ, kernel của bạn chưa đọc lại bảng của đĩa và nó nhớ phân vùng của bạn. Bên trong /sys/block/sda/, nên có một thư mục cho mỗi phân vùng. Mỗi thư mục con như vậy chứa một tệp startvà một tệp size, đại diện cho vị trí và kích thước của phân vùng, trong các cung. Chạy fdiskvà sau đó tạo lại mỗi phân vùng (theo thứ tự!) Với thông tin trong sysfsthư mục của nó . Lưu ý rằng bạn cũng sẽ phải tạo một bảng phân vùng mới. Hãy chắc chắn rằng bảng phân vùng mới của bạn giống với bảng trước đó. Bạn có thể kiểm tra điều này trong /sys/block/sda. Nếu bạn thấy sda1lên đếnsda7trong khi bạn chỉ có 6 phân vùng, bạn có thể có MBR, và nếu không thì đó có thể là GPT. Bạn cũng cần đặt cờ và loại cho các phân vùng này. Nhìn vào /etc/fstabvà cố gắng lượm lặt thông tin về các loại phân vùng bạn có, sau đó kiểm tra Wikipedia để chuyển đổi chúng thành mã cho sơ đồ phân vùng của bạn.

Vì bạn dường như có thể sử dụng hệ thống tệp của mình, nên có khả năng là bạn ddkhông ghi đè lên bất kỳ hệ thống tệp nào, vì hầu hết các bit quan trọng của hệ thống tệp đều ở phía trước. Kiểm tra /etc/fstabxem phân vùng nào tương ứng với phần nào trong hệ thống của bạn, sau đó sử dụng lượng dữ liệu ddđược sao chép để có ước tính số tiền bạn đã thu được. Nếu bạn ghi đè lên một phần của hệ thống tập tin, hàng hóa fsck thể có thể sửa nó một chút (nhưng bạn đã mất một đoạn dữ liệu tốt).

Nhiều khả năng, bạn ghi đè lên /boot. Bạn sẽ phải cài đặt lại kernel của mình (với aptitude) và cài đặt lại GRUB2 (với grub-install) (đã bị phá hủy cả giai đoạn đầu tiên và giai đoạn thứ hai). GRUB2 được cấu hình với các tệp trong /etc, vì vậy bạn sẽ không phải tự tạo lại bất cứ thứ gì.


15
"Kiểm tra /sys/block/sda/*/{start,end}và tạo lại các phân vùng của bạn với thông tin này": bạn có thể mở rộng về điều này một chút không? Nó không phải là một hoạt động tầm thường và dường như là điểm chính của câu trả lời xuất sắc khác của bạn.
terdon

Sản lượng đó là dễ dàng hơn để giải mã, gõ những lúc vỏ nhanh chóng với một RETURN sau mỗi ...............: sudo parted, unit s, print all,quit
Hannu

3
Sao chép bất kỳ thông tin có giá trị nào vào ổ đĩa khác (ví dụ: thẻ nhớ USB) khi bạn khám phá nó. Trong trường hợp bất kỳ bước giải trí phân vùng nào không diễn ra hoàn hảo, bạn muốn có một bản ghi về những gì trong bộ nhớ của máy tính vẫn đang chạy. Ngoài ra, sao chép các tệp có giá trị và / hoặc nhỏ nhất của bạn (bao gồm các tệp như .bashrcvà các tệp chấm khác từ thư mục chính của bạn và tất cả /etc, ngoài dữ liệu thực của bạn) sang một đĩa khác trong khi máy tính đang chạy của bạn vẫn hoạt động . tar.gz là một định dạng tốt để sao chép toàn bộ thư mục (vì nó bảo vệ quyền và công cụ).
Peter Cordes

Anh ta cũng có thể cần phải định dạng lại những gì đã / boot, điều này rất nguy hiểm khi không chắc chắn nhân nghĩ gì về bố cục phân vùng của bạn ...
rackandboneman

1
@rackandboneman Nhân từ chối đọc lại các bảng phân vùng trên đĩa có phân vùng được gắn. Định /bootdạng lại như thế này là hoàn toàn "an toàn" (modulo nghĩa đen là mọi thứ khác về tình huống này ) vì hạt nhân không chắc chắn về bất cứ điều gì.
HTNW

21

Xin lỗi để đọc về may mắn khó khăn của bạn

Tôi đoán rằng bạn không có bản sao lưu hiện tại và tôi rất tiếc khi đọc về sự may mắn khó khăn của bạn bằng cách sử dụng

sudo dd if=image.iso of=/dev/sdx

nơi bạn đã sử dụng ký tự ổ đĩa x= ađể bạn ghi đè lên đầu ổ đĩa cứng nơi bạn lưu trữ rất nhiều dữ liệu có giá trị.

Bạn không phải là người đầu tiên và tôi sợ không phải là người cuối cùng bị ảnh hưởng bởi vấn đề này. ddđược khuyến nghị tại nhiều trang web được sử dụng như thế này. Đó là một phương pháp mạnh mẽ nhưng nguy hiểm, bởi vì nó thực hiện những gì bạn bảo nó làm mà không có câu hỏi. Vì lý do này, nó thường có biệt danh là 'Kẻ hủy diệt dữ liệu'.

@marcelm bình luận, rằng biệt danh này là không công bằng. Anh ta đúng khi viết trực tiếp vào một tập tin thiết bị là root đang gây ra rủi ro . Vì vậy, xin lưu ý rằng bạn có thể dễ dàng ghi đè lên một ổ đĩa và hủy dữ liệu có giá trị bằng cách ghi vào tệp thiết bị tương ứng /dev/sdx. (Các công cụ an toàn hơn được liệt kê ở cuối câu trả lời này.)

Khôi phục bảng phân vùng, hệ thống tệp và / hoặc nội dung tệp

  • Làm ít nhất có thể với ổ đĩa, và trên hết, không ghi bất cứ điều gì vào nó, bởi vì nó có thể làm cho tình hình tồi tệ hơn bằng cách ghi đè dữ liệu, vẫn có thể phục hồi.

  • Nếu dữ liệu của bạn có giá trị, bạn nên làm việc trên một bản sao nhân bản , không phải ổ đĩa gốc (bị ghi đè một phần). Xem liên kết này, cuộn xuống 'Sửa chữa nâng cao của bảng phân vùng, hệ thống tệp và / hoặc khôi phục tệp'

    Sửa chữa bảng phân vùng và hệ thống tập tin của một ổ đĩa

  • Nếu bạn có bảng phân vùng GUID, GPT, có một bản sao lưu của bảng phân vùng ở cuối ổ đĩa /dev/sdavà bạn có thể khôi phục bảng phân vùng chính từ bảng sao lưu này bằng công cụ gdisk. Xem hướng dẫn man gdiskđể biết chi tiết.

  • Bạn có thể quản lý để khôi phục bảng phân vùng và hệ thống tệp bằng Testdisk từ

    http://cssecurity.org

    Đọc hướng dẫn tại trang web CGSecurity và liên kết được cung cấp bởi @ElderGeek, Phân vùng biến mất sau khi mất điện trong khi cài đặt

  • Bạn cũng có thể quản lý để khôi phục bảng phân vùng và hệ thống tệp bằng gpart / gparted theo liên kết được cung cấp bởi @CSM,

    HOWTO: Khôi phục phân vùng bị mất vào bảng phân vùng bị xóa hoặc bị hỏng

  • PhotoRec : Nếu bạn không khôi phục được bảng phân vùng và hệ thống tệp, bạn vẫn có thể khôi phục một số dữ liệu tệp. Các tệp ở đầu cuối, có thể 1-1,5 GB, bị ghi đè và bị mất, nhưng các tệp phía sau phần đó của ổ đĩa vẫn còn đó. PhotoRec từ http://cgsecurity.org là một công cụ, có thể khôi phục dữ liệu 'từ bề mặt ổ đĩa' mà không cần hệ thống tệp. Dữ liệu điển hình ở đầu các loại tệp phổ biến được sử dụng để nhận dạng.

    Liên kết sau đây cung cấp chi tiết về PhotoRec,

    https://www.cgsecurity.org/wiki/PhotoRec

    Bạn nên lưu các tệp vào một phân vùng trong một ổ đĩa riêng.

    Không thể khôi phục cấu trúc thư mục và thường không thể khôi phục tên tệp (và không phải là quyền và quyền sở hữu), và có vấn đề, khi các tệp bị phân mảnh, nhưng nhiều tệp có thể được phục hồi bởi PhotoRec (không chỉ hình ảnh, cũng nhiều loại tập tin phổ biến khác). Nhưng, và đây là một công việc lớn nhưng, rất nhiều công việc khó khăn để lội qua số lượng lớn các tệp chưa được sắp xếp để xác định đâu là các tệp thực sự quan trọng, mà bạn nên đổi tên thành tên tệp có ý nghĩa.

Công cụ an toàn hơn để tạo ổ đĩa khởi động USB với Ubuntu

Trong tương lai, vui lòng sử dụng một công cụ giúp bạn xác định và chọn đúng thiết bị đích và có điểm kiểm tra cuối cùng, để bạn có thể kiểm tra kỹ xem bạn sẽ sao chép từ tệp iso sang đúng thiết bị đích hay không, ví dụ

  • Trong Ubuntu: Trình tạo đĩa khởi động Ubuntu (trong Ubuntu 16.04 LTS và các phiên bản mới hơn),
  • Trong Linux:

    • Đĩa bí danh gnome-disks,
    • mkusb ,
  • Trong Windows: Win32DiskImager .

Bạn cũng có thể sử dụng các công cụ giải nén , cung cấp một điểm kiểm tra cuối cùng, ví dụ


1
Tôi có thể bảo đảm cho Testdisk của cssecurance, hoạt động tốt hơn nhiều so với các lựa chọn thay thế khác mà tôi đã thử trong quá khứ, trong đó Testdisk là người duy nhất cứu vãn được bất cứ điều gì hữu ích. nhưng hãy cẩn thận, kẻ khốn kiếp mặc định cố gắng khôi phục phân vùng của bạn trên ổ đĩa !! xx
hanshenrik

1
+1. Tôi cũng có thể xác nhận cho testdisk. Ngoài ra một kịch bản trình bao bọc để ngăn không cho ddghi vào / sda / sdb / bất cứ điều gì cũng là một ý tưởng tốt.
WinEunuuchs2Unix

19

Theo ddlệnh của bạn , bạn ghi đè lên bảng phân vùng của / dev / sda và tất cả dữ liệu theo kích cỡ của image.iso.

Vì vậy, cách tốt nhất bạn có thể đạt được là khôi phục bảng phân vùng của mình (với kích thước chính xác) để khôi phục ít nhất các phân vùng vào cuối / dev / sda.


1
Nếu bạn muốn biết làm thế nào để có được kích thước chính xác, hãy xem đoạn thứ hai của câu trả lời này .
wizzwizz4

16

Không thể khôi phục từ bản sao lưu, không có cách nào để khôi phục hoàn toàn. DD đã ghi đè lên bảng phân vùng và một số dữ liệu của thiết bị.


19
Tôi đoán tôi nên vứt bỏ tất cả các bản sao lưu phục hồi thảm họa của mình sau đó.
stumblebee

23
@Baaing Cow, tất nhiên đó là một câu trả lời và tất nhiên không thể có cách nào để phục hồi dữ liệu. Đó là ý nghĩa của nó khi bạn ghi đè lên dữ liệu: nó đã biến mất.
psusi

22
@ ChaiT.Rex Điều đó dường như là một huyền thoại, ít nhất là trên bất kỳ thiết bị nào bạn có thể tìm thấy trong một PC được sản xuất trong thập kỷ qua.
David Schwartz

19
@ ChaiT.Rex Điều đó chỉ áp dụng trên các đĩa không được ghi đè hoàn toàn trong đó chỉ một phần của đĩa bị xóa. Tuy nhiên, nếu toàn bộ đĩa đã bị xóa hoặc ghi đè, thì không có phục hồi dữ liệu. Chuyên gia hay không.
Thomas Ward

8
@BaaingCow Như bạn biết rằng phải có cách khôi phục dữ liệu, vui lòng khai sáng cho chúng tôi. Nhiều người sẽ sẵn sàng trả tiền cho kỹ thuật của bạn!
Tim

9

Nếu ổ đĩa của bạn được phân vùng thành các phân vùng //homephân vùng riêng biệt và phân /homevùng nằm sau /phân vùng, thì bạn có thể khôi phục dữ liệu của mình. MBR liệt kê nơi hầu hết các phân vùng đã được ghi đè. Tuy nhiên, gparted có thể khôi phục /homephân vùng của bạn .

Bài đăng này trên Diễn đàn Ubuntu cung cấp một số ý tưởng về cách thực hiện; Tôi thấy rằng bằng cách tìm kiếm "phân vùng phục hồi gparted".

Khi bạn đã tìm thấy phân vùng bị mất của mình (có thể nằm trong một phân vùng mở rộng), bạn nên thêm nó làm phân vùng duy nhất trong bảng phân vùng.

Khi bạn đã thực hiện điều đó, bạn sẽ phải cài đặt lại Linux, yêu cầu giữ lại phân vùng đã khôi phục như /home.


2

Testdisk để giải cứu

Cá nhân tôi có thể bảo đảm cho Testdisk đã lưu dữ liệu của tôi sau khi tôi liên tục sao chép và dán hướng dẫn /dev/sdbvà thay đổi nó thành /dev/sddUSB của tôi. Chỉ có một lần tôi quên thay đổi nó và tôi đã đi /dev/sdbvào thùng rác.

Thiết lập hệ thống của bạn để không bao giờ ghi vào /dev/sda

Tôi thực sự khuyên bạn nên tạo tập lệnh bao bọc: Ngăn chặn `dd` phá hủy SSD hoặc HDD . Điều này đảm bảo ddkhông bao giờ ghi vào /dev/sdahoặc có thể /dev/sdbhoặc bất kỳ thiết bị lưu trữ lớn nào của bạn.

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.