Có an toàn để lấy hình ảnh ổ đĩa của ổ đĩa làm việc hiện tại?


12

Tôi phải sao lưu đĩa cứng của tôi. Tôi muốn sử dụng ddvà đặt hình ảnh trên một hdd bên ngoài.

  • Tôi có thể làm điều này bằng cách sử dụng ddhệ điều hành nằm trên hdd hay tôi phải khởi động từ thiết bị khác, ví dụ như LiveCD?
  • Nói chung, có an toàn không khi chụp ảnh thiết bị, nếu thiết bị được gắn và hoạt động?
  • Điều gì sẽ xảy ra nếu thiết bị được gắn, nhưng tôi chắc chắn không có hoạt động I / O nào khác trong khi ddđang chạy?

Tôi chắc chắn rằng đó rsynclà công cụ tốt nhất để sử dụng để sao lưu, đặc biệt là các công cụ gia tăng.

Nhưng tôi quan tâm dd, vì tôi muốn sao lưu cả các thiết bị lưu trữ khác và nó cũng sao chép dữ liệu được lưu trữ trên không gian không phân chia. Ví dụ, trình đọc sách điện tử của tôi sử dụng một không gian không liên kết để lưu trữ uboot, kernel và các dữ liệu khác.


Điều quan trọng là bạn đang sử dụng hệ thống tệp nào, bạn quan tâm đến cái gì? Một số có tính năng cụ thể cho nhiệm vụ này.
Vality

Câu trả lời:


11

Nói chung là không an toàn. FS giả định rằng các hoạt động được viết theo thứ tự nhất định để nó có thể ghi dữ liệu mới của tệp và sau đó tạo một con trỏ tới dữ liệu đó, các chi tiết chính xác phụ thuộc vào hệ thống tệp. Hãy tưởng tượng nếu sau đây xảy ra:

  1. dd đọc từ vị trí X chứa rác hoặc một số dữ liệu
  2. Hệ thống tập tin ghi vào vị trí X
  3. Hệ thống tập tin ghi vào vị trí con trỏ X + 1 đến vị trí X
  4. dd đọc từ liên kết vị trí X + 1 đến vị trí X

Từ quan điểm của sao lưu, bạn nhận được một dữ liệu rác. Tuy nhiên, có một số cách để khắc phục nó:

  • Đóng băng hệ thống tập tin bằng lệnh cụ thể của hệ thống tập tin (tôi tin xfs_freezelà một và tôi không biết gì khác - nhưng tùy chọn đó tồn tại ít nhất trên lý thuyết)
  • Tạo một ảnh chụp lvm và sao chép từ nó. Bản sao sẽ như là nếu bạn khởi động lại máy tính (trừ việc sắp xếp lại ổ cứng), vì vậy nó sẽ là một hệ thống tệp bẩn nhưng bản sao sẽ là nguyên tử. Lưu ý rằng một số hệ thống tập tin như XFS cần được đóng băng trước tiên.
  • Sử dụng rsync theo đề xuất của người khác. Bây giờ bản sao đã an toàn và bạn không cần LVM nhưng bản sao không phải là nguyên tử. Vì vậy, trong khi nó tránh được vấn đề trên ở cấp độ hệ thống tệp, nó vẫn có thể gặp sự cố với các tệp (khá khó xảy ra nhưng người ta có thể tưởng tượng các tệp bị thiếu trong khi mv được thực thi ở chế độ nền chẳng hạn)
  • Sử dụng hệ thống tập tin với ảnh chụp nhanh như btrfs , tux3 , zfs , nilfs ... Sau đó, bạn tránh được cả hai vấn đề - bạn có thể tạo một ảnh chụp nhanh và sao chép từ nó bằng rsync có tính nguyên tử hoàn toàn. Tuy nhiên, lưu ý rằng hệ thống tập tin như vậy thường có xu hướng thử nghiệm.

Như một lưu ý cuối cùng - ddcó thể không phải là cách sao lưu tốt nhất. Nó sao chép toàn bộ đĩa thường gây lãng phí khi bạn sao chép 'rác'. Nếu bạn cần phải có một hình ảnh đĩa, một cái gì đó như partimage có thể tốt hơn. Nếu bạn không có tùy chọn tốt hơn là sử dụng rsync, tar ở chế độ vi sai / gia tăng, v.v. hoặc hệ thống sao lưu đầy đủ như bacula , tarsnap hoặc một trong nhiều thứ khác. Sao chép dữ liệu có thể làm điều kỳ diệu cho các kích thước của bản sao lưu.


1
+1 Đây là câu trả lời duy nhất thực sự cố gắng trả lời câu hỏi này, được thực hiện một cách xuất sắc vì thực sự đọc những gì op đang hỏi và không ca ngợi về việc dd tệ như thế nào.
Vality

+1 cho câu trả lời hay. Nhưng tôi không đồng ý với những lời ca tụng. Dd không tệ. Nó chỉ là không phù hợp cho điều này và giải thích tại sao đó là một điều tốt.
Hennes

Bullet point 4 có cùng giới hạn với # 2, phải không? Một ứng dụng có thể ở giữa việc phát hành ghi và ảnh chụp nhanh không biết gì về giao dịch cấp ứng dụng.
Ben Voigt

Cảm ơn bạn, nó không trả lời câu hỏi. Câu trả lời của goldilocks cũng tốt, nhưng tôi quan tâm đến việc sao lưu không chỉ hdd của tôi mà còn các thiết bị lưu trữ khác, và có lẽ tôi đã phải viết nó trước đây.
Marco Sulla

@BenVoigt - đến một số phần mở rộng - nó loại bỏ một lớp (hệ thống tập tin) và AFAIK đó là lớp 'dễ vỡ' hơn. Tuy nhiên, trong một số trường hợp, bạn có thể tìm thấy một tệp được viết một nửa nhưng nếu ứng dụng không xử lý được thì các tệp đó cũng có thể bị hỏng trong nhiều trường hợp khác (OOM, crash, v.v.) vì vậy ứng dụng được viết chính xác sẽ xử lý nó.
Maciej Piechotka

7

Nó phụ thuộc vào chính xác phân vùng dùng để làm gì và mục đích của bản sao là gì. Tuy nhiên, tôi sẽ nói rằng nói chung ddlà một công cụ không phù hợp để sao lưu hệ thống tập tin . Đó cũng không phải là mục đích của nó.

  • Nó sẽ lãng phí rất nhiều thời gian sao chép các phần trống của phân vùng.

  • Nó có thể dẫn đến sự không nhất quán nếu hệ thống tập tin hiện được gắn kết, một phần vì đây là thực thể ở cấp độ hệ điều hành và có thể không đồng bộ với thiết bị khối bên dưới. Gọi syncban đầu sẽ không giúp được nhiều với điều này, vì quá trình này không phải là tức thời.

Sử dụng cp -ahoặc rsyncthay thế. Sau đó, bạn cần phải tạo phân vùng đích, vì vậy nó không hoàn toàn dễ dàng, nhưng nó an toàn và linh hoạt hơn nhiều. Nếu bạn cần tạo một hình ảnh hệ thống tập tin , xem bên dưới.

Nếu bạn đang có ý định sao chép hệ thống tập tin gốc, tuyệt đối không sử dụng dd. Bạn phải sử dụng một cái gì đó như rsync -ax(hoặc cp -axtrên các thư mục toplevel riêng lẻ), bởi vì có một loạt các thứ KHÔNG phải có trong bản sao . Trên Linux, điều này bao gồm:

/dev
/lost+found
/mnt
/proc
/run
/sys
/tmp

Một số trong số này thực sự là giao diện kernel và không phải là thư mục thực trên đĩa. Nếu bạn sao chép chúng, bạn đang sao chép một loạt thông tin sẽ không áp dụng trong bản sao; Nếu bạn thử và chạy một hệ thống với nó, nó sẽ chỉ lãng phí không gian vì giao diện thực sẽ được gắn lên trên. Những người khác chứa thông tin tạm thời được sử dụng bằng cách chạy các quy trình và đó là một vấn đề, vì hệ thống sẽ không thể phân loại rác nếu bạn sao chép.

Nếu bạn muốn tạo một tệp hình ảnh của hệ thống tệp gốc (hoặc bất kỳ hệ thống tệp nào), hãy tạo một tệp hình ảnh trống - đây là một cách sử dụng thích hợp cho dd:

dd if=/dev/zero of=whatever.img bs=1024 count=1000000

Đó là hình ảnh 1024 MB (1000000 * 1024). Điều chỉnh countnếu bạn muốn nó một số kích thước khác. Tạo, ví dụ, một exthệ thống tệp trong tệp :

mke2fs whatever.img

Nó sẽ cảnh báo bạn đây không phải là một thiết bị khối thực sự. Tiến hành. Bây giờ gắn tập tin hình ảnh:

mount whatever.img /mnt/img

/mnt/imgphải tồn tại nhưng có thể bất cứ điều gì. Bây giờ bạn có thể rsync(hoặc cp -a) vào /mnt/img. Nội dung sẽ vẫn còn bên trong whatever.imgkhi bạn ngắt kết nối nó.

Tuy nhiên...

Để rõ ràng, chỉ sử dụng phương pháp hình ảnh hệ thống tập tin vừa mô tả nếu bạn thực sự cần một tập tin hình ảnh vì bất kỳ lý do gì. Nếu mục tiêu của bạn là sao chép phân vùng sang ổ cứng khác, bạn không cần hình ảnh : tạo phân vùng mới với hệ thống tệp trống trên ổ đĩa đó, gắn kết và sao chép vào đó. Thay vào đó, bạn chỉ có thể đặt nội dung hệ thống tập tin vào một thư mục trống và lưu trữ nó:

tar -czf myarchive.tar.gz [the directory path]

Sau đó, bạn có thể triển khai phần này trong một phân vùng hiện có (trống hoặc nếu không) bằng cách đặt nó trong toplevel và sử dụng:

tar -xzf myarchive.tar.gz

Coi chừng sẽ ghi đè lên các tệp hiện có nếu đường dẫn của chúng khớp với thứ gì đó trong kho lưu trữ. Nó sẽ để lại hệ thống phân cấp thư mục hiện có giống nhau.


+1 ghi vào một tệp hình ảnh trống rất trơn tru, nhưng những lợi thế nào có được khi lưu vào kho lưu trữ .tar hoặc .tgz?
Lạch

@Calet Nó không có bất kỳ lợi thế nào ngoại trừ hình ảnh có thể gắn kết. Tôi đã thêm rằng trong trường hợp mục tiêu của OP ở đây là tạo ra một hình ảnh có thể được sử dụng thô. Mặt khác, tốt hơn là sử dụng một kho lưu trữ vì một kho lưu trữ không có kích thước cố định. Tôi sẽ thêm một cảnh báo rõ ràng hơn về điều đó.
goldilocks

Gotcha, tôi đã không nghĩ như vậy. Vẫn là một phương pháp tuyệt vời để lưu trữ các tập tin.
Lạch

2
@mpy Cả GNU coreutils cpvà rsync đều có tùy chọn -xđể tránh đệ quy vào các hệ thống tệp khác. Câu trả lời của Maciej giải thích rõ nhất tại sao ddhoàn toàn không phù hợp ở đây (gần như đảm bảo sẽ tạo ra một bản sao không sử dụng được trừ khi bạn thực hiện các biện pháp phòng ngừa được liệt kê bởi Mark , vì việc viết sẽ xảy ra trong quá trình sao chép).
Gilles 'SO- ngừng trở nên xấu xa'

2
ddsẽ không sao chép những thứ không phải là thư mục thực trên đĩa, vì vậy tôi không chắc điểm đầu tiên của bạn đến từ đâu. Ví dụ: các thiết bị được gắn vào /mnt, các nút trong /proc, v.v. sẽ không phải là một phần của dữ liệu ddlấy vì nó không có trên đĩa. Đối với các hệ thống tập tin chưa từng ddcó là hoàn toàn hợp lệ; bạn kết thúc với một bản sao chính xác. Lý do duy nhất không phù hợp với các hệ thống tập tin được gắn kết là dữ liệu trên hệ thống có thể thay đổi / được ghi một phần trong thời gian dài ddđể vận hành.
Jason C

1

rsync là công cụ được lựa chọn để sao lưu hệ thống tập tin và nó có thể tạo bản sao lưu có thể khởi động của HĐH đang chạy.

Một số hãy cẩn thận:

  • bạn phải thêm các tùy chọn bảng chữ cái-súp thích hợp
  • đường dẫn khá quan trọng
  • một danh sách loại trừ là bắt buộc và sẽ khác nhau cho mỗi HĐH và có thể mỗi cấu hình

Một số ưu điểm của rsync so với các phương thức khác như tar:

  • bạn có thể dừng và bắt đầu sao lưu bất cứ lúc nào
  • nhiều tùy chọn để xử lý các tập tin thay thế như xóa theo yêu cầu, xóa trước, di chuyển .....
  • tiếp tục (hoặc lặp đi lặp lại) sao lưu là nhiều nhanh hơn so với các phương pháp khác, như các file trước đó sao chép được bỏ qua. (Tăng tốc độ 20 lần là phổ biến)
  • tùy chọn --link-Dest có thể tạo các bản sao lưu theo phiên bản trong khi chỉ thực sự sao chép các tệp mới

Sao lưu hình ảnh có vị trí của chúng, nhưng chúng sao chép chính xác ổ đĩa, bao gồm mọi vấn đề bạn có thể gặp phải. Một bản sao lưu tệp làm cho một thư mục mới và có tác dụng phụ là tuyến tính hóa (chống phân mảnh) ổ đĩa của bạn trong quá trình này. Nếu bạn muốn tạo 10 bản sao giống hệt của hệ điều hành hiện tại của mình, tôi sẽ sử dụng rsync cho bản sao chính và sau đó dd (hoặc tương tự) cho phần còn lại.


1

Nó phụ thuộc vào ý của bạn là "hệ thống làm việc hiện tại". Nếu bạn chỉ đơn giản muốn tránh sử dụng đĩa khởi động và không quan tâm đến việc gián đoạn các dịch vụ chạy trên máy tính, thì có thể:

  1. Tắt tất cả các chương trình không quan trọng (về cơ bản, mọi thứ trừ vỏ gốc bạn đang làm việc - không thử điều này từ thiết bị đầu cuối X, sử dụng vỏ giao diện điều khiển thực). Chế độ một người dùng có thể giúp cho việc này.
  2. Nếu bạn đã gắn các đĩa khác ngoài root hệ thống, hãy ngắt kết nối chúng. Không ngắt kết nối các hệ thống tệp ảo như / Proc, / sys hoặc / dev.
  3. Xóa dữ liệu được lưu trong bộ nhớ cache trên đĩa còn lại: sync
  4. Kể lại hệ thống tập tin gốc chỉ đọc : mount -o ro /.
  5. Gắn ổ cứng ngoài của bạn (có thể bạn sẽ nhận được cảnh báo về việc không thể ghi vào /etc/mtab; bỏ qua nó).
  6. Tạo bản sao lưu của bạn.
  7. Tháo ổ cứng ngoài của bạn.
  8. Khởi động lại. Bạn đã tạo ra một mớ hỗn độn của hệ thống của bạn ở đây và khởi động lại là cách nhanh nhất để đưa nó trở lại bình thường.

Tôi sử dụng phương pháp này để tạo một kho lưu trữ máy tính mà tôi vừa nâng cấp và không mong đợi sử dụng nhiều hơn nữa. Đây không phải là một phương pháp tốt cho một hệ thống đang sử dụng tích cực: nó chậm (mất hàng giờ hoặc nhiều ngày), các bản sao lưu rất lớn (vì vậy bạn không thể giữ nhiều hơn một chút) và việc sử dụng hệ thống được hỗ trợ một cách khó tin lên. Để sao lưu hàng ngày, tôi đề xuất một cái gì đó hoạt động ở cấp hệ thống tập tin, chẳng hạn như rsnapshot.


Lưu ý rằng bước 4 có thể nguy hiểm trên một số hệ thống tệp vì chúng ghi ngay cả ở chế độ chỉ đọc. Ngoài ra trên các hệ thống hiện đại hơn (Linux 3. một cái gì đó tôi tin) bạn chỉ có thể liên kết /etc/mtabđến /proc/self/mount- nó sẽ hoạt động ngay cả khi bạn có những thứ như chroots hoặc fs không gian tên.
Maciej Piechotka

1
@MaciejPiechotka Tôi không biết bất kỳ hệ thống tập tin nào ghi trong khi được gắn ở chế độ chỉ đọc và tôi sẽ thấy nó rất lạ. Một số hệ thống tệp ghi khi cài đặt ở chế độ chỉ đọc nếu hệ thống tệp trước đó chưa được mount -o remount,ro /xóa sạch, vì vậy bước này có thể ghi. Nhưng một khi lệnh này trở lại, trong tình huống nào thì việc viết tiếp theo sẽ xảy ra?
Gilles 'SO- đừng trở nên xấu xa'

Các chương trình không quan trọng của Nô-tô sắp ngừng hoạt động sẽ phải bao gồm cả hệ thống con đăng nhập, điều mà tôi không cho là không quan trọng.
Gilles 'SO- ngừng trở nên xấu xa'

@Gilles, với mục đích tạo hình ảnh đĩa của đĩa khởi động, bất kỳ chương trình nào không liên quan trực tiếp đến việc tạo hình ảnh là không cần thiết.
Đánh dấu

Có thể đáng đề cập đến chế độ người dùng duy nhất có thể giúp đỡ ở đây.
Vality

1

Sử dụng Clonezilla , nghiêm túc. Đây là tiện ích giống như Norton Ghost dựa trên Linux, nguồn mở tốt nhất. Nó sẽ thực hiện cả phân vùng và nhân bản toàn bộ đĩa, từ đĩa sang đĩa hoặc hệ thống đĩa vào tệp (lưu dưới dạng tệp). Nó hỗ trợ hầu hết các hệ thống tệp Linux, NTFS, FAT32 và hơn thế nữa. Nó có thể lưu vào đĩa bên trong, ổ đĩa ngoài hoặc thậm chí qua mạng trên cổ phiếu SMB hoặc NFS.

Nó rất dễ sử dụng và sẽ giúp bạn tiết kiệm rất nhiều thời gian.

Chỉnh sửa: để trả lời câu hỏi, không, bạn không thể ddhầu hết các hệ thống tệp trong khi chúng được gắn kết vì bạn có nguy cơ kết thúc với một bản sao không nhất quán của hệ thống tệp của mình vì việc đọc từ một thiết bị khối không phải là nguyên tử. Ví dụ: nếu bạn đang sao chép 100 khối, hệ thống có thể đã cập nhật khối đầu tiên và khối cuối cùng trong khi bạn chỉ mới đi được một nửa, điều đó có nghĩa là bản sao của bạn sẽ bao gồm khối cuối cùng được sửa đổi chứ không phải khối đầu tiên.


+1: nó không trả lời câu hỏi nhưng có vẻ là một gợi ý tốt cho bản sao lưu hdd.
Marco Sulla
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.