Bài viết này giới thiệu các bạn về cách sao lưu dữ liệu và nén dữ liệu trên hệ điều hành Linux.
1. Sao lưu dữ liệu
Sao lưu dữ liệu trên máy tính cá nhân hoặc máy chủ rất quan trọng vì ngăn ngừa việc mất dữ liệu. Chúng ta có thể sao lưu dữ liệu hoặc toàn bộ hệ thống của bạn.
Có nhiều cách sao lưu dữ liệu. Các cách cơ bản đó là sao chép dữ liệu dùng cp , cách mạnh hơn việc sao chép dùng rsync.
Cả hai cách trên được sử dụng để đồng bộ hóa toàn bộ cây thư mục. Tuy nhiên, rsync hiệu quả hơn vì nó kiểm tra tệp được sao chép có tồn tại chưa. Nếu tệp đã tồn tại và không có sự thay đổi về kích thước hoặc thời gian sửa đổi rsync sẽ không sao chép để tiết kiệm thời gian. Rsync chỉ sao chép các phần của tệp đã thực sự thay đổi nên thể rất nhanh.
rsync hiệu quả khi sao chép đệ quy một cây thư mục này sang cây khác, bởi vì chỉ có sự khác biệt được truyền qua mạng. Người ta thường đồng bộ cây thư mục đích với nguồn gốc, sử dụng tùy chọn -r để đệ quy xuống cây thư mục sao chép tất cả các tệp và thư mục bên dưới tệp được liệt kê dưới dạng nguồn.
cp
có thể sao chép tệp đến và từ đích trên máy cục bộ (trừ khi bạn sao chép vào hoặc từ hệ thống tệp được gắn bằng NFS), nhưng rsync cũng có thể được sử dụng để sao chép tệp từ máy này sang máy khác.
2. Lệnh rsync
Rsync là tiện ích sao lưu dữ liệu mạnh mẽ:
rsync options source destination
Trong đó:
- Source : là dữ liệu nguồn
- Destination: là dữ liệu đích
- Options: các tuỳ chọn kèm theo
Ta có thể xem thêm các tuỳ chọn ở lệnh: man rsync
Một số tuỳ chọn thường dùng:
-v
: hiển thị trạng thái kết quả.-r
: copy dữ liệu recursively, nhưng không đảm bảo thông số của file và thư mục.-z
: nén dữ liệu khi transfer, tiết kiệm băng thông tuy nhiên tốn thêm một chút thời gian.-h
: human-readable, output kết quả dễ đọc.--delete
: xóa dữ liệu ở destination nếu source không tồn tại dữ liệu đó.
Lưu ý: Chỉ dùng --delete khi bạn chắc chắn rằng "source" và "destination" đều đúng, nhất là về vị trí, nếu bạn để sai vị trí hoặc sai tên thư mục thì có thể dẫn đến mất dữ liệu toàn bộ khi dùng rsync!
Ví dụ: copy thư mục rpmpkgs trong thư mục root xem /tmp/backups/ trên local:
rsync -avzh /root/rpmpkgs /tmp/backups/
rsync -avzh /root/rpmpkgs /tmp/backups1/
Câu lệnh trên sẽ copy toàn bộ file từ thư mục /root/rpmpkgs đến thư mục /tmp/backups/ trên cùng 1 máy tính.
Ví dụ: copy thư mục rpmpkgs từ local lên server có địa chỉ IP 192.168.21.145 vào thư mục /home:
rsync -avzh rpmpkgs/ root@192.168.21.145:/home/
3. Nén dữ liệu
Dữ liệu thường được nén để tiết kiệm dung lượng đĩa và để làm giảm thời gian truyền qua mạng.
Hệ điều hành Linux dùng một sớ phương pháp để nén:
Command | Tác dụng |
---|---|
gzip | Tiện ích được dùng thường xuyên nhất trong hệ điều hành Linux. |
bzip2 | Tạo các tệp nhỏ hơn so với tệp tạo bằng gzip. |
xz | Tiện ích nén hiểu quả về không gian nhất trong hệ điều hành Linux. |
zip | Dùng để kiểm tra giải nén tài liệu lưu trữ từ các hệ điều hành khác. |
Các kỹ thuật này khác nhau về hiệu quả của việc nén (tiết kiệm được bao nhiêu dung lượng) và thời gian để nén. Các kỹ thuật hiệu quả hơn thì mất nhiều thời gian hơn. Thời gian giải nén không thay đổi nhiều qua các phương pháp khác nhau.
Ngoài ra, tiện ích tar thường được sử dụng để nhóm các tệp trong kho lưu trữ và sau đó nén toàn bộ kho lưu trữ cùng một lúc.
3.1. Nén dữ liệu bằng gzip
Gzip là tiện ích được sữ dụng thường xuyên vì nó nén tốt và rất nhanh.
3.1.1. Một số ví dụ về gzip
gzip *
Dùng để nén tất cả các tệp trong thư mục hiện hành, các tệp được nén và đổi tên phần mở rộng .gz.
gzip -r projectX
Nén tất cả các tệp có trong thư mục projectX và cùng với tất cả các tệp trong tất cả thư mục trong projectX.
gunzip foo
Để giải nén foo tìm thấy trong các tập tin foo.gz. lệnh gunzip giống như gzip. Để giải nén file gzip ta dùng lệnh:
gzip -d filename
3.2. Nén dữ liệu bằng bzip2
bzip2 có cú pháp như gzip nhưng nó sử dụng thuật toán nén khác nhau và tạo ra các tệp nhỏ hơn, và mất nhiều thời gian hơn để thực hiện công việc của nó. Vì vậy, nó được sử dụng để nén các tệp lớn hơn.
3.2.1. Một số ví dụ về bzip2
bzip2 *
Dùng để nén tất cả các tệp trong thư mục hiện hành, các tệp được nén và đổi tên phần mở rộng .bz2.
bunzip2 *.bz2
Giải nén tất cả các tệp có phần mở rộng là .bz2 trong thư mục hiện tại. và bunzip2 giống như bzip2 -d.
3.3. Nén dữ liệu bằng xz
xz là tiện ích nén hiệu quả nhất về không gian được sử dụng trong Linux và hiện được sử dụng lưu trữ tài liệu của nhân Linux.
3.3.1. Một số ví dụ về xz:
xz *
Dùng để nén tất cả các tệp trong thư mục hiện hành, các tệp được nén và đổi tên phần mở rộng .xz.
xz foo
Nén tệp foo vào foo.xz bằng mức nén mặc định (-6) và xoá foo nếu nén thành công.
xz -dk bar.xz
Giải nén bar.xz thành bar và không xoá bar.xz khi giải nén thành công.
xz -dcf a.txt. b.txt.xz > abcd.txt
Giải nén các tệp nén và không nén thành đầu ra tiêu chuẩn sự dụng lệnh duy nhất.
xz -d *.xz
Giải nén các tệp được nén bằng xz
3.4. Nén dữ liệu bằng zip
zip là chương trình không thường được sử dụng để nén các file trong Linux, nhưng để kiểm tra và giải nén tài liệu lưu trữ từ hệ điều hành khác. Nó chỉ được sử dụng trong Linux khi bạn nhận được tệp nén từ người dùng Windows.
3.4.1. Một số ví dụ về zip:
zip backup *
Nén tất cả các tệp trong thư mục hiện hành và đưa chúng vào tệp backup.zip.
zip -r backup.zip ~
Lưu trữ vào thư mục đăng nhập hiện tại của bạn và tất cả các tệp thư mục trong tệp backup.zip
unzip backup.zip
Giải nén các tệp trong tệp backup.zip, đưa chúng vào thư mục hiện hành.
3.5. Nén dữ liệu bằng tar
tar là viết tắt của "tape archive" và được sử dụng để lưu trữ các tệp vào băng từ. Nó cho phép bạn tạo hoặc trích xuất các tệp từ một tệp lưu trữ. Chúng ta có thể tùy chọn nén trong khi tạo tệp lưu trữ và giải nén trong khi trích xuất nội dung của nó.
3.5.1. Một số ví dụ về tar:
tar xvf mydir.tar
Dùng giải nén tất cả các tệp trong mydir.tar.
tar zcvf mydir.tar.gz mydir
Tạo kho lưu và nén bằng gzip
tar jcvf mydir.tar.bz2 mydir
Tạo kho lưu và nén bằng bz2
tar Jcvf mydir.tar.xz mydir
Tạo kho lưu và nén bằng xz
tar xvf mydir.tar.gz
Tìm các tệp mydir.tar.gztar.gz và đưa vào thư mục mydir
4. Copy đĩa đến đĩa
Tiện ích dd
là chương trình rất hữu ích trong hệ diều hành Linux dùng để chuyển đổi và sao lưu tệp tin, tạo các bản sao của không gian đĩa.
Ví dụ: Tạo bản sao lưu bản ghi khởi động chính (MBR) dùng 512 byte đầu tiên của đĩa chứa bảng mô tả phân vùng trên đĩa đó:
dd if=/dev/sda of=sda.mbr bs=512 count=1
Để copy một đĩa này sang đĩa khác ta dùng lệnh:
dd if=/dev/sda of=/dev/sdb
Với cú pháp trên thì tất cả dữ liệu có trong đĩa thứ 2 trước đó sẽ bị xoá toàn bộ. Và một bản sao của đỉa thứ nhất sẽ được tạo trên đĩa thứ 2.