- Mở đầu và khuyến nghị
- Khái niệm và ứng dụng của câu lệnh
- Cú pháp và các trường tùy chọn
- Các ví dụ trong hay được sử dụng trong thực tế:
- Sao lưu - phục hồi toàn bộ ổ cứng hoặc phân vùng trong ổ cứng
- .Sao lưu phục hồi MBR
- Chuyển đổi chữ thường thành chữ in hoa
- Tạo một file có dung lượng cố định
- Các tình huống áp dụng trong thực tế
- Kết luận
Xin chào các bạn. Hôm nay tôi sẽ giới thiệu một command dd trong hệ thống Linux. Để có thể hiểu hết được ý nghĩa của câu lệnh này và các tùy chọn của câu lệnh trước tiên bạn cần phải có kiến thức và cách tổ chức lưu trư dữ liệu trong ô cứng, hiều về các sector,tracks, Cylinders,.. các thuận ngữ liên quan đến ổ cứng, và kiến thức về MBR...
Câu lệnh dd trong linux là một trong những câu lệnh thường xuyên được sử dụng. Câu lệnh dd dùng để sử dụng trong các trường hợp sau:
- Sao lưu và phục hồi toàn bộ dữ liệu ổ cứng hoặc một partition
- Chuyển đổi định dạng dữ liệu từ ASCII sang EBCDIC hoặc ngược lại
- Sao lưu lại MBR trong máy (MBR là một file dữ liệu rất quan trong nó chứa các lệnh để LILO hoặc GRUB nạp hệ điều hành)
- Chuyển đổi chữ thường sang chữ hoa và ngược lại
- Tạo một file với kích cỡ cố định
- Tạo một file ISO
#dd if=<địa chỉ đầu vào> of=<địa chỉ đầu ra> option
Trong đó:
Tùy chọn | Ý nghĩa |
---|---|
bs=Bytes | Quá trình đọc (ghi) bao nhiêu byte một lần đọc (ghi) |
cbs=Bytes | Chuyển đổi bao nhiêu byte một lần |
count=Blocks | thực hiện bao nhiêu Block trong quá trình thực thi câu lệnh |
if | Chỉ đường dẫn đọc đầu vào |
of | Chỉ đường dẫn ghi đầu ra |
ibs=bytes | Chỉ ra số byte một lần đọc |
obs=bytes | Chỉ ra số byte một lần ghi |
skip=blocks | Bỏ qua bao nhiêu block đầu vào |
conv=Convs | Chỉ ra tác vụ cụ thể của câu lệnh, các tùy chọn được ghi dưới bảng sau đây |
Các tùy chọn của conv
Tùy chọn | Tác dụng |
---|---|
ascii | Chuyển đôi từ mã EBCDIC sáng ASCII |
ebcdic | Chuyển đổi từ mã ASCII sang EBCDIC |
lcase | Chuyển đổi từ chữ thường lên hết thành chữ in hoa |
ucase | Chuyển đổi từ chữ in hoa sang chữ thường |
nocreat | Không tạo ra file đầu ra |
noerror | Tiếp tục sao chép dữ liệu khi đầu vào bị lỗi |
sync | Đồng bộ dữ liệu với ổ đang sao chép sang |
Lưu ý: Khi bạn định dạng số lượng byte mỗi lần đọc. Mặc định nó được tính theo đơn vị là kB. Bạn có thể thêm một số trường sau để báo định dạng khác:
- c = 1 byte
- w = 2 byte
- b = 512 byte
- kB = 1000 byte
- K = 1024 byte
- MB = 1000000 byte
- M = (1024 * 1024) byte
- GB = (1000 * 1000 * 1000) byte
- G = (1024 * 1024 * 1024) byte
- Tạo một file image cho ổ sda1. Các này sẽ nhanh hơn là viêc chuyển dữ liệu sao ổ khác
dd if=/dev/sda1 of=/root/sda1.img
- Nếu muốn nén ảnh file anh vào bạn có thể sử dụng command sau
dd if=/dev/sda1 | gzip > /root/sda1.img.gz
-Sao lưu dữ liệu từ một phân vùng này đến một phân vùng khác
dd if=/dev/sda2 of=/dev/sdb2 bs=512 conv=noerror,sync
Đối với câu lệnh này bs=512 có ý nghĩa mỗi lần đọc ghi nó đọc và ghi 512 byte
- Phục hồi dữ liệu
dd if=/root/sda1.img of=/dev/sda1
- Sao lưu từ đĩa CDroom
dd if=/dev/cdrom of=/root/cdrom.img conv=noerror
Việc sao lưu lại MBR là việc làm cần thiết đối với hệ thống linux. nó đề phòng cho việc khi virus có thể nhảy được hẳn vào vùng MBR. Lúc bày bất kì một phần mềm diệt virus nào cũng không diệt được con virus này. Cách hay nhất là cài đặt lại MBR và lúc đó việc sao chép MBR lúc trước khi nhiễm sẽ phát huy tác dụng:
- Sao chép MBR
dd if=/dev/sda1 of=/root/mbr.txt bs=512 count=1
- Phục hồi lại MBR
dd if=/root/mbr.txt of=/dev/sda1
- Chuyển chứ hoa thành chứ thường
dd if=/root/test1.doc of=/test2.doc conv=lcase,sycn
Tạo ra một file có kích thước 100M
dd if=/dev/zero of=/root/file1 bs=100M count=1
Các ví dụ tôi vừa nêu trên đều sử dụng rất nhiều trong thực tế. Ngoài ra còn kết hợp với một số câu lệnh để làm thêm tác vụ khác như:
- VD1: Kết hợp với câu lệnh mkswap để tạo phân vùng swap cho máy
- Sử dụng câu lênh dd để tạo một phân vùng trống có kích cỡ 1G:
dd if=/dev/zero of=/root/swap bs=1024M count=1
- Gán quyền cho nó chỉ root mới vào xem được
chmod 600 /root/swap
- Chỉ cho đến vùng swap
mkswap /root/swap
swapon /root/swap
Lúc này tổng dung lượng phân vùng swap sẽ là 2G ( do trước đó tôi cài đặt cho phân vùng swap là 1G trước rồi )
Nếu bạn muốn tạo vùng swap không bị mất khi reboot lại máy. Bạn vào file này rồi chỉnh sửa như sau:
vi /etc/fstab
rồi chỉnh sửa:
/root/swap swap swap defaults 0 0
VD2: Ngoài ra bạn còn có thể kết hợp với câu lênh crontab để có thể lâp lịch sao chép dữ liêu ổ cứng của bạn theo định kì Đầu tiên vào một file sh để chạy
vi dd_command.sh
với nội dung là:
dd if=/dev/sda1 of=/dev/sdb1 conv=noerror,sync
Tạo một crotab cho file chạy
crontab 0 10 * * * sh dd_command.sh
Lúc này đến 10h hàng ngày quá trình sao chép dữ liệu giữa ổ sda1 sang ổ sdb1 được thực hiện
#### 6. Kết luậnBài viết trên đây tôi đã giới thiệu cho các bạn về câu lệnh dd một câu lệnh thường xuyên được sử dụng trong quản trị hệ thống Linux. Ngoài những tùy chọn tổi liệt kê là những tùy chọn thường xuyên được sử dụng trong thực tế thì vẫn còn một số tùy chọn khác thêm nữa. Các bạn có thể xem đây đủ tại đây. Tài liệu tham khảo: