Tôi đang cố gắng sao lưu / khôi phục một ổ đĩa LVM trên máy chủ Ubuntu 20.04 (Focal Fossa) cục bộ. Máy chủ sản xuất có LV là 500 GB, tuy nhiên chỉ có 19 GB được sử dụng cho đến nay.

Máy chủ phát triển cục bộ có 24 GB dung lượng trống, nơi tôi dự định khôi phục 19 GB từ phiên bản sản xuất. Tôi sử dụng -L 24Glàm tham số trong khi thực hiện ảnh chụp nhanh LVM. Quá trình không thể khôi phục với thông báo: "không còn dung lượng trên thiết bị":

Máy chủ sản xuất:

sudo lvcreate -s /dev/vg0/test -n backup_test -L 24G
sudo dd if=/dev/vg0/backup_test  | lz4 > test_lvm.ddimg.lz4

1048576000+0 records in
1048576000+0 records out
536870912000 bytes (537 GB, 500 GiB) copied, 967.79 s, 555 MB/s

sudo lvdisplay /dev/vg0/backup_test
  --- Logical volume ---
  LV Path                /dev/vg0/backup_test
  LV Name                backup_test
  VG Name                vg0
  LV UUID                IsGBmM-VM7C-2sO4-VrC1-kHKg-EzcR-4Hej44
  LV Write Access        read/write
  LV Creation host, time leo, 2021-07-04 12:45:45 +0200
  LV snapshot status     active destination for m360
  LV Status              available
  # open                 0
  LV Size                500.00 GiB
  Current LE             128000
  COW-table size         24.00 GiB
  COW-table LE           6144
  Allocated to snapshot  0.01%
  Snapshot chunk size    4.00 KiB
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:10

Máy chủ thử nghiệm cục bộ:

sudo lvcreate -n restore -L 24.5G data
sudo mkfs.ext4 /dev/data/restore
sudo lz4 -d test_lvm.ddimg.lz4 | sudo dd of=/dev/data/restore

Warning : using stdout as default output. Do not rely on this behavior: use explicit `-c` instead !
dd: writing to '/dev/data/restore': No space left on device
51380225+0 records in
51380224+0 records out
26306674688 bytes (26 GB, 24 GiB) copied, 1181.48 s, 22.3 MB/s

Có cách nào để khôi phục ổ đĩa 500 GB chỉ chứa 19 GB trên đĩa nhỏ hơn 500 GB không?

answer

Dữ liệu bạn đang cố gắng khôi phục có kích thước 500 GB và dữ liệu đó sẽ không phù hợp với ổ đĩa hợp lý có kích thước 24 GB. Bạn có thể lựa chọn nhiều hơn về những gì bạn đang chuyển hoặc bạn có thể phân bổ nhiều không gian hơn cho nhóm khối lượng mục tiêu.

Có vẻ như dữ liệu trên ổ đĩa hợp lý mà bạn đang sao lưu chỉ là 19 GB. Có một số cách bạn có thể chuyển dữ liệu đó.

Nếu bạn chỉ quan tâm đến dữ liệu chứ không phải hệ thống tệp, bạn có thể tạo một hệ thống tệp mới (thông qua mkfs.ext4hoặc lâu hơn) trên đích và sử dụng các công cụ hoạt động trên tệp thay vì chặn các thiết bị, như rsync (1) hoặc tar (1).

Ngoài ra, bạn có thể sử dụng fsarchiver (8) , có thể sao lưu hệ thống tệp và sau đó khôi phục nó vào một thiết bị nhỏ hơn.

Cuối cùng, bạn có thể thu nhỏ kích thước của khối thiết bị mà bạn đang sao lưu bằng resize2fs (8) và lvreduce (8). Sau đó, bạn có thể sao lưu ổ đĩa nhỏ hơn đó và khôi phục về ổ đĩa có kích thước tương tự trên máy chủ mới.

Cách duy nhất mà bạn có thể khôi phục dữ liệu của mình là sử dụng thiết bị khối được nén (ví dụ: VDO, thiết bị lặp qua hệ thống tệp nén như btrfs và ZFS).

Tuy nhiên, ngay cả khi dữ liệu của bạn chỉ có 17GB, dung lượng trống có thể chứa dữ liệu từ các lần ghi trước đó và toàn bộ LV có thể không nén được.

Là hệ thống tệp nén, bạn có thể sử dụng btrfs hoặc ZFS và tạo tệp 500G zeroed mà bạn ánh xạ tới thiết bị vòng lặp (với losetup) hoặc trên ZFS, bạn có thể tạo trực tiếp thiết bị khối được nén. Sau đó, khôi phục LV của bạn vào thiết bị khối mà bạn đã tạo ở bước trước. Nén sẽ cho bạn cơ hội khôi phục tất cả dữ liệu.

Khái niệm (không) byte được sử dụng không tồn tại ở cấp độ của LVM. Việc một byte (hoặc thực sự là một sector) có chứa dữ liệu có ý nghĩa hay rác không sử dụng hay không được xác định bởi hệ thống tệp nằm bên trong LV. LVM không biết hệ thống tệp là gì. Tất cả những gì nó làm là cần một loạt các đĩa và kết hợp chúng một cách hợp lý theo hướng dẫn của bạn. Nó không quan tâm bạn sẽ làm gì với khối lượng tổng hợp đó.

Điều này có nghĩa là bạn đang chụp nhanh 500 GB dữ liệu. LVM không hiểu phần nào của ảnh chụp nhanh này có ý nghĩa và đáng được bảo tồn và phần nào thì không.

Những gì bạn muốn đạt được đều có thể thực hiện được ở cấp độ hệ thống tệp bằng hình ảnh. Một số phần mềm, như partclone miễn phí, hiểu cấu trúc của hệ thống tệp và có thể tạo ra một hình ảnh - về cơ bản là một tệp thưa thớt chỉ chứa các phần của hệ thống tệp đang được sử dụng. Điểm mấu chốt ở đây là thiết bị đích ít nhất phải có cùng kích thước với nguồn, bởi vì partclone không điều chỉnh hình dạng của hệ thống tệp: tất cả các phần được lưu trữ phải đi vào vị trí ban đầu của chúng khi hình ảnh được khôi phục.

Vì vậy, kế hoạch sẽ như sau:

  • Thay đổi kích thước hệ thống tệp nguồn thành 25 GB (điều này không yêu cầu thay đổi kích thước LV!)
  • Hình ảnh nó bằng partclone hoặc thứ gì đó tương tự
  • Tạo lại LV trên mục tiêu theo cách thủ công
  • Khôi phục hệ thống tệp từ hình ảnh

Một biến thể của điều này sẽ là thay đổi kích thước hệ thống tệp thành 25 GB và sau đó gửi qua ảnh chụp nhanh LVM. Nó sẽ xảy ra lỗi "không còn dung lượng trên thiết bị" vì bạn vẫn đang gửi toàn bộ 500 GB, nhưng không sao, vì chỉ 25 GB đầu tiên của ổ mới chứa hệ thống tệp.

Dù sao, bạn có thể sẽ phải điều chỉnh fstab nếu đây là những ổ đĩa có thể khởi động, vì vậy hãy chuẩn bị cho điều đó.

Hai điểm cần giải quyết.

Tạo một ảnh chụp nhanh LVM 24G, có nghĩa là ảnh chụp nhanh sẽ tồn tại 24G thay đổi giữa khối lượng gốc và khối lượng ảnh chụp nhanh. Bản thân thiết bị chụp nhanh sẽ xuất hiện như thể nó có cùng kích thước với ổ đĩa gốc. Ngay cả khi bạn không bao giờ thực hiện thay đổi đối với âm lượng ảnh chụp nhanh, bất kỳ thay đổi nào đối với âm lượng gốc sẽ phải được ghi lại dưới dạng những thay đổi giữa âm lượng gốc và ảnh chụp nhanh, và điều này sẽ tiêu hao so với kích thước 24G của ảnh chụp nhanh.

Để làm những gì bạn đang cố gắng làm, đây là một vài ý tưởng:

  1. Để có một bản sao không quá hoàn hảo, chỉ cần sử dụng bản sao cấp hệ thống tệp của các tệp:

trên máy chủ thử nghiệm:

sudo mount /dev/data/restore /mnt/restore

trên máy chủ nguồn:

sudo rsync -avPAHX /source/dir/ [email protected]:/mnt/restore/
  1. Để có một bản sao chính xác theo thời gian, hãy gắn ảnh chụp nhanh của bạn và rsyncđiều đó:
sudo mount -r /dev/vg0/backup_test /mnt/backup_test
sudo rsync -avPAHX /dev/vg0/backup_test/ [email protected]:/mnt/restore/
  1. Nếu bạn thực sự muốn chuyển hình ảnh đĩa, trước tiên bạn sẽ phải thu nhỏ hệ thống tệp và ổ đĩa hợp lý. Hãy nhớ rằng trước tiên bạn sẽ phải ngắt kết nối hệ thống tệp.
sudo lvresize -L24G -r vg0/test

Sau đó, làm những gì bạn đã làm.

Bạn phải sử dụng lvconvertlệnh với --mergesnapshottùy chọn và tên của ảnh chụp nhanh tập hợp lý để khôi phục tập hợp lý LVM. Khi --mergesnapshottùy chọn được sử dụng, ảnh chụp nhanh sẽ được hợp nhất vào tập hợp lý ban đầu và sau đó bị xóa.