os.backup2 (v.20221205)

Hình #1: Ext4 layout

Script backup Debian OS thành file .img, có thể nén thành file .xz | .zstd | .gz

File kết quả có thể dùng ghi vào thẻ nhớ và khởi động từ thẻ nhớ này.

Mặc dù đĩa gốc có thể kiểu MBR hay GPT, đĩa backup .img được xây dựng kiểu MBR và chỉ gồm 2 partition boot và rootfs. Khi phục hồi thủ công bằng cách copy file từ đĩa .img, cần chép đè file cmdline.org và fstab.org lên cmdline.txt và fstab để trả lại cấu hình gốc.

usage:
  os.backup2 [-b boot_part]
             [-r root_part]
             [-p out_dir|out_part]
             [-x exclude]
             [-z xz|zst|gz]
             [-s size]
    -b: boot partition hay partion được mount thành /boot
    -r: root partition hay partion được mount thành /
    -p: tên folder|partition chứa file backup, mặc định /tmp
    -x: tên file liệt kê các file/thư mục không cần sao lưu
    -z: nén file kiểu xz|zst|gz
    -s: thêm/bớt phần đĩa trống (tính bằng MB)

Thí dụ:
  ./os.backup2 -z xz -p /backup
  ./os.backup2 -p /dev/mapper/backup.vg-os.lv

Người dùng có kinh nghiệm có thể giảm kích thước partition bằng tham số -s với size là số âm.

Hình #2: Tạo file backup .img
Hình #3: Dung lượng trống trên partition

df báo cáo đã sử dụng 99% dung lượng partition, tuy nhiên nếu không dùng để chạy OS, có thể rút gọn partition hơn nữa bằng tham số -s (resize2fs không giúp rút gọn thêm). Thí dụ

./os.backup2 -p /backup -s -64

Chú thích

Hình #4: dumpe2fs device
  1. Group n (với n modulo 16 = 0) có Block Bitmap (16), Inode Bitmap (16) và Inode Table (max 512) dùng cho 16 Block trong group. Dành riêng tối đa 544 block
  2. Group n (với n có dạng 0, 1, 3^k hay 5^k hay 7^k, k>0) thì có Super Block (1), Group descriptors (1-2), Reserved GDT blocks (?). Dành riêng ? block
  3. Các block còn lại chỉ gồm data, tuy nhiên một số lại dùng cho overhead clusters, journal…

Dãy group thỏa điều kiện 0, 1, 3^k hay 5^k hay 7^k, k>0) được tính như sau

## Giả sử c0 = 667311 block = $(( 667311/32768 )) ~ 21 group
a=(0 1)
for j in 3 5 7; do
  i=1
  until [[ $((j**i)) -gt 21 ]]; do
    a+=( $((j**i)) )
    ((i++))
  done
done

Dãy số kết quả (đã sort) gồm 6 số (tăng rất chậm so với số group): 0 1 3 5 7 9

Không có công thức để tính Reserved GDT blocks, Overhead clusters

Vấn đề là tính kích thước partition sao cho có thể chứa đủ lượng data biết trước.

Kích thước partition lớn hơn cần thiết thì an toàn nhưng không phù hợp với mục đích backup. Chúng ta xây dựng sao cho dung lượng partition còn trống vào khoảng 1% dung lượng cả partition để có thể chạy OS từ partition này.

Download

Comments Off on os.backup2 (v.20221205)

Filed under Software

Comments are closed.