Có những lựa chọn thay thế cho `dd`?


13

Những công cụ nào khác tôi nên sử dụng để đọc và ghi các tệp với sự cắt xén, tìm kiếm và bỏ qua. Các tùy chọn dòng lệnh của dd có vẻ bất tiện và xa lạ và tôi không thích chọn giữa chế độ tìm kiếm chậm, nhưng chính xác ( bs=1) và chế độ nhanh, nhưng không linh hoạt ( bs=4khoặc bất cứ điều gì).

Có các công cụ hiện đại hơn để đọc 555 byte từ một tệp (hoặc ống hoặc ổ cắm hoặc dev) từ vị trí 31337 và ghi chúng vào tệp khác ở vị trí 128205 (sử dụng các khối 512 + 43), có hoặc không cắt bớt?


2
Tôi vẫn không thấy có gì sai dd. Bạn luôn có thể đặt một trình bao bọc kịch bản lệnh shell xung quanh nó nếu bạn không thích giao diện. ddlà trong tiêu chuẩn POSIX , đó là một điểm cộng rất lớn.
jw013

2
Điều sai chính là không có khả năng tìm kiếm hoặc bỏ qua các khối phân đoạn. Điều sai thứ hai status=noxferkhông phải là mặc định và bị hỏng và tôi cần iflag=fullblock(bỏ qua trong một số tập lệnh => dữ liệu bị hỏng).
Vi.

4
1. bs=1=> toàn bộ đường ống chậm. Ví dụ tôi có thể muốn kết xuất tập tin video bắt đầu từ một số khung chính xác. 2. "Nó mất một số số học" => không phù hợp lắm cho các lệnh onelin và các lệnh shell thường quy.
Vi.

1
PSA: dd conv=seek_bytessẽ làm seekviệc với độ chính xác byte.
i336_

1
@ i336_ Tôi nghĩ rằng điều đó chỉ có nghĩa là tùy chọn an toàn nhất đối với chúng tôi là tránh sử dụng tập lệnh shell và viết một tệp thực thi được liên kết tĩnh độc lập. Tôi chỉ đi mua sắm thay thế bởi vì thỉnh thoảng tôi nghe về những thứ điên rồ có thể trực tiếp trong bash, và tự hỏi liệu truy cập tệp trực tiếp có thể là một trong những điều điên rồ đó không.
Trejkaz

Câu trả lời:


4

Có công cụ ddrescue(xem ra, cũng dd_rescuecó một chương trình khác với chức năng gần như giống nhau). Nó sử dụng cú pháp quen thuộc hơn với dấu gạch ngang đơn cho dấu gạch ngang ngắn hoặc kép cho các tùy chọn dài. Từ trang người đàn ông:

   -i, --input-position=<bytes>
          starting position in input file [0]

   -K, --skip-size=<bytes>
          initial size to skip on read error [64 KiB]

   -M, --retrim
          mark all failed blocks as non-trimmed

   -o, --output-position=<bytes>
          starting position in output file [ipos]

1
ddrescue - --> Infile and outfile are the same., ddrescue /dev/stdin /dev/stdout-> Infile and outfile are the same.. Khởi đầu tồi tệ của câu chuyện ...
Vi.

Tôi chỉ thử với dd_rescue. Nó đưa ra một cảnh báo rằng tập tin (stdin) không thể tìm kiếm được, nhưng vẫn tiếp tục. Bạn có thể thử nó. Tuy nhiên, ddrescuecảm thấy đầy đủ hơn - tính năng và trưởng thành.
Marco

1
@Vi.: Đừng bắn sứ giả. ddrescuelà đúng, đường ống không thể tìm kiếm. Nếu bạn muốn bắt đầu đọc tại một điểm cụ thể trong một tệp, bạn cần cấp cho nó quyền truy cập vào tệp đang đề cập, chứ không phải dữ liệu được dẫn từ một chương trình khác. Ngoài ra, hãy cẩn thận khi sử dụng các đường ống chiến đấu với mong muốn này của bạn để đạt tốc độ tối đa, vì cách duy nhất để giả lập tìm kiếm trong đường ống là đọc và vứt bỏ những phần bạn không muốn xử lý. Tìm kiếm trong một tập tin thực tế là hiệu quả hơn nhiều.
Warren Young

Thật vậy, vì công cụ này được thiết kế để cứu dữ liệu bị hỏng, không có khả năng đường ống. Đây là một chút xấu hổ khi bạn muốn linh hoạt tìm kiếm thông qua một tập tin đầu vào nhưng chỉ muốn đưa kết quả đến thiết bị xuất chuẩn. Đối với mục đích dự định của nó, mặc dù, nó là tuyệt vời.
Cuộc đua nhẹ nhàng với Monica

2

dcfldd là một dd khác thay thế. Nó không giải quyết câu hỏi của OP về tính linh hoạt của đầu vào / đầu ra, nhưng có thể hữu ích cho những người khác đến đây thông qua tìm kiếm google.

Nó dựa trên dd gnu, với các tính năng bổ sung sau:

  • Băm khi đang di chuyển - dcfldd có thể băm dữ liệu đầu vào khi nó được truyền, giúp đảm bảo tính toàn vẹn của dữ liệu.
  • Đầu ra trạng thái - dcfldd có thể cập nhật cho người dùng về tiến trình của nó về lượng dữ liệu được truyền và thời gian hoạt động sẽ kéo dài bao lâu.
  • Khăn lau đĩa linh hoạt - dcfldd có thể được sử dụng để lau đĩa nhanh chóng và với một mẫu đã biết nếu muốn.
  • Image / lau Xác minh - dcfldd có thể xác minh rằng ổ đĩa đích là khớp bit-bit-bit của tệp hoặc mẫu đầu vào được chỉ định.
  • Nhiều đầu ra - dcfldd có thể xuất ra nhiều tệp hoặc đĩa cùng một lúc.
  • Đầu ra phân tách - dcfldd có thể phân tách đầu ra thành nhiều tệp với nhiều cấu hình hơn lệnh tách.
  • Đầu ra và nhật ký đường ống - dcfldd có thể gửi tất cả dữ liệu nhật ký và đầu ra của nó tới các lệnh cũng như các tệp nguyên bản.

2

Một thay thế tốt là pv. Nó không chỉ tự động tính toán kích thước khối hiệu quả nhất, về cơ bản tăng tốc mọi thứ, mà còn cung cấp tiến độ, trong số những thứ khác. Cách sử dụng rất đơn giản:

pv < /dev/sda > sda.img

Nó chơi tốt với nén quá. Một cách nhanh chóng để sao lưu và nén đĩa trong một lần di chuyển là như vậy:

pv < /dev/sdb | pigz -9 > disk.img.gz

Bạn có thể tìm hiểu thêm ở đây .


Tính năng dự kiến ​​chính là tìm kiếm trong các tệp đầu ra và đầu vào, mà pv (chế độ xem ống) không cung cấp, vì không có tìm kiếm cho các đường ống.
Vi.
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.