Sử dụng dd command trong Linux [15 ví dụ hữu ích]

Tóm tắt: Trong hướng dẫn nâng cao này, chúng ta sẽ thảo luận về một số ví dụ thực tế của dd command. Sau khi thực hiện theo hướng dẫn này, người dùng nâng cao sẽ có thể làm việc với các thiết bị khối một cách thoải mái từ giao diện dòng lệnh.

Trong Linux, mọi thứ đều là tệp và các thiết bị khối cũng không phải là một ngoại lệ. Thường xuyên, chúng ta cần làm việc với các thiết bị khối. Là người dùng Linux, chúng ta thực hiện một loạt các hoạt động trên các thiết bị khối, chẳng hạn như - sao lưu đĩa hoặc phân vùng, sao lưu Bộ không gian Khởi đầu Chính (MBR), tạo ổ đĩa USB khởi động và nhiều hơn nữa.

Tất nhiên, chúng ta có thể sử dụng các công cụ đồ họa để thực hiện tất cả các hoạt động này. Tuy nhiên, hầu hết các quản trị viên Linux thích sử dụng lệnh dd vì tính năng phong phú và tính ổn định của nó.

Trong hướng dẫn nâng cao này, chúng ta sẽ tìm hiểu về lệnh dd để chuyển đổi và sao chép tệp. Tuy nhiên, khác với lệnh cp, hầu hết thời gian nó được sử dụng với các thiết bị khối.

Trong hướng dẫn này, trước tiên, chúng ta sẽ hiểu cách sử dụng lệnh dd với các ví dụ cơ bản sau đó chúng ta sẽ thảo luận về một số trường hợp sử dụng nâng cao.

Cú pháp dd Command

Cú pháp lệnh dd phổ biến nhất có dạng như sau:

$ dd [if=] [of=]

Trong cú pháp trên:

  • if – đại diện cho tệp đầu vào hoặc nguồn.
  • of – đại diện cho tệp đầu ra hoặc tệp đích.
Chú ý – Cần lưu ý rằng lệnh dd phải được sử dụng rất cẩn thận khi làm việc với các thiết bị khối. Một sai sót nhỏ có thể gây mất dữ liệu vĩnh viễn. Do đó, rất đề nghị thử các hoạt động này trên máy thử trước.

1. Cách sao chép tệp trong Linux

Một trong những sử dụng cơ bản của lệnh dd là sao chép một tệp vào thư mục hiện tại. Hãy hiểu bằng cách tạo một tệp văn bản đơn giản:

$ echo "this is a sample text file" > file-1.txt

Bây giờ, hãy tạo một bản sao bằng lệnh dd:

$ dd if=file-1.txt of=file-2.txt

Trong ví dụ này, tham số if đại diện cho tệp nguồn trong khi tham số of đại diện cho tệp đích.

Copy File with dd Command
Sao chép tệp tin bằng lệnh dd

Đúng giống như lệnh cp, đúng không? Vậy thì có gì đặc biệt về lệnh dd?

Lệnh dd mạnh mẽ hơn nhiều so với lệnh cp thông thường. Các phần cuối của hướng dẫn trình bày một số trường hợp sử dụng nâng cao của nó.

2. Cách chuyển văn bản từ chữ thường sang chữ hoa

Lệnh dd cho phép chúng ta thực hiện chuyển đổi chữ hoa chữ thường. Để làm được điều này, chúng ta có thể sử dụng tham số conv.

Để hiểu điều này, trước tiên, hiển thị nội dung của tệp tin file-1.txt:

$ cat file-1.txt

this is a sample text file

Bây giờ, hãy chuyển đổi nội dung tập tin thành chữ in hoa bằng lệnh sau:

$ dd if=file-1.txt of=upper-case.txt conv=ucase

Trong ví dụ này, tùy chọn conv=ucase được sử dụng để chuyển đổi các chữ thường thành chữ in hoa.

Cuối cùng, hãy xác minh nội dung của tệp mới được tạo:

$ cat upper-case.txt

THIS IS A SAMPLE TEXT FILE
Convert Text from Lowercase to Uppercase in Linux
Chuyển đổi văn bản từ chữ thường thành chữ in hoa trong Linux

3. Cách chuyển văn bản từ chữ hoa sang chữ thường

Tương tự, chúng ta có thể sử dụng lệnh dd để chuyển đổi các chữ in hoa thành chữ thường:

Hãy sử dụng tùy chọn conv=lcase để chuyển đổi các chữ in hoa thành chữ thường:

$ dd if=upper-case.txt of=lower-case.txt conv=lcase

Bây giờ, hãy hiển thị nội dung của tệp tin mới được tạo và xác minh rằng quá trình chuyển đổi đã được thực hiện đúng:

$ cat lower-case.txt

this is a sample text file
Convert Text to Lowercase in Linux
Chuyển đổi văn bản thành chữ thường trong Linux

4. Tránh ghi đè tệp đích trong Linux

Mặc định, lệnh dd sẽ ghi đè tệp đích, tức là nó sẽ ghi đè lên tệp nếu có cùng tên tại đích.

Tuy nhiên, chúng ta có thể vô hiệu hóa hành vi mặc định này bằng cách sử dụng tùy chọn conv=excl như đã hiển thị.

$ dd if=file-1.txt of=file-2.txt conv=excl

dd: failed to open ‘file-2.txt’ File exists

Ở đây, chúng ta có thể thấy rằng lệnh dd đã ngừng thực hiện hoạt động vì tập tin cùng tên đã tồn tại tại điểm đến.

5. Nối dữ liệu vào tệp bằng dd command

Đôi khi, chúng ta muốn cập nhật tệp ở chế độ nối dữ liệu, có nghĩa là nội dung mới sẽ được thêm vào cuối tệp đích.

Chúng ta có thể làm điều này bằng cách kết hợp hai cờ – oflag=append và conv=notrunc. Ở đây, oflag đại diện cho cờ đầu ra trong khi tùy chọn notrunc được sử dụng để vô hiệu hóa cắt gọt tại điểm đến.

Để hiểu điều này, trước tiên, hãy tạo một tệp văn bản mới:

$ echo "append example demo" > dest.txt

Tiếp theo, hãy gắn nội dung vào tệp dest.txt bằng lệnh sau:

$ dd if=file-1.txt of=dest.txt oflag=append conv=notrunc

Bây giờ, hãy kiểm tra nội dung của tệp dest.txt:

$ cat dest.txt 

append example demo
this is a sample text file
Append Data to File Using dd Command
Gắn dữ liệu vào tệp bằng lệnh dd

6. Bỏ qua byte hoặc ký tự trong khi đọc tệp đầu vào

Chúng ta có thể chỉ thị cho lệnh dd bỏ qua một số ký tự đầu tiên khi đọc tệp đầu vào bằng cách sử dụng các tùy chọn ibs và skip.

Trước tiên, hãy hiển thị nội dung của tệp tin file-1.txt:

$ cat file-1.txt

this is a sample text file

Tiếp theo, hãy bỏ qua 8 ký tự đầu tiên bằng cách sử dụng lệnh sau:

$ dd if=file-1.txt of=file-2.txt ibs=8 skip=1

Bây giờ, hãy xác minh nội dung của tệp file-2.txt mới được tạo:

$ cat file-2.txt

a sample text file
Skip Characters from File Using dd
Bỏ qua ký tự từ tệp bằng lệnh dd

Trong đầu ra trên, chúng ta có thể thấy rằng lệnh đã bỏ qua 8 ký tự đầu tiên.

7. Sao lưu phân vùng đĩa Linux bằng dd command

Cho đến nay, chúng ta đã thảo luận về các ví dụ cơ bản của lệnh dd không yêu cầu quyền root. Bây giờ, hãy xem một số trường hợp sử dụng nâng cao.

Tương tự như các tệp, chúng ta có thể sao lưu phân vùng đĩa bằng lệnh dd. Ví dụ, lệnh dưới đây sẽ sao lưu phân vùng /dev/sda1 vào partition-bkp.img:

$ sudo dd if=/dev/sda1 of=partition-bkp.img
Backup Partition in Linux Using dd Command
Sao lưu phân vùng trong Linux bằng lệnh dd

8. Khôi phục phân vùng đĩa Linux bằng lệnh dd

Trong ví dụ trước đó, chúng ta đã sao lưu phân vùng /dev/sda1 vào tệp partition-bkp.img.

Bây giờ, hãy khôi phục nó vào phân vùng /dev/sdb1 bằng lệnh sau:

$ sudo dd if=partition-bkp.img of=/dev/sdb1
Restore Linux Partition Using dd Command
Khôi phục phân vùng Linux bằng lệnh dd

Chú ý rằng kích thước của phân vùng đích phải bằng hoặc lớn hơn kích thước sao lưu.

9. Sao lưu toàn bộ ổ cứng Linux bằng lệnh dd

Ổ đĩa có thể có nhiều phân vùng. Do đó, tạo sao lưu và khôi phục từng phân vùng có thể trở nên tốn thời gian vì số lượng phân vùng tăng lên. Để khắc phục hạn chế này, chúng ta có thể sao lưu toàn bộ ổ đĩa giống như các phân vùng.

Vậy, hãy sao lưu toàn bộ đĩa /dev/sda bằng lệnh sau:

$ sudo dd if=/dev/sda of=disk-bkp.img
Backup Entire Linux Hard Drive Using dd Command
Sao lưu toàn bộ ổ đĩa Linux bằng lệnh dd

Lệnh trên sao lưu toàn bộ đĩa kể cả các phân vùng của nó.

10. Khôi phục ổ cứng Linux bằng lệnh dd

Tương tự các phân vùng và đĩa, chúng ta có thể khôi phục lại bản sao lưu của toàn bộ đĩa. Trong ví dụ trước đó, chúng ta đã sao lưu toàn bộ đĩa vào tệp tin disk-bkp.img. Bây giờ, hãy sử dụng nó để khôi phục một ổ đĩa /dev/sdb:

Trước tiên, hãy xóa tất cả các phân vùng từ ổ đĩa /dev/sdb và xác minh rằng tất cả các phân vùng đã được xóa:

$ lsblk /dev/sdb

Tiếp theo, hãy khôi phục bản sao lưu vào ổ đĩa /dev/sdb bằng lệnh sau:

$ sudo dd if=disk-bkp.img of=/dev/sdb

Cuối cùng, hãy xác minh rằng phân vùng đã được tạo trên ổ đĩa /dev/sdb:

$ lsblk /dev/sdb
Restore Linux Hard Drive Using dd Command
Khôi phục ổ đĩa Linux bằng lệnh dd

11. Sao lưu bản ghi khởi động chính bằng lệnh dd

Bộ Không gian Khởi đầu Chính (MBR) được đặt trong sector đầu tiên của ổ đĩa khởi động. Nó chứa thông tin về các phân vùng ổ đĩa. Chúng ta có thể sử dụng lệnh dd như hiển thị dưới đây để sao lưu MBR:

$ sudo dd if=/dev/sda of=mbr.img bs=512 count=1

Lệnh trên sao lưu 512 byte đầu tiên, tức là một sector.

Backup MBR Using dd Command
Sao lưu MBR bằng lệnh dd

Chú ý rằng lệnh trên phải được thực hiện trên ổ đĩa khởi động.

12. Khôi phục bản ghi khởi động chính bằng lệnh dd

Trong ví dụ trước đó, chúng ta đã sao lưu MBR. Bây giờ, hãy khôi phục nó trên ổ đĩa /dev/sdb bằng lệnh sau:

$ sudo dd if=mbr.img of=/dev/sdb
Restore MBR Using dd Command
Khôi phục MBR bằng lệnh dd

13. Sao chép nội dung ổ đĩa CD/DVD bằng lệnh dd

Tương tự như các phân vùng và ổ đĩa, chúng ta có thể sử dụng lệnh dd để sao chép nội dung từ ổ đĩa CD hoặc DVD. Vì vậy, hãy sử dụng lệnh sau để thực hiện:

$ sudo dd if=/dev/cdrom of=alma-minimal.iso

Trong Linux, ổ đĩa CD/DVD được đại diện bởi thiết bị /dev/cdrom. Bởi vậy, chúng tôi đang sử dụng nó làm tệp nguồn.

Bây giờ, hãy xác minh rằng nội dung đã được sao chép thành công bằng cách xác minh checksum của nó:

$ sha256sum alma-minimal.is
Copy CD/DVD Contents Using dd Command
Sao chép nội dung CD/DVD bằng lệnh dd

14. Tạo ổ USB có khả năng khởi động bằng lệnh dd

Trong ví dụ trước đó, chúng ta đã tạo một hình ảnh iso của Alma Linux. Bây giờ, hãy sử dụng nó để tạo một ổ đĩa USB khởi động:

$ sudo dd if=alma-minimal.iso of=/dev/sdb
Create Bootable USB Using dd Command
Tạo ổ đĩa USB khởi động bằng lệnh dd

Chú ý rằng, lệnh trên phải được thực hiện với ổ đĩa USB đúng.

15. Cách hiển thị thanh tiến trình

Mặc định, lệnh dd không hiển thị tiến trình khi thực hiện sao chép. Tuy nhiên, chúng ta có thể ghi đè lên hành vi mặc định này bằng cách sử dụng tùy chọn status.

Vì vậy, hãy sử dụng tùy chọn status=progress với lệnh dd để hiển thị thanh tiến trình:

$ sudo dd if=alma-minimal.iso of=/dev/sdb status=progress
Show dd Command Progress
Hiển thị tiến trình lệnh dd

Trong bài viết này, chúng tôi đã thảo luận về một số ví dụ thực tế của dd command. Người dùng nâng cao có thể tham khảo các ví dụ này trong đời sống hàng ngày khi làm việc với hệ thống Linux. Tuy nhiên, chúng ta phải rất cẩn thận khi thực hiện các lệnh này. Vì một sai sót nhỏ có thể ghi đè lên nội dung của toàn bộ đĩa.