Có tốt hơn khi sử dụng cat, dd, pv hoặc thủ tục khác để sao chép đĩa CD / DVD không?


22

Lý lịch

Tôi đang sao chép một số dữ liệu CD / DVD sang các tệp ISO để sử dụng chúng sau này mà không cần đến chúng trong ổ đĩa.

Tôi đang tìm kiếm trên mạng về các thủ tục và tôi đã tìm thấy rất nhiều:

  • Sử dụng catđể sao chép phương tiện: http://www.yolinux.com/TUTORIALS/LinuxTutorialCDBurn.html

    cat /dev/sr0 > image.iso
    
  • Sử dụng ddđể làm như vậy (dường như được sử dụng rộng rãi nhất): http://www.linuxjournal.com/content/archiving-cds-iso-commandline

    dd if=/dev/cdrom bs=blocksize count=count of=/path/to/isoimage.iso
    
  • Sử dụng chỉ pvđể thực hiện điều này: Xem man pvđể biết thêm thông tin, mặc dù đây là đoạn trích của nó:

    Taking an image of a disk, skipping errors:
          pv -EE /dev/sda > disk-image.img
    
    Writing an image back to a disk:
          pv disk-image.img > /dev/sda
    
    Zeroing a disk:
          pv < /dev/zero > /dev/sda
    

Tôi không biết nếu tất cả trong số họ cần phải tương ứng, mặc dù tôi đã thử nghiệm một số trong số họ (bằng cách sử dụng md5sumcông cụ) và, ít nhất, ddpvkhông tương đương. Đây là md5sumcả ổ đĩa và tệp được tạo bằng mỗi thủ tục:

md5 của thủ tục dd: 71b676875b0194495060b38f35237c3c

md5 của thủ tục pv: f3524d81fdeeef962b01e1d86e6acc04

CHỈNH SỬA: Đầu ra đó là từ một CD khác so với đầu ra đã cho. Trong thực tế, tôi nhận ra có một số sự thật thú vị mà tôi cung cấp như một câu trả lời.

Trong thực tế, kích thước của mỗi tệp là khác nhau so với nhau.

Vì vậy, có một quy trình tốt nhất để sao chép CD / DVD hay tôi chỉ sử dụng các lệnh không chính xác?


Thông tin thêm về tình hình

Dưới đây là thông tin thêm về trường hợp thử nghiệm tôi đang sử dụng để kiểm tra các quy trình tôi đã tìm thấy cho đến nay:

isoinfo -d i /dev/sr0 Đầu ra: https://gist.github.com/JBFWP286/7f50f069dc5d1593ba62#file-isoinfo-output-19-aug-2015

ddđể sao chép phương tiện, với tổng kiểm tra đầu ra và thông tin tệp Kết quả: https://gist.github.com/JBFWP286/75decda0a67605590d32#file-dd-output-with-md5-and-sha256-19-aug-2015

pvđể sao chép phương tiện, với tổng kiểm tra đầu ra và thông tin tệp Kết quả: https://gist.github.com/JBFWP286/700a13fe0a2f06ce5e7a#file-pv-output-with-md5-and-sha256-19-aug-2015

Bất kỳ trợ giúp sẽ được đánh giá cao!

linux  dd  cat  disk-image  pv 

kích thước tập tin giống hệt nhau? kết quả của cmp file1 file2? bạn đã sử dụng ddsai count=(hoặc thực sự có bất kỳ số lượng nào không cần thiết nếu bạn muốn toàn bộ?). Đọc lỗi trong dmesg?
frostschutz

2
Không cần phải nói rằng các tệp có kích thước khác nhau (với xác suất 99.9999999999 +%) sẽ có tổng kiểm tra khác nhau. Miễn là bạn đã thực hiện các bài kiểm tra, sẽ rất tuyệt nếu bạn đăng tất cả các kết quả, bao gồm (1) ddlệnh chính xác mà bạn đã sử dụng (kích thước khối nào? Đếm?), (2) kích thước và tổng kiểm tra của tất cả các kết quả đầu ra và (3) bất kỳ thông tin độc lập nào bạn có về lượng dữ liệu trên đĩa quang nguồn. ... ... ... ... ... ... PS Tại sao bạn đang sử dụng count=trên dd? Bạn muốn sao chép toàn bộ hình ảnh đĩa, phải không?  count=nói "sao chép cái này nhiều rồi dừng lại".
Scott

@Scott Trong trang này linuxjournal.com/content/archiving-cds-iso-commandline , tác giả nói rằng người ta nên sử dụng isoinfo -d -i /dev/cdromđể biết số đếm và sử dụng nó - thực tế, ông nói người ta không nên sử dụng dd. "Trong mọi trường hợp, nếu bạn muốn có một hình ảnh ISO phù hợp của CD đó, bạn cần phải chỉnh kích thước khối và chặn chính xác trước khi tạo hình ảnh của mình."

@frostschutz Trong trường hợp đầu tiên, kích thước không giống nhau, nhưng đáng ngạc nhiên, tôi đã thử lại và nhận được kết quả khác nhau. Xem câu trả lời tôi cung cấp để biết thêm chi tiết.

Câu trả lời:


27

Tất cả các lệnh sau là tương đương. Họ đọc các byte của CD /dev/sr0và ghi chúng vào một tệp có tên image.iso.

cat /dev/sr0 >image.iso
cat </dev/sr0 >image.iso
tee </dev/sr0 >image.iso
dd </dev/sr0 >image.iso
dd if=/dev/cdrom of=image.iso
pv </dev/sr0 >image.iso
cp /dev/sr0 image.iso
tail -c +1 /dev/sr0 >image.iso

Tại sao bạn sẽ sử dụng cái này hơn cái kia?

  • Sự đơn giản. Ví dụ, nếu bạn đã biết cathoặc cp, bạn không cần phải học một lệnh khác.

  • Mạnh mẽ. Đây là một chút của một biến thể của sự đơn giản. Có bao nhiêu rủi ro khi thay đổi lệnh sẽ thay đổi những gì nó làm? Hãy xem một vài ví dụ:

    • Bất cứ điều gì với chuyển hướng: bạn có thể vô tình đặt một chuyển hướng sai vòng, hoặc quên nó. Vì đích đến được coi là một tệp không tồn tại, set -o noclobbernên đảm bảo rằng bạn không ghi đè lên bất cứ thứ gì; tuy nhiên, bạn có thể ghi đè lên thiết bị nếu bạn vô tình ghi >/dev/sda(đối với CD, chỉ đọc, không có rủi ro, tất nhiên). Điều này nói lên sự ủng hộ cat /dev/sr0 >image.iso(khó có thể sai theo cách gây tổn hại) so với các lựa chọn thay thế như tee </dev/sr0 >image.iso(nếu bạn đảo ngược các chuyển hướng hoặc quên đầu vào, teesẽ ghi vào /dev/sr0).
    • cat: bạn có thể vô tình ghép hai tệp. Điều đó để lại dữ liệu dễ dàng cứu vãn.
    • dd: iogần trên bàn phím, và hơi bất thường. Không có tương đương noclobber, of=sẽ vui vẻ ghi đè lên bất cứ điều gì. Cú pháp chuyển hướng ít bị lỗi hơn.
    • cp: nếu bạn vô tình trao đổi nguồn và đích, thiết bị sẽ bị ghi đè (một lần nữa, giả sử thiết bị không chỉ đọc). Nếu cpđược gọi với một số tùy chọn như -Rhoặc -amột số người thêm thông qua bí danh, nó sẽ sao chép nút thiết bị thay vì nội dung của thiết bị.
  • Chức năng bổ sung. Một công cụ ở đây có chức năng bổ sung hữu ích là pv, với các tùy chọn báo cáo mạnh mẽ.
    Nhưng ở đây bạn có thể kiểm tra xem đã sao chép bao nhiêu bằng cách xem kích thước của tệp đầu ra.

  • Hiệu suất. Đây là một quá trình ràng buộc I / O; ảnh hưởng chính trong hiệu suất là kích thước bộ đệm: công cụ đọc một đoạn từ nguồn, ghi đoạn mã đến đích, lặp lại. Nếu khối quá nhỏ, máy tính sẽ dành thời gian để chuyển đổi giữa các tác vụ. Nếu khối quá lớn, các hoạt động đọc và ghi không thể được song song. Kích thước chunk tối ưu trên PC thường vào khoảng vài megabyte nhưng điều này rõ ràng phụ thuộc rất nhiều vào HĐH, vào phần cứng và vào những gì máy tính đang làm. Tôi đã tạo điểm chuẩn cho đĩa cứng thành bản sao đĩa cứng cách đây một thời gian, trên Linux, cho thấy rằng đối với các bản sao trong cùng một đĩa, dd với kích thước bộ đệm lớn có lợi thế, nhưng đối với bản sao đĩa chéo, catgiành được bất kỳ ddkích thước bộ đệm nào .

Có một vài lý do tại sao bạn thấy ddđược đề cập thường xuyên như vậy. Ngoài hiệu suất, họ không phải là lý do đặc biệt tốt.

  • Trong các hệ thống Unix rất cũ, một số công cụ xử lý văn bản không thể đối phó với dữ liệu nhị phân (chúng sử dụng các chuỗi kết thúc null bên trong, do đó chúng có xu hướng gặp vấn đề với byte rỗng; một số công cụ cũng cho rằng các ký tự chỉ sử dụng 7 bit và không xử lý bộ ký tự 8 bit đúng cách). Tôi không chắc đây có phải là vấn đề không cat(nó có nhiều công cụ định hướng đường truyền như head,sed , vv), nhưng mọi người có xu hướng tránh nó trên dữ liệu nhị phân vì nó liên quan đến xử lý văn bản. Đây không phải là vấn đề trên các hệ thống hiện đại như Linux, OSX, * BSD hoặc bất cứ thứ gì tuân thủ POSIX.
  • Có một loại huyền thoại có ddphần thấp hơn một chút so với các công cụ khác như catvà truy cập trực tiếp vào các thiết bị. Điều này là hoàn toàn sai: ddcatteenhững người khác đều đọc byte từ đầu vào của họ và ghi các byte vào đầu ra của họ. Phép thuật thực sự là trong /dev/sr0.
  • dd có một cú pháp dòng lệnh bất thường, vì vậy việc giải thích cách thức hoạt động của nó mang lại nhiều cơ hội hơn để tỏa sáng bằng cách giải thích điều gì đó chỉ cần viết cat /dev/sr0 .
  • Sử dụng dd với kích thước bộ đệm lớn có thể có hiệu suất tốt hơn, nhưng không phải lúc nào cũng như vậy (xem một số điểm chuẩn trên Linux ).

Một rủi ro lớn ddnó có thể âm thầm bỏ qua một số dữ liệu . Tôi nghĩ ddlà an toàn càng lâu càng skiphaycount không được thông qua nhưng tôi không chắc liệu đây có phải là trường hợp trên tất cả các nền tảng hay không. Nhưng nó không có lợi thế ngoại trừ hiệu suất.

Vì vậy, chỉ sử dụng pvnếu bạn muốn báo cáo tiến độ ưa thích của nó, hoặc catnếu bạn không.


Cảm ơn rất nhiều vì đã dành thời gian viết phản hồi này! =) Bây giờ tôi hiểu sự khác biệt giữa chúng. Chỉ là một câu hỏi: Có pv < /dev/sr0 > image.isogiống như pv /dev/sr0 > image.iso(cái sau được tìm thấy trong các trang hướng dẫn của pv) không?

1
@ JBFWP286 Họ sao chép cùng một thứ, nhưng pv /dev/sr0 …có thể bao gồm tên tệp trong báo cáo tiến trình trong khi pv </dev/sr0không thể.
Gilles 'SO- ngừng trở nên xấu xa'

Một lưu ý khác: cpcó thể được đặt bí danh cp -R, mà (ít nhất là trên GNU cp, là root) gây ra cpsao chép nút thiết bị thay vì nội dung của nó.
marcelm

2
@ JBFWP286 Nút thiết bị là một tệp mà bạn truy cập phần cứng hoặc các tính năng đặc biệt khác được cung cấp bởi trình điều khiển kernel. Hầu như tất cả các tập tin trong /devlà các nút thiết bị. Ví dụ, cp -R /dev/sr0 image.isosẽ tạo image.isomột tệp thông qua đó ổ đĩa CD được truy cập, giống như /dev/sr0, thay vì một tệp thông thường chứa bản sao nội dung của đĩa CD mà bạn nhận được cp /dev/sr0 image.iso.
Gilles 'SO- ngừng trở nên xấu xa'

1
@Hashim Tôi không kết luận rằng nó hiệu suất tốt hơn. Tôi đề cập rằng đôi khi nó có hiệu suất tốt hơn . Tôi đã liên kết với một chuẩn mực tôi đã thực hiện - trong trường hợp tốt nhất ddnhịp catnhưng chỉ bằng lãi nhẹ.
Gilles 'SO- ngừng trở nên xấu xa'

4

Có những sự thật thú vị trong trường hợp này, đặc biệt là những điều sau:

  • Tôi vừa kiểm tra đầu ra tôi nhận và cung cấp (lần này tôi đã sử dụng một đĩa khác, chính xác là đĩa thiết lập Xubfox 15.04 x64) và với cả hai quy trình ( ddpv) tổng kiểm tra đều giống hệt nhau .
  • Tôi đã có ý tưởng, sau khi thực hiện dd thủ tục, mở ổ đĩa và đóng nó với cùng một đĩa, và sau đó kết thúc bài kiểm tra vớipv thủ tục. Làm như vậy, tôi đã có được các bản sao giống hệt nhau với cả hai thủ tục.
  • tôi nghĩ lần đầu tiên tôi đã nhận được các tổng kiểm tra khác nhau, vì một số lý do, dữ liệu được thu thập từ ổ đĩa CD / DVD dường như được "ghi lại" cho các mục đích khác trong một thời gian (như bộ đệm) - do đó, các hoạt động khác như tổng kiểm tra là thực hiện nhanh hơn rất nhiều so với chuyển nhượng. Hãy bình luận nếu bạn biết nguyên nhân chính xác cho việc này.
  • Một thực tế khác là ddw / o count=Xtham số dừng chính xác ở cuối đĩa và cho hình ảnh đĩa giống như với pv(tổng kiểm tra giống hệt nhau), vì vậy tốt hơn là tôi nên sử dụng ddtham số w / o hoặc chỉ pv.

Vì vậy, hiện tại, dường như pvddcó thể hoàn thành một bản sao CD / DVD với kết quả tương tự.

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.