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.
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
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
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
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
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
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
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
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
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.
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
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
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
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
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.