15 ví dụ về lệnh dd trên Centos / Ubuntu / Debian / Fedora

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 lệnh dd. Sau khi làm 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.

Cú pháp lệnh dd:

Cú pháp phổ biến nhất của lệnh dd 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 đích.

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 đó, nên thử các thao tác này trên máy thử trước.

Sao chép một tệp trong Linux

Một trong những cách 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 của nó bằng cách sử dụ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.

Lệnh dd cùng 15 ví dụ thực hành trong hệ điều hành Linux

Liệu đây có phải là hoàn toàn giống với lệnh cp không? Vậy điều gì đặc biệt về lệnh dd? Lệnh dd mạnh mẽ hơn rất nhiều so với lệnh cp thông thường. Các phần sau của hướng dẫn sẽ thảo luận về một số trường hợp sử dụng nâng cao của nó.

Chuyển đổi chữ thường thành chữ hoa

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

$ cat file-1.txt

this is a sample text file

Lệnh dd cùng 15 ví dụ thực hành trong hệ điều hành Linux

Cách chuyển đổi chữ hoa thành chữ thường

Một cách tương tự, chúng ta có thể sử dụng lệnh dd để chuyển đổi các chữ cái in hoa thành chữ thường. Sử dụng tùy chọn conv=lcase để chuyển đổi các chữ cái in hoa thành chữ thường:

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

Bây giờ, hiển thị nội dung của tệp văn bản 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

Lệnh dd cùng 15 ví dụ thực hành trong hệ điều hành Linux

Tránh ghi đè lên tệp đích trong Linux

Mặc định, lệnh dd sẽ ghi đè lên tệp đích, có nghĩa là nó sẽ ghi đè lên tệp nếu tệp đó đã tồn tại ở đích với cùng tên. 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:

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

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

Ở đây, có thể thấy rằng lệnh dd đã dừng quá trình thực hiện vì tệp có cùng tên đã tồn tại ở đích.

Ghi dữ liệu vào cuối tệp bằng lệnh dd

Đôi khi, chúng ta muốn cập nhật tệp với chế độ ghi thêm, 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ể thực hiện đ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 việc cắt bớt ở đích.

Để 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, thêm 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ờ, kiểm tra nội dung của tệp dest.txt:

$ cat dest.txt 

append example demo
this is a sample text file

Lệnh dd cùng 15 ví dụ thực hành trong hệ điều hành Linux

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

Chúng ta có thể chỉ định 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. Đầu tiên, hãy hiển thị nội dung của tệp 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ờ, xác minh nội dung của tệp file-2.txt:

$ cat file-2.txt

a sample text file

Lệnh dd cùng 15 ví dụ thực hành trong hệ điều hành Linux

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

Sao lưu phân vùng đĩa Linux bằng lệnh dd

Cho đến nay, chúng ta đã thảo luận về các ví dụ cơ bản của lệnh dd mà 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.

Giống 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 sao lưu phân vùng /dev/sda1 vào tệp partition-bkp.img.

$ sudo dd if=/dev/sda1 of=partition-bkp.img

Lệnh dd cùng 15 ví dụ thực hành trong hệ điều hành Linux

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.

$ sudo dd if=partition-bkp.img of=/dev/sdb1

Lệnh dd cùng 15 ví dụ thực hành trong hệ điều hành Linux

Bây giờ, hãy khôi phục nó vào phân vùng /dev/sdb1 bằng lệnh sau đây. Đáng lưu ý 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.

Sao lưu toàn bộ ổ đĩa Linux bằng lệnh dd

Ổ đĩa có thể có nhiều phân vùng. Vì vậy, việc sao lưu và khôi phục từng phân vùng có thể trở nên tốn thời gian khi số lượng phân vùng tăng lên. Để khắc phục giới hạn này, chúng ta có thể sao lưu toàn bộ ổ đĩa giống như các phân vùng. Vì vậy, hãy sao lưu toàn bộ ổ đĩa /dev/sda bằng lệnh sau đây:

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

Lệnh dd cùng 15 ví dụ thực hành trong hệ điều hành Linux

Khôi phục ổ đĩa Linux bằng lệnh dd

Tương tự như các phân vùng, 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 disk-bkp.img. Bây giờ, sử dụng nó để khôi phục trên ổ đĩa /dev/sdb. Trước tiên, 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, khôi phục sao lưu trên ổ đĩa /dev/sdb bằng lệnh:

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

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

$ lsblk /dev/sdb

Lệnh dd cùng 15 ví dụ thực hành trong hệ điều hành Linux

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

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

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

Lệnh dd cùng 15 ví dụ thực hành trong hệ điều hành Linux

Lệnh trên sao lưu 512 byte đầu tiên, tức là một sector. Lưu ý rằng, lệnh trên phải được thực thi trên ổ đĩa khởi động.

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

Ví dụ trước đã sao lưu bản ghi khởi động chính (MBR). Bây giờ, khôi phục nó trên ổ đĩa /dev/sdb bằng lệnh sau:

$ sudo dd if=mbr.img of=/dev/sdb

Lệnh dd cùng 15 ví dụ thực hành trong hệ điều hành Linux

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 sử dụng lệnh dd để sao chép nội dung từ ổ đĩa CD hoặc DVD. Vì vậy, lệnh dưới đây để thực hiện việc tương tự.

$ 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. Do đó, có thể sử dụng nó như một tệp nguồn. Đảm bảo 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

Lệnh dd cùng 15 ví dụ thực hành trong hệ điều hành Linux

Tạo ổ đĩa USB khởi động bằng lệnh dd

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

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

Lệnh dd cùng 15 ví dụ thực hành trong hệ điều hành Linux

Lưu ý quan trọng: lệnh trên phải được thực thi với ổ đĩa USB chính xác.

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 hoạt động 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, 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

Lệnh dd cùng 15 ví dụ thực hành trong hệ điều hành Linux